更新时间:2026-07-28 GMT+08:00
创建hashbucket表
在一个数据库中创建第一张hashbucket表前,需要先将当前database绑定到集群默认的node group上。
- (可选)通过给DATABASE绑定node group生成CN上hash分布和DN上bucket的映射关系,语法如下:
ALTER DATABASE databasename TO GROUP groupname;
语法详情请参见《参考》中“SQL参考 > SQL语法 > A > ALTER DATABASE”章节中相关描述。
- 查询NODE GROUP。
gaussdb=# select group_name from pgxc_group where is_installation = true; group_name ------------------------- group_version1 (1 row) - 绑定到集群默认的NODE GROUP。具体语法请参见《参考》中“SQL参考 > SQL语法 > A > ALTER DATABASE”章节和“SQL参考 > SQL语法 > C > CREATE NODE GROUP”章节。
gaussdb=# ALTER DATABASE postgres TO GROUP group_version1; ALTER DATABASE
如果数据库第一次创建hashbucket表前不绑定NODE GROUP,则该建表命令会自动绑定集群当前默认的NODE GROUP上。
gaussdb=# CREATE TABLE hashbucket_table1(c1 VARCHAR2 (30)) WITH(storage_type=ustore, hashbucket=on) distribute by hash(c1); NOTICE: This is the first time ever to create a hashbucket table in this database. The database will be automatically altered to the installation node group "group_version1". NOTICE: hashbucket table need segment storage, set segment to on by default CREATE TABLE
- 查询NODE GROUP。
- 创建hashbucket表语法与创建普通表CREATE TABLE语法一致,在建表时需要额外设置参数hashbucket=on,且显式或隐式指定hash分布列。
- 存储参数hashbucket默认值为off,取值范围:
- on:表示创建hashbucket表,
- off:表示非hashbucket表。
- 指定hash分布列: hashbucket表要求至少有一列可以作为hash分布列,该列决定数据分布的bucket。hash分布列可以在建表时通过子句DISTRIBUTE BY hash(column_name)显式指定,不显式指定时则会隐式地选择第一个满足hash分布条件的列。
- 存储参数hashbucket默认值为off,取值范围:
- 创建hashbucket普通表。
gaussdb=# CREATE TABLE hashbucket_table1(c1 VARCHAR2 (30)) WITH(storage_type=ustore, hashbucket=on) DISTRIBUTE BY hash(c1); NOTICE: hashbucket table need segment storage, set segment to on by default CREATE TABLE - 创建hashbucket分区表。
gaussdb=# CREATE TABLE hashbucket_partiton_table_range1 ( c1 int , c2 bigint NOT NULL , c3 VARCHAR2 ( 30 ) ) WITH(storage_type=ustore, hashbucket=on) DISTRIBUTE BY hash(c3) PARTITION BY RANGE(c1)( PARTITION p1 VALUES LESS THAN (100000), PARTITION p2 VALUES LESS THAN (200000), PARTITION p3 VALUES LESS THAN (MAXVALUE) ); CREATE TABLE
具体语法请参见《参考》中“SQL参考 > SQL语法 > C > CREATE TABLE”章节和“SQL参考 > SQL语法 > C > CREATE TABLE PARTITION”章节。
- 在每个数据库内创建第一张hashbucket表相比普通表会更慢,这是由于创建第一张hashbucket表时会创建1024组段页式文件。
- 多张表并发创建时,需要等第一张表的段页式文件创建完成后,其他表才会创建成功。
- 设置GUC参数enable_hashbucket为on后,可以不指定WITH(hashbucket=on),默认创建hashbucket表。详情请参见《参考》中“数据库运行参数说明 > GUC参数说明 > 其它选项”章节中enable_hashbucket参数的介绍。
父主题: hashbucket