返回首页

gbase数据、南大通用产品文档:GBase8s

更新日期:2024年09月11日


GBase 8s 管理员参考
南大通用数据技术股份有限公司 - 544 -
lio 0 0 0.00 0 0 0.00 55287 37900

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

功能
这个参数用于控制是否启用Hash 重分布的GROUP BY 模式。
参数取值含义说明

参数= 0 禁用。

参数= 1 启用。进行分组(group by)运算之前,将会把临时结果利用哈希
算法重分布到各个运算节点,再由各个节点进行分组运算。由于数据在分到
各个节点之前已经做了哈希,因此产生的结果直接汇总即可得到最终结果,
不再需要由汇总节点再做一次分组。
该参数的默认值是1。
表6- 13 参数值范围说明表
默认值
最小值
最大值
1
0
1
说明
当查询包含OLAP 函数、ORDER BY、LIMIT 时,无法使用本参数进行优化。