更新日期:2024年09月11日
GBase UP 支持创建跨引擎分区表,即分区表的各个分区位于不同的引擎上,数据
也存放在不同的引擎上。用户以指定的名字在当前数据库上创建表。
语法格式
CREATE TABLE [IF NOT EXISTS] [database_name.]table_name
(column_definition [,column_definition], ...)
PARTITION BY RANGE( column_name)
(
PARTITION partition_name VALUES LESS THAN (DATE_SUB(CURRENT_DATE(), INTERVAL ….)
[ENGINE=’engine_name’]),
…
PARTITION partition_name VALUES LESS THAN MAXVALUE [ENGINE=’engine_name’]
);
参数说明
IF NOT EXISTS:该参数为可选参数,
用户可以使用关键字IF NOT EXISTS 创
建表,如果表已经存在,系统将报告WARNING 信息。
database_name:该参数为可选参数,指定数据库后,在此数据库下创建表。如
果没有显示指定database_name 参数,创建的表隶属于USE database_name 后
的数据中的表。
table_name:表命名规则请参见“5.8.1.1 数据库、表、列和别名”。默认情况下,
在当前数据库中创建表。如果没有指定当前数据库或表已经存在,则报告错误
信息。
column_definition:列定义规则请参见“5.3.5.2.1 CREATE 8A TABLE”。需要注
意的是,跨引擎分区表中,必须至少有1 列的data_type 为DATE 类型。
column_name:分区列必须为DATE 类型
partition_name:分区名称。
VALUES LESS THAN:分区值,有如下约束:
(1) 分区条件中的参数只能为表达式,不能为常量,分区条件只能使用如下的
函数:
date_add()/date_sub(),日期加减;
dayofmonth(),返回日期是本月中的第几天,此处对其进行了扩展,当输
入参数为空时,返回当前日期是本月中的第几天;
dayofyear(),返回日期是本年中的第几天,此处对其进行了扩展,当输入
参数为空时,返回当前日期是本年中的第几天;
GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 623
curdate,返回当前日期。
(2) 每个分区的分区值必须大于前一个分区的分区值
engine_name:
该参数为可选参数,
引擎名称,
只能为 EXPRESS、
GBASE8t、
HIVE 其中一个,默认为EXPRESS。当前分区表仅支持以下三种组合:
HIVE+EXPRESS+GBASE8t
HIVE+EXPRESS
EXPRESS+GBASE8t
示例1:
create table t1 (a int,b varchar(100),c date) partition by range(c)
( partition p1 values less than (date_sub(current_date(),interval 1 month))
engine='Hive',
partition p2 values less than (date_sub(current_date(),interval 1 week))
partition p3 values less than MAXVALUE engine=’GBase 8t’ );
此处创建了一个分区表t1,以c 列为分区列,有p1、p2、p3 三个分区,分区信息:
p1 分区位于Hive 上,存储距离当前时间1 个月以上的数据;
p2 分区位于GBase 8a 上,存储距离当前时间1 周至1 个月的数据;
p3 分区位于GBase 8t 上,存储距离当前时间1 周以内的数据。
执行此语句后,UP 会分别在Hive、GBase 8a 和GBase 8t 上创建3 个物理表,按照
分区列中的分区条件,将数据分别存储在3 个物理表上。
示例2:
create table t2(a int, b varchar(50), c date) partition by range(c)
( partition part1 values less than (date_sub(current_date(),interval 1 year)) engine
=hive ,
partition part2 values less than (date_sub(current_date(),interval 1 month)),
partition part3 values less than MAXVALUE engine =gbase8t);
此处创建了一个分区表t2,以c 列为分区列,有part1、part2、part3 三个分区,分
区信息:
part1 分区位于Hive 上,存储距离当前时间1 年以上的数据;
part2 分区位于GBase 8a 上,存储距离当前时间1 月至1 年的数据;
part3 分区位于GBase 8t 上,存储距离当前时间1 月以内的数据。
执行此语句后,UP 会分别在Hive、GBase 8a 和GBase 8t 上创建3 个物理表,按照
分区列中的分区条件,将数据分别存储在3 个物理表上。
GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 624