更新时间:2026-07-28 GMT+08:00
分享

创建hashbucket表

在一个数据库中创建第一张hashbucket表前,需要先将当前database绑定到集群默认的node group上。

  1. (可选)通过给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

  2. 创建hashbucket表语法与创建普通表CREATE TABLE语法一致,在建表时需要额外设置参数hashbucket=on,且显式或隐式指定hash分布列。

    • 存储参数hashbucket默认值为off,取值范围:
      • on:表示创建hashbucket表,
      • off:表示非hashbucket表。
    • 指定hash分布列: hashbucket表要求至少有一列可以作为hash分布列,该列决定数据分布的bucket。hash分布列可以在建表时通过子句DISTRIBUTE BY hash(column_name)显式指定,不显式指定时则会隐式地选择第一个满足hash分布条件的列。

  • 创建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参数的介绍。

相关文档