文档首页/ 云数据库 GaussDB/ 开发指南(分布式_V2.0-8.x)/ FAQ/ 如果建表时没有指定分布列,数据会怎么存储?
更新时间:2024-11-12 GMT+08:00
分享

如果建表时没有指定分布列,数据会怎么存储?

答:建表时没有指定分布列,数据会以如下三种场景存储:

  • 若建表时包含主键/唯一约束,则选取HASH分布,分布列为主键/唯一约束对应的列。
    gaussdb=# CREATE TABLE tb_test1
    (
        W_WAREHOUSE_SK            INTEGER            PRIMARY KEY,
        W_WAREHOUSE_ID            CHAR(16)              NOT NULL,
        W_WAREHOUSE_NAME          VARCHAR(20)                   
    );
    NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "tb_test1_pkey" for table "tb_test1"
    CREATE TABLE
    
    gaussdb=# SELECT getdistributekey('tb_test1');
     getdistributekey
    ------------------
     w_warehouse_sk
    (1 row)
    
    --删除表。
    gaussdb=# DROP TABLE tb_test1;
  • 若建表时不包含主键/唯一约束,但存在数据类型支持作分布列的列,则选取HASH分布,分布列为第一个数据类型支持作分布列的列。
    gaussdb=# CREATE TABLE tb_test2
    (
        W_WAREHOUSE_SK            INTEGER                       ,
        W_WAREHOUSE_ID            CHAR(16)              NOT NULL,
        W_WAREHOUSE_NAME          VARCHAR(20)                   
    );
    NOTICE:  The 'DISTRIBUTE BY' clause is not specified. Using 'w_warehouse_sk' as the distribution column by default.
    HINT:  Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column.
    CREATE TABLE
    
    gaussdb=# SELECT getdistributekey('tb_test2');
     getdistributekey
    ------------------
     w_warehouse_sk
    (1 row)
    
    --删除表。
    gaussdb=# DROP TABLE tb_test2;
  • 若建表时不包含主键/唯一约束,也不存在数据类型支持作分布列的列,选取ROUNDROBIN分布。
    gaussdb=# CREATE TABLE tb_test3
    (
        W_WAREHOUSE_ID            CHAR(16)              NOT NULL,
        W_WAREHOUSE_NAME          VARCHAR(20)                   
    );
    NOTICE:  The 'DISTRIBUTE BY' clause is not specified. Using 'w_warehouse_id' as the distribution column by default.
    HINT:  Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column.
    CREATE TABLE
    
    gaussdb=# SELECT getdistributekey('tb_test3');
     getdistributekey
    ------------------
     w_warehouse_id
    (1 row)
    
    --删除表。
    gaussdb=# DROP TABLE tb_test3;

相关文档