跳到主要内容

CREATE TABLE

描述

在当前或指定的数据库中创建一个新表。一个表可以有多个列,每个列的定义包括名称、数据类型,以及可选的以下属性:

  • 是否是 key
  • 是否有聚合语义
  • 是否是生成列
  • 是否要求值(NOT NULL)
  • 是否是自增列
  • 是否有插入时的默认值
  • 是否有更新时的默认值

此外,此命令还支持以下变体:

  • CREATE TABLE … AS SELECT(创建一个已填充数据的表;也称为 CTAS)
  • CREATE TABLE … LIKE(创建一个现有表的空副本)

语法

CREATE [ EXTERNAL ] TABLE [ IF NOT EXISTS ] <table_name>
(<columns_definition> [ <indexes_definition> ])
[ ENGINE = <table_engine_type> ]
[ <key_type> KEY (<key_cols>)
[ CLUSTER BY (<cluster_cols>) ]
]
[ COMMENT '<table_comment>' ]
[ <partitions_definition> ]
[ DISTRIBUTED BY { HASH (<distribute_cols>) | RANDOM }
[ BUCKETS { <bucket_count> | AUTO } ]
]
[ <roll_up_definition> ]
[ PROPERTIES (
-- 表属性
<table_property>
-- 其他表属性
[ , ... ])
]

其中:

columns_definition
: -- 列定义
<col_name> <col_type>
[ KEY ]
[ <col_aggregate_type> ]
[ [NOT] NULL ]
[ AUTO_INCREMENT(<col_auto_increment_start_value>) ]
[ DEFAULT <col_default_value> ]
[ ON UPDATE CURRENT_TIMESTAMP (<col_on_update_precision>) ]
[ COMMENT '<col_comment>' ]
-- 其他列定义
[ , <col_name> <col_type> [ ... ] ]
indexes_definition
: -- 索引定义
INDEX [ IF NOT EXISTS ]
<index_name> (<index_cols>)
[ USING <index_type> ]
[ PROPERTIES (
-- 表属性
<index_property>
-- 其他表属性
[ , ... ])
]
[ COMMENT '<index_comment>' ]
-- 其他索引定义
[ , <index_name> (<index_cols>) [ ... ] ]
partitions_definition
: AUTO PARTITION BY RANGE(
<auto_partition_function>(<auto_partition_arguments>))
()
| PARTITION BY <partition_type>
(<partition_cols>)
(
-- 分区定义
<one_partition_definition>
-- 其他分区定义
[ , ... ]
)
  • 其中: <one_partition_definition>

    <one_partition_definition>
    : PARTITION [ IF NOT EXISTS ] <partition_name>
    VALUES LESS THAN <partition_value_list>
    | PARTITION [ IF NOT EXISTS ] <partition_name>
    VALUES [ <partition_lower_bound>, <partition_upper_bound>)
    | FROM <partition_lower_bound> TO <partition_upper_bound>
    INTERVAL <n> [ <datetime_unit> ]
    | PARTITION [ IF NOT EXISTS ] <partition_name>
    VALUES IN {
    (<partition_value> [, <partition_value> [ ... ] ])
    | <partition_value>
    }
roll_up_definition
: ROLLUP (
-- 聚合定义
<rollup_name> (<rollup_cols>)
[ DUPLICATE KEY (<duplicate_cols>) ]
-- 其他聚合定义
[ , <rollup_name> (<rollup_cols>) [ ... ] ]
)

变种语法

CREATE TABLE … AS SELECT(也称为 CTAS)

创建一个填充 query 返回数据的表:

CREATE
[ EXTERNAL ]
TABLE [ IF NOT EXISTS ] <table_name>
[(<col_name> [ , <col_name> [ ... ] ] )]
[ <indexesDefinition> ]
[ ENGINE = <table_engine_type> ]
[ <key_type> KEY (<key_cols>)
[ CLUSTER BY (<cluster_cols>) ]
]
[ COMMENT '<table_comment>' ]
[ <partitionsDefinition> ]
[ DISTRIBUTED BY { HASH (<distribute_cols>) | RANDOM }
[ BUCKETS { <bucket_count> | AUTO } ]
]
[ <rollUpDefinition> ]
[ PROPERTIES (
-- 表属性
<table_property>
-- 其他表属性
[ , ... ])
]
AS <query>

CREATE TABLE … LIKE

创建一个新表,其列定义与现有表相同,但不从现有表中复制数据。列的所有属性将被复制到新的表中。如果指定了 rollup 列表,那么原表中对应名字的 rollup 也将复制到新的表中:

CREATE TABLE <table_name> LIKE <source_table>
[ WITH ROLLUP (<rollup_names>) ]

必选参数

指定表的标识符(即名称);在创建表的数据库(Database)中必须唯一。

标识符必须以字母字符(如果开启 unicode 名字支持,则可以是任意语言文字的字符)开头,并且不能包含空格或特殊字符,除非整个标识符字符串用反引号括起来(例如My Object)。

标识符不能使用保留关键字。

有关更多详细信息,请参阅标识符要求保留关键字

<col_name>

指定列标识符(即名称)。在创建的表中必须唯一。

标识符必须以字母字符(如果开启 unicode 名字支持,则可以是任意语言文字的字符),数字或符号@开头,并且不能包含空格或特殊字符,除非整个标识符字符串用反引号括起来(例如My Object)。

有关更多详细信息,请参阅标识符要求保留关键字

<col_type>

指定列的数据类型。

有关可以为表列指定的数据类型的详细信息,请参阅数据类型章节。

在 CTAS 中为必选参数。指定填充数据的 SELECT 语句。

<source_table>

在 CREATE TABLE ... LIKE 中为必选参数。指定被复制的原表。

可选参数

数据模型相关参数

<key_type>

表的数据模型。可选值为 DUPLICATE(明细模型)、UNIQUE(主键模型)、AGGREGATE(聚合模型)。有关数据模型的详细信息,请参阅数据模型章节。

<key_cols>

表的 key 列。Doris 中 Key 列必须是表的前 K 个列。单个 tablet 中的数据会按照这些列保持有序。关于 Key 的限制,以及如何选择 Key 列,请参阅数据模型章节中的各个小节。

<cluster_cols>

数据局部排序列,只能在数据模型为 UNIQUE(主键模型)时使用。当指定 <cluster_cols> 后,数据按照<cluster_cols>排序,而不再使用<key_cols>

<col_aggregate_type>

列的聚合方式。只有当表是聚合模型时可以使用。聚合方式的详细信息,请参阅聚合模型章节。

分桶相关参数

<distribute_cols> 和 <bucket_count>

分桶列和分桶数。明细模型的分桶列可以是任意的列,聚合模型和主键模型的分桶列必须和 key 列保持一致。分桶数是任意的正整数。有关分桶的详细信息,请参阅手动分桶自动分桶章节。

列的默认值相关参数

AUTO_INCREMENT(<col_auto_increment_start_value>)

在导入数据时,Doris 会为在自增列上没有指定值的数据行分配一个表内唯一的值。<col_auto_increment_start_value> 指定自增列的起始值。自增列的详细信息,请参阅自增列章节。

DEFAULT <col_default_value>

列的默认值。当写入时不包含此列时,使用此默认值填充。当默认值不显式设置时,使用 NULL 填充。可用的默认值包括:

  • NULL:全部类型均可用,用 NULL 作为默认值。
  • 数值字面量:只能是数值类型时使用。
  • 字符串字面量:只能是字符串类型时使用。
  • CURRENT_DATE:只能是 date 类型时使用。用当前日期作为默认值。
  • CURRENT_TIMESTAMP [ ]:只能是 datetime 类型时使用。用当前时间作为默认值。 可以指定时间精度。
  • PI:只能是 double 类型时使用。用圆周率作为默认值。
  • E:只能是 double 类型时使用。用数学常数作为默认值。
  • BITMAP_EMPTY:只能当列是 bitmap 类型时使用。填充空的 bitmap。

ON UPDATE CURRENT_TIMESTAMP (<col_on_update_precision>)

当数据更新时,如果没有指定此列的值,则使用当前时间戳更新此列数据。只能在 UNIQUE(主键模型)的表上使用。

索引相关参数

<index_name>

指定索引标识符(即名称)。在创建的表中必须唯一。有关标识符的更多详细信息,请参阅标识符要求保留关键字

<index_cols>

添加索引的列列表。必须是表中存在的列。

<index_type>

索引的类型。当前仅支持 INVERTED

<index_property>

索引的属性。详细说明请参考倒排索引章节。

自动分区相关参数

有关分区的详细介绍,请参阅自动分区章节。

<auto_partition_function>(<auto_partition_arguments>)

自动分区方式。<auto_partition_function> 目前只支持date_trunc。<auto_partition_arguments> 填写自动分区的列和 date_trunc 的单位。例如 date_trunc(col_1, 'day')

当使用自动分区时,分区列必须为 NOT NULL。

手动分区相关参数

有关分区的详细介绍,请参阅“手动分区”章节。

<partition_type>

Doris 支持 RANGE 分区和 LIST 分区。详情请参阅手动分区章节。

<partition_name>

分区标识符(即名称)。在创建的表中必须唯一。有关标识符的更多详细信息,请参阅标识符要求保留关键字

VALUES LESS THAN <partition_value_list>

range 分区。分区数据范围从下界到 <partition_value_list>。

如果是表示上界,<partition_value_list> 可以用 MAX_VALUE 简化书写。

<partition_value_list> 的格式如下:((col_1_value, ...), (col_1_value, ...), ...)

VALUES [ <partition_lower_bound>, <partition_upper_bound>)

range 分区。分区数据范围从 <partition_lower_bound> 到 <partition_upper_bound>。只创建一个分区。

<partition_lower_bound> 和 <partition_upper_bound> 格式如下:(col_1_value, ...)

FROM <partition_lower_bound> TO <partition_upper_bound>

INTERVAL [ <datetime_unit> ]

range 分区。分区数据范围从 <partition_lower_bound> 到 <partition_value_list>。每建个 创建一个分区。

<partition_lower_bound> 和 <partition_upper_bound> 格式如下:(col_1_value, ...)

VALUES IN {

(<partition_value> [, <partition_value> [ ... ] ])

| <partition_value>

}

list 分区。分区列等于 <partition_value> 的属于此分区。

<partition_value> 格式如下:(col_1_value, ...)

同步物化视图相关

注意

rollup 可以创建的同步物化视图功能有限。已不再推荐使用。推荐使用独立的语句创建同步物化视图。详情请参阅 CREATE MATERIALIZED VIEW 语句和同步物化视图章节。

<rollup_name>

同步物化视图的标示符(即名称)。在创建的表中必须唯一。有关标识符的更多详细信息,请参阅标识符要求保留关键字

<rollup_cols>

同步物化视图包含的列。

表属性相关参数

<table_property>

属性名作用
replication_num副本数。默认副本数为 3。如果 BE 节点数量小于 3,则需指定副本数小于等于 BE 节点数量。在 0.15 版本后,该属性将自动转换成 replication_allocation 属性,如:"replication_num" = "3" 会自动转换成 "replication_allocation" = "tag.location.default:3"
replication_allocation根据 Tag 设置副本分布情况。该属性可以完全覆盖 replication_num 属性的功能。
min_load_replica_num设定数据导入成功所需的最小副本数,默认值为 -1。当该属性小于等于 0 时,表示导入数据仍需多数派副本成功。
is_being_synced用于标识此表是否是被 CCR 复制而来并且正在被 syncer 同步,默认为 false。如果设置为 truecolocate_withstorage_policy属性将被擦除。dynamic partitionauto bucket功能将会失效。即在show create table中显示开启状态,但不会实际生效。当is_being_synced被设置为 false 时,这些功能将会恢复生效。这个属性仅供 CCR 外围模块使用,在 CCR 同步的过程中不要手动设置。
storage_medium声明表数据的初始存储介质
storage_cooldown_time设定表数据的初始存储介质的到期时间。超过此时间后,会自动降级到第一级别的存储介质上。
colocate_with当需要使用 Colocation Join 功能时,使用这个参数设置 Colocation Group。
bloom_filter_columns用户指定需要添加 Bloom Filter 索引的列名称列表。各个列的 Bloom Filter 索引是独立的,并不是组合索引。列如:"bloom_filter_columns" = "k1, k2, k3"
compressionDoris 表的默认压缩方式是 LZ4。1.1 版本后,支持将压缩方式指定为 ZSTD 以获得更高的压缩比。
function_column.sequence_col当使用 Unique Key 模型时,可以指定一个 Sequence 列,当 Key 列相同时,将按照 Sequence 列进行 REPLACE(较大值替换较小值,否则无法替换) 。function_column.sequence_col用来指定 sequence 列到表中某一列的映射,该列可以为整型和时间类型(DATE、DATETIME),创建后不能更改该列的类型。如果设置了function_column.sequence_col, function_column.sequence_type将被忽略。
function_column.sequence_type当使用 Unique Key 模型时,可以指定一个 Sequence 列,当 Key 列相同时,将按照 Sequence 列进行 REPLACE(较大值替换较小值,否则无法替换) 这里我们仅需指定顺序列的类型,支持时间类型或整型。Doris 会创建一个隐藏的顺序列。
enable_unique_key_merge_on_writeUnique 表是否使用 Merge-on-Write 实现。该属性在 2.1 版本之前默认关闭,从 2.1 版本开始默认开启。
light_schema_change是否使用 Light Schema Change 优化。如果设置成 true, 对于值列的加减操作,可以更快地,同步地完成。该功能在 2.0.0 及之后版本默认开启。
disable_auto_compaction是否对这个表禁用自动 Compaction。如果这个属性设置成 true, 后台的自动 Compaction 进程会跳过这个表的所有 Tablet。
enable_single_replica_compaction是否对这个表开启单副本 Compaction。如果这个属性设置成 true, 这个表的 Tablet 的所有副本只有一个进行实际的 compaction 动作,其他副本的从该副本拉取完成 compaction 的 rowset。
enable_duplicate_without_keys_by_default当配置为true时,如果创建表的时候没有指定 Unique、Aggregate 或 Duplicate 时,会默认创建一个没有排序列和前缀索引的 Duplicate 模型的表。
skip_write_index_on_load是否对这个表开启数据导入时不写索引。如果这个属性设置成 true, 数据导入的时候不写索引(目前仅对倒排索引生效),而是在 Compaction 的时候延迟写索引。这样可以避免首次写入和 Compaction 重复写索引的 CPU 和 IO 资源消耗,提升高吞吐导入的性能。
compaction_policy配置这个表的 Compaction 的合并策略,仅支持配置为 time_series 或者 size_basedtime_series: 当 rowset 的磁盘体积积攒到一定大小时进行版本合并。合并后的 rowset 直接晋升到 base compaction 阶段。在时序场景持续导入的情况下有效降低 compact 的写入放大率。此策略将使用 time_series_compaction 为前缀的参数调整 Compaction 的执行
time_series_compaction_goal_size_mbytesCompaction 的合并策略为 time_series 时,将使用此参数来调整每次 Compaction 输入的文件的大小,输出的文件大小和输入相当
time_series_compaction_file_count_thresholdCompaction 的合并策略为 time_series 时,将使用此参数来调整每次 Compaction 输入的文件数量的最小值。一个 Tablet 中,文件数超过该配置,就会触发 Compaction
time_series_compaction_time_threshold_secondsCompaction 的合并策略为 time_series 时,将使用此参数来调整 Compaction 的最长时间间隔,即长时间未执行过 Compaction 时,就会触发一次 Compaction,单位为秒
time_series_compaction_level_thresholdCompaction 的合并策略为 time_series 时,此参数默认为 1,当设置为 2 时用来控住对于合并过一次的段再合并一层,保证段大小达到 time_series_compaction_goal_size_mbytes,能达到段数量减少的效果。
group_commit_interval_ms配置这个表的 Group Commit 攒批间隔。单位为 ms,默认值为 10000ms,即 10s。Group Commit 的下刷时机取决于 group_commit_interval_ms以及group_commit_data_bytes哪个先到设置的值。
group_commit_data_bytes配置这个表的 Group Commit 攒批数据大小。单位为 bytes,默认值为 134217728,即 128MB。Group Commit 的下刷时机取决于 group_commit_interval_ms以及group_commit_data_bytes 哪个先到设置的值。
enable_mow_light_delete是否在 Unique 表 Mow 上开启 Delete 语句写 Delete predicate。若开启,会提升 Delete 语句的性能,但 Delete 后进行部分列更新可能会出现部分数据错误的情况。若关闭,会降低 Delete 语句的性能来保证正确性。此属性的默认值为 false。此属性只能在 Unique Merge-on-Write 表上开启。
动态分区相关属性动态分区相关参考数据划分 - 动态分区

权限控制

执行此 SQL 命令的用户必须至少具有以下权限

权限对象说明
CREATE_PRIV数据库(Database)
SELECT_PRIV表(Table), 视图(View)当执行 CTAS 时,需要拥有被查询的表,视图或物化视图的 SELECT_PRIV 权限

注意事项

  • 数据库(Database)中不能包含具有相同名称的表(Table),视图(View)。

  • 表名,列名,rollup 名,不能使用保留关键字(Reserved Keywords)

  • CREATE TABLE … LIKE:

    • 只能对 Doris 内表使用此命令
    • 显示指定的 rollup 才会被复制
    • 所有的同步物化视图都不会被复制
  • CREATE TABLE … AS SELECT (CTAS):

    • 如果 SELECT 列表中列名的别名是有效的列,则在 CTAS 语句中不需要列定义;如果省略,列名和数据类型将从基础查询中推断出来:

      CREATE TABLE <table_name> AS SELECT ...
    • 或者,可以使用以下语法明确指定名称:

      CREATE TABLE <table_name> ( <col1_name> , <col2_name> , ... ) AS SELECT ...
  • 分区和分桶

    • 一个表必须指定分桶列,但可以不指定分区。关于分区和分桶的具体介绍,可参阅 数据划分 文档。
    • Doris 中的表可以分为分区表和无分区的表。这个属性在建表时确定,之后不可更改。即对于分区表,可以在之后的使用过程中对分区进行增删操作,而对于无分区的表,之后不能再进行增加分区等操作。
    • 分区列和分桶列在表创建之后不可更改,既不能更改分区和分桶列的类型,也不能对这些列进行任何增删操作。
  • 动态分区

    • 动态分区功能主要用于帮助用户自动的管理分区。通过设定一定的规则,Doris 系统定期增加新的分区或删除历史分区。可参阅 动态分区 文档查看更多帮助。
  • 自动分区

  • 同步物化视图

    • 用户可以在建表的同时创建多个同步物化视图(ROLLUP)。同步物化视图也可以在建表之后添加。写在建表语句中可以方便用户一次性创建所有同步物化视图。
    • 如果在建表时创建好同步物化视图,则后续的所有数据导入操作都会同步生成同步物化视图的数据。同步物化视图的数量可能会影响数据导入的效率。
    • 关于物化视图的介绍,请参阅文档 同步物化视图
  • 索引

    • 用户可以在建表的同时创建多个列的索引。索引也可以在建表之后再添加。
    • 如果在之后的使用过程中添加索引,如果表中已有数据,则需要重写所有数据,因此索引的创建时间取决于当前数据量。

示例

基础示例

明细模型

CREATE TABLE t1
(
c1 INT,
c2 STRING
)
DUPLICATE KEY(c1)
DISTRIBUTED BY HASH(c1)
PROPERTIES (
'replication_num' = '1'
)

聚合模型

CREATE TABLE t2
(
c1 INT,
c2 INT MAX
)
AGGREGATE KEY(c1)
DISTRIBUTED BY HASH(c1)
PROPERTIES (
'replication_num' = '1'
)

主键模型

CREATE TABLE t3
(
c1 INT,
c2 INT
)
UNIQUE KEY(c1)
DISTRIBUTED BY HASH(c1)
PROPERTIES (
'replication_num' = '1'
)

指定列的默认值

CREATE TABLE t5
(
c1 INT,
c2 INT DEFAULT 10
)
DUPLICATE KEY(c1)
DISTRIBUTED BY HASH(c1)
PROPERTIES (
'replication_num' = '1'
)

分桶方式

CREATE TABLE t6
(
c1 INT,
c2 INT
)
DUPLICATE KEY(c1)
DISTRIBUTED BY RANDOM
PROPERTIES (
'replication_num' = '1'
)

自动分区

CREATE TABLE t7
(
c1 INT,
c2 DATETIME NOT NULL
)
DUPLICATE KEY(c1)
AUTO PARTITION BY RANGE(date_trunc(c2, 'day')) ()
DISTRIBUTED BY RANDOM
PROPERTIES (
'replication_num' = '1'
)

range 分区

CREATE TABLE t8
(
c1 INT,
c2 DATETIME NOT NULL
)
DUPLICATE KEY(c1)
PARTITION BY RANGE(c2) (
FROM ('2020-01-01') TO ('2020-01-10') INTERVAL 1 DAY
)
DISTRIBUTED BY RANDOM
PROPERTIES (
'replication_num' = '1'
)

list 分区

CREATE TABLE t9
(
c1 INT,
c2 DATE NOT NULL
)
DUPLICATE KEY(c1)
PARTITION BY LIST(c2) (
PARTITION p1 VALUES IN (('2020-01-01'),('2020-01-02'))
)
DISTRIBUTED BY RANDOM
PROPERTIES (
'replication_num' = '1'
)

存储介质和冷却时间

CREATE TABLE example_db.table_hash
(
k1 BIGINT,
k2 LARGEINT,
v1 VARCHAR(2048),
v2 SMALLINT DEFAULT "10"
)
UNIQUE KEY(k1, k2)
DISTRIBUTED BY HASH (k1, k2) BUCKETS 32
PROPERTIES(
"storage_medium" = "SSD",
"storage_cooldown_time" = "2015-06-04 00:00:00"
);

通过 storage_policy 属性设置表的冷热分层数据迁移策略

  1. 需要先创建 s3 resource 和 storage policy,表才能关联迁移策略成功

    -- 非分区表
    CREATE TABLE IF NOT EXISTS create_table_use_created_policy
    (
    k1 BIGINT,
    k2 LARGEINT,
    v1 VARCHAR(2048)
    )
    UNIQUE KEY(k1)
    DISTRIBUTED BY HASH (k1) BUCKETS 3
    PROPERTIES(
    "storage_policy" = "test_create_table_use_policy",
    "replication_num" = "1"
    );

    -- 分区表
    CREATE TABLE create_table_partion_use_created_policy
    (
    k1 DATE,
    k2 INT,
    V1 VARCHAR(2048) REPLACE
    ) PARTITION BY RANGE (k1) (
    PARTITION p1 VALUES LESS THAN ("2022-01-01") ("storage_policy" = "test_create_table_partition_use_policy_1" ,"replication_num"="1"),
    PARTITION p2 VALUES LESS THAN ("2022-02-01") ("storage_policy" = "test_create_table_partition_use_policy_2" ,"replication_num"="1")
    ) DISTRIBUTED BY HASH(k2) BUCKETS 1;

Colocation Group

CREATE TABLE t1 (
id int(11) COMMENT "",
value varchar(8) COMMENT ""
)
DUPLICATE KEY(id)
DISTRIBUTED BY HASH(id) BUCKETS 10
PROPERTIES (
"colocate_with" = "group1"
);

CREATE TABLE t2 (
id int(11) COMMENT "",
value1 varchar(8) COMMENT "",
value2 varchar(8) COMMENT ""
)
DUPLICATE KEY(`id`)
DISTRIBUTED BY HASH(`id`) BUCKETS 10
PROPERTIES (
"colocate_with" = "group1"
);

索引

CREATE TABLE example_db.table_hash
(
k1 TINYINT,
k2 DECIMAL(10, 2) DEFAULT "10.5",
v1 CHAR(10) REPLACE,
v2 INT SUM,
INDEX k1_idx (k1) USING INVERTED COMMENT 'my first index'
)
AGGREGATE KEY(k1, k2)
DISTRIBUTED BY HASH(k1) BUCKETS 32
PROPERTIES (
"bloom_filter_columns" = "k2"
);

设置表的副本属性

CREATE TABLE example_db.table_hash
(
k1 TINYINT,
k2 DECIMAL(10, 2) DEFAULT "10.5"
)
DISTRIBUTED BY HASH(k1) BUCKETS 32
PROPERTIES (
"replication_allocation"="tag.location.group_a:1, tag.location.group_b:2"
);

动态分区

该表每天提前创建 3 天的分区,并删除 3 天前的分区。例如今天为2020-01-08,则会创建分区名为p20200108, p20200109, p20200110, p20200111的分区。分区范围分别为:

[types: [DATE]; keys: [2020-01-08]; ‥types: [DATE]; keys: [2020-01-09]; )
[types: [DATE]; keys: [2020-01-09]; ‥types: [DATE]; keys: [2020-01-10]; )
[types: [DATE]; keys: [2020-01-10]; ‥types: [DATE]; keys: [2020-01-11]; )
[types: [DATE]; keys: [2020-01-11]; ‥types: [DATE]; keys: [2020-01-12]; )
CREATE TABLE example_db.dynamic_partition
(
k1 DATE,
k2 INT,
k3 SMALLINT,
v1 VARCHAR(2048),
v2 DATETIME DEFAULT "2014-02-04 15:36:00"
)
DUPLICATE KEY(k1, k2, k3)
PARTITION BY RANGE (k1) ()
DISTRIBUTED BY HASH(k2) BUCKETS 32
PROPERTIES(
"dynamic_partition.time_unit" = "DAY",
"dynamic_partition.start" = "-3",
"dynamic_partition.end" = "3",
"dynamic_partition.prefix" = "p",
"dynamic_partition.buckets" = "32"
);

设置动态分区的副本属性

CREATE TABLE example_db.dynamic_partition
(
k1 DATE,
k2 INT,
k3 SMALLINT,
v1 VARCHAR(2048),
v2 DATETIME DEFAULT "2014-02-04 15:36:00"
)
PARTITION BY RANGE (k1) ()
DISTRIBUTED BY HASH(k2) BUCKETS 32
PROPERTIES(
"dynamic_partition.time_unit" = "DAY",
"dynamic_partition.start" = "-3",
"dynamic_partition.end" = "3",
"dynamic_partition.prefix" = "p",
"dynamic_partition.buckets" = "32",
"dynamic_partition.replication_allocation" = "tag.location.group_a:3"
);

CTAS 示例

CREATE TABLE t10
PROPERTIES (
'replication_num' = '1'
)
AS SELECT * FROM t1

CREATE TABLE ... LIKE 示例

CREATE TABLE t11 LIKE t10