更新时间: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;
父主题: FAQ