KassieZ commented on code in PR #2269: URL: https://github.com/apache/doris-website/pull/2269#discussion_r2034817719
########## i18n/zh-CN/docusaurus-plugin-content-docs/version-2.1/sql-manual/sql-statements/table-and-view/table/CREATE-TABLE.md: ########## @@ -30,824 +30,731 @@ under the License. ## 描述 -该命令用于创建一张表。 +在当前或指定的数据库中创建一个新表。一个表可以有多个列,每个列的定义包括名称、数据类型,以及可选的以下属性: -```sql -CREATE TABLE [IF NOT EXISTS] [database.]table -( - column_definition_list - [, index_definition_list] -) -[engine_type] -[keys_type] -[table_comment] -[partition_info] -distribution_desc -[rollup_list] -[properties] -[extra_properties] -``` - -#### column_definition_list - -列定义列表: - -`column_definition[, column_definition]` -* `column_definition` - 列定义: - - `column_name column_type [KEY] [aggr_type] [NULL] [AUTO_INCREMENT(auto_inc_start_value)] [default_value] [on update current_timestamp] [column_comment]` - * `column_type` - 列类型,支持以下类型: - ``` - TINYINT(1 字节) - 范围:-2^7 + 1 ~ 2^7 - 1 - SMALLINT(2 字节) - 范围:-2^15 + 1 ~ 2^15 - 1 - INT(4 字节) - 范围:-2^31 + 1 ~ 2^31 - 1 - BIGINT(8 字节) - 范围:-2^63 + 1 ~ 2^63 - 1 - LARGEINT(16 字节) - 范围:-2^127 + 1 ~ 2^127 - 1 - FLOAT(4 字节) - 支持科学计数法 - DOUBLE(12 字节) - 支持科学计数法 - DECIMAL[(precision, scale)] (16 字节) - 保证精度的小数类型。默认是 DECIMAL(9, 0) - precision: 1 ~ 27 - scale: 0 ~ 9 - 其中整数部分为 1 ~ 18 - 不支持科学计数法 - DATE(3 字节) - 范围:0000-01-01 ~ 9999-12-31 - DATETIME(8 字节) - 范围:0000-01-01 00:00:00 ~ 9999-12-31 23:59:59 - CHAR[(length)] - 定长字符串。长度范围:1 ~ 255。默认为 1 - VARCHAR[(length)] - 变长字符串。长度范围:1 ~ 65533。默认为 65533 - HLL (1~16385 个字节) - HyperLogLog 列类型,不需要指定长度和默认值。长度根据数据的聚合程度系统内控制。 - 必须配合 HLL_UNION 聚合类型使用。 - BITMAP - bitmap 列类型,不需要指定长度和默认值。表示整型的集合,元素最大支持到 2^64 - 1。 - 必须配合 BITMAP_UNION 聚合类型使用。 - ``` - * `aggr_type` - 聚合类型,支持以下聚合类型: - ``` - SUM:求和。适用数值类型。 - MIN:求最小值。适合数值类型。 - MAX:求最大值。适合数值类型。 - REPLACE:替换。对于维度列相同的行,指标列会按照导入的先后顺序,后导入的替换先导入的。 - REPLACE_IF_NOT_NULL:非空值替换。和 REPLACE 的区别在于对于 null 值,不做替换。这里要注意的是字段默认值要给 NULL,而不能是空字符串,如果是空字符串,会给你替换成空字符串。 - HLL_UNION:HLL 类型的列的聚合方式,通过 HyperLogLog 算法聚合。 - BITMAP_UNION:BIMTAP 类型的列的聚合方式,进行位图的并集聚合。 - ``` - - * `default_value` - 列默认值,当导入数据未指定该列的值时,系统将赋予该列 `default_value`。 - - 语法为`default default_value`。 - - 当前 `default_value` 支持两种形式: - 1. 用户指定固定值,如: - ```sql - k1 INT DEFAULT '1', - k2 CHAR(10) DEFAULT 'aaaa' - ``` - 2. 系统提供的关键字,目前支持以下关键字: - - ```sql - // 只用于 DATETIME 类型,导入数据缺失该值时系统将赋予当前时间 - dt DATETIME DEFAULT CURRENT_TIMESTAMP - // 只用于 DATE 类型,导入数据缺失该值时系统将赋予当前日期 - dt DATE DEFAULT CURRENT_DATE - ``` - * `on update current_timestamp` - - 是否在该行有列更新时将该列的值更新为当前时间 (`current_timestamp`)。该特性只能在开启了 Merge-on-Write 的 Unique 表上使用,开启了这个特性的列必须声明默认值,且默认值必须为 `current_timestamp`。如果此处声明了时间戳的精度,则该列默认值中的时间戳精度必须与该处的时间戳精度相同。 - - - 示例: - - ```text - k1 TINYINT, - k2 DECIMAL(10,2) DEFAULT "10.5", - k4 BIGINT NULL DEFAULT "1000" COMMENT "This is column k4", - v1 VARCHAR(10) REPLACE NOT NULL, - v2 BITMAP BITMAP_UNION, - v3 HLL HLL_UNION, - v4 INT SUM NOT NULL DEFAULT "1" COMMENT "This is column v4" - dt datetime(6) default current_timestamp(6) on update current_timestamp(6) - ``` - -#### index_definition_list +- 是否是 key +- 是否有聚合语义 +- 是否是生成列 +- 是否要求值(NOT NULL) +- 是否是自增列 +- 是否有插入时的默认值 +- 是否有更新时的默认值 -索引列表定义: +此外,此命令还支持以下变体: -`index_definition[, index_definition]` - -* `index_definition` - - 索引定义: - - ```sql - INDEX index_name (col_name) [USING INVERTED] COMMENT 'xxxxxx' - ``` - - 示例: - - ```sql - INDEX idx1 (k1) USING INVERTED COMMENT "This is a inverted index1", - INDEX idx2 (k2) USING INVERTED COMMENT "This is a inverted index2", - ... - ``` +- CREATE TABLE … AS SELECT(创建一个已填充数据的表;也称为 CTAS) +- CREATE TABLE … LIKE(创建一个现有表的空副本) -#### engine_type +## 语法 -表引擎类型。本文档中类型皆为 OLAP。示例: - - `ENGINE=olap` - -#### keys_type - -数据模型。 - -`key_type(col1, col2, ...)` - -`key_type` 支持以下模型: - -* DUPLICATE KEY(默认):其后指定的列为排序列。 -* AGGREGATE KEY:其后指定的列为维度列。 -* UNIQUE KEY:其后指定的列为主键列。 - -注:当表属性`enable_duplicate_without_keys_by_default = true`时,默认创建没有排序列的 Duplicate 表。 - -示例: - -``` -DUPLICATE KEY(col1, col2), -AGGREGATE KEY(k1, k2, k3), -UNIQUE KEY(k1, k2) +```sql +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 + <table_property> + -- Additional table properties + [ , ... ]) + ] ``` - -#### table_comment - -表注释。示例: - - ``` - COMMENT "This is my first DORIS table" - ``` -#### partition_info +其中: -分区信息,支持三种写法: - -1. LESS THAN:仅定义分区上界。下界由上一个分区的上界决定。 - - ``` - PARTITION BY RANGE(col1[, col2, ...]) - ( - PARTITION partition_name1 VALUES LESS THAN MAXVALUE|("value1", "value2", ...), - PARTITION partition_name2 VALUES LESS THAN MAXVALUE|("value1", "value2", ...) - ) - ``` - -2. FIXED RANGE:定义分区的左闭右开区间。 - - ``` - PARTITION BY RANGE(col1[, col2, ...]) - ( - PARTITION partition_name1 VALUES [("k1-lower1", "k2-lower1", "k3-lower1",...), ("k1-upper1", "k2-upper1", "k3-upper1", ...)), - PARTITION partition_name2 VALUES [("k1-lower1-2", "k2-lower1-2", ...), ("k1-upper1-2", MAXVALUE, )) - ) - ``` - -3. MULTI RANGE:批量创建 RANGE 分区,定义分区的左闭右开区间,设定时间单位和步长,时间单位支持年、月、日、周和小时。 - - ``` - PARTITION BY RANGE(col) - ( - FROM ("2000-11-14") TO ("2021-11-14") INTERVAL 1 YEAR, - FROM ("2021-11-14") TO ("2022-11-14") INTERVAL 1 MONTH, - FROM ("2022-11-14") TO ("2023-01-03") INTERVAL 1 WEEK, - FROM ("2023-01-03") TO ("2023-01-14") INTERVAL 1 DAY - ) - ``` -:::tip 提示 -该功能自 Apache Doris 1.2 版本起支持 -::: +```sql +columns_definition + : -- Column definition + <col_name> <col_type> + [ KEY ] + [ <col_aggregate_type> ] + [ [ GENERATED ALWAYS ] AS (<col_generate_expression>) ] + [ [NOT] NULL ] + [ AUTO_INCREMENT(<col_auto_increment_start_value>) ] + [ DEFAULT <col_default_value> ] + [ ON UPDATE CURRENT_TIMESTAMP (<col_on_update_precision>) ] + [ COMMENT '<col_comment>' ] + -- Additional column definitions + [ , <col_name> <col_type> [ ... ] ] +``` -4. MULTI RANGE:批量创建数字类型的 RANGE 分区,定义分区的左闭右开区间,设定步长。 +```sql +indexes_definition + : -- Index definition + INDEX [ IF NOT EXISTS ] + <index_name> (<index_cols>) + [ USING <index_type> ] + [ PROPERTIES ( + -- Table property + <index_property> + -- Additional table properties + [ , ... ]) + ] + [ COMMENT '<index_comment>' ] + -- Additional index definitions + [ , <index_name> (<index_cols>) [ ... ] ] +``` - ``` - PARTITION BY RANGE(int_col) +```sql +partitions_definition + : AUTO PARTITION BY RANGE( + <auto_partition_function>(<auto_partition_arguments>)) + () + | PARTITION BY <partition_type> + (<partition_cols>) ( - FROM (1) TO (100) INTERVAL 10 + -- Partition definition + <one_partition_definition> + -- Additional partition definition + [ , ... ] ) - ``` - - -#### distribution_desc - -定义数据分桶方式。 - -1. Hash 分桶 - 语法: - `DISTRIBUTED BY HASH (k1[,k2 ...]) [BUCKETS num|auto]` - 说明: - 使用指定的 key 列进行哈希分桶。 -2. Random 分桶 - 语法: - `DISTRIBUTED BY RANDOM [BUCKETS num|auto]` - 说明: - 使用随机数进行分桶。 - -#### rollup_list - -建表的同时可以创建多个物化视图(ROLLUP)。 - -`ROLLUP (rollup_definition[, rollup_definition, ...])` - -* `rollup_definition` - - `rollup_name (col1[, col2, ...]) [DUPLICATE KEY(col1[, col2, ...])] [PROPERTIES("key" = "value")]` +``` - 示例: +- 其中: <one_partition_definition> - ``` - ROLLUP ( - r1 (k1, k3, v1, v2), - r2 (k1, v1) + ```sql + <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> + } + ``` + +```sql +roll_up_definition + : ROLLUP ( + -- Rollup definition + <rollup_name> (<rollup_cols>) + [ DUPLICATE KEY (<duplicate_cols>) ] + -- Additional rollup deifinition + [ , <rollup_name> (<rollup_cols>) [ ... ] ] ) - ``` +``` -#### properties +## 变种语法 -设置表属性。目前支持以下属性: +### CREATE TABLE … AS SELECT(也称为 CTAS) -* `replication_num` +创建一个填充 `query` 返回数据的表: - 副本数。默认副本数为 3。如果 BE 节点数量小于 3,则需指定副本数小于等于 BE 节点数量。 +```sql +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 + <table_property> + -- Additional table properties + [ , ... ]) + ] + AS <query> +``` - 在 0.15 版本后,该属性将自动转换成 `replication_allocation` 属性,如: +### CREATE TABLE … LIKE - `"replication_num" = "3"` 会自动转换成 `"replication_allocation" = "tag.location.default:3"` +创建一个新表,其列定义与现有表相同,但不从现有表中复制数据。列的所有属性将被复制到新的表中。如果指定了 `rollup` 列表,那么原表中对应名字的 `rollup` 也将复制到新的表中: -* `replication_allocation` +```sql +CREATE TABLE <table_name> LIKE <source_table> +[ WITH ROLLUP (<rollup_names>) ] +``` - 根据 Tag 设置副本分布情况。该属性可以完全覆盖 `replication_num` 属性的功能。 +## 必选参数 -* `min_load_replica_num` +**<name>** - 设定数据导入成功所需的最小副本数,默认值为 -1。当该属性小于等于 0 时,表示导入数据仍需多数派副本成功。 +> 指定表的标识符(即名称);在创建表的数据库(Database)中必须唯一。 +> +> 标识符必须以字母字符(如果开启 unicode 名字支持,则可以是任意语言文字的字符)开头,并且不能包含空格或特殊字符,除非整个标识符字符串用反引号括起来(例如``My Object``)。 +> +> 标识符不能使用保留关键字。 +> +> 有关更多详细信息,请参阅[标识符要求](../../../basic-element/object-identifiers.md)和[保留关键字](../../../basic-element/reserved-keywords.md)。 -* `is_being_synced` +**<col_name>** - 用于标识此表是否是被 CCR 复制而来并且正在被 syncer 同步,默认为 `false`。 +> 指定列标识符(即名称)。在创建的表中必须唯一。 +> +> 标识符必须以字母字符(如果开启 unicode 名字支持,则可以是任意语言文字的字符),数字或符号`@`开头,并且不能包含空格或特殊字符,除非整个标识符字符串用反引号括起来(例如``My Object``)。 +> +> 有关更多详细信息,请参阅[标识符要求](../../../basic-element/object-identifiers.md)和[保留关键字](../../../basic-element/reserved-keywords.md)。 - 如果设置为 `true`: - `colocate_with`,`storage_policy`属性将被擦除 - `dynamic partition`,`auto bucket`功能将会失效,即在`show create table`中显示开启状态,但不会实际生效。当`is_being_synced`被设置为 `false` 时,这些功能将会恢复生效。 +**<col_type>** - 这个属性仅供 CCR 外围模块使用,在 CCR 同步的过程中不要手动设置。 +> 指定列的数据类型。 +> +> 有关可以为表列指定的数据类型的详细信息,请参阅[数据类型](../../../basic-element/sql-data-types/data-type-overview.md)章节。 -* `storage_medium/storage_cooldown_time` +**<query>** - 数据存储介质。`storage_medium` 用于声明表数据的初始存储介质,而 `storage_cooldown_time` 用于设定到期时间。示例: - - ``` - "storage_medium" = "SSD", - "storage_cooldown_time" = "2020-11-20 00:00:00" - ``` +> 在 CTAS 中为必选参数。指定填充数据的 SELECT 语句。 - 这个示例表示数据存放在 SSD 中,并且在 2020-11-20 00:00:00 到期后,会自动迁移到 HDD 存储上。 +**<source_table>** -* `colocate_with` +> 在 CREATE TABLE ... LIKE 中为必选参数。指定被复制的原表。 - 当需要使用 Colocation Join 功能时,使用这个参数设置 Colocation Group。 +## 可选参数 - `"colocate_with" = "group1"` +### 数据模型相关参数 -* `bloom_filter_columns` +**<key_type>** - 用户指定需要添加 Bloom Filter 索引的列名称列表。各个列的 Bloom Filter 索引是独立的,并不是组合索引。 +> 表的数据模型。可选值为 DUPLICATE(明细模型)、UNIQUE(主键模型)、AGGREGATE(聚合模型)。有关数据模型的详细信息,请参阅[数据模型](../../../../table-design/data-model/overview.md)章节。 - `"bloom_filter_columns" = "k1, k2, k3"` +**<key_cols>** -* `in_memory` +> 表的 key 列。Doris 中 Key 列必须是表的前 K 个列。单个 tablet 中的数据会按照这些列保持有序。关于 Key 的限制,以及如何选择 Key 列,请参阅[数据模型](../../../../table-design/data-model/overview.md)章节中的各个小节。 - 已弃用。只支持设置为'false'。 +**<cluster_cols>** -* `compression` +> 数据局部排序列,只能在数据模型为 UNIQUE(主键模型)时使用。当指定 `<cluster_cols>` 后,数据按照`<cluster_cols>`排序,而不再使用`<key_cols>`。 - Doris 表的默认压缩方式是 LZ4。1.1 版本后,支持将压缩方式指定为 ZSTD 以获得更高的压缩比。 +**<col_aggregate_type>** - `"compression"="zstd"` +> 列的聚合方式。只有当表是聚合模型时可以使用。聚合方式的详细信息,请参阅[聚合模型](../../../../table-design/data-model/aggregate.md)章节。 -* `function_column.sequence_col` +### 分桶相关参数 - 当使用 Unique Key 模型时,可以指定一个 Sequence 列,当 Key 列相同时,将按照 Sequence 列进行 REPLACE(较大值替换较小值,否则无法替换) +**<distribute_cols> 和 <bucket_count>** - `function_column.sequence_col`用来指定 sequence 列到表中某一列的映射,该列可以为整型和时间类型(DATE、DATETIME),创建后不能更改该列的类型。如果设置了`function_column.sequence_col`, `function_column.sequence_type`将被忽略。 +> 分桶列和分桶数。明细模型的分桶列可以是任意的列,聚合模型和主键模型的分桶列必须和 key 列保持一致。分桶数是任意的正整数。有关分桶的详细信息,请参阅[手动分桶](../../../../table-design/data-partitioning/data-bucketing#手动设置分桶数)和[自动分桶](../../../../table-design/data-partitioning/data-bucketing#自动设置分桶数)章节。 - `"function_column.sequence_col" = 'column_name'` +### 列的默认值相关参数 -* `function_column.sequence_type` +**[ GENERATED ALWAYS ] AS (<col_generate_expression>)** - 当使用 Unique Key 模型时,可以指定一个 Sequence 列,当 Key 列相同时,将按照 Sequence 列进行 REPLACE(较大值替换较小值,否则无法替换) +> 生成列。使用当前列之前的列,通过表达式 <col_generate_expression> ,对当前列生成数据。生成列是一种特殊的数据库表列,其值由其他列的值计算而来,而不是直接由用户插入或更新。该功能支持预先计算表达式的结果,并存储在数据库中,适用于需要频繁查询或进行复杂计算的场景。 - 这里我们仅需指定顺序列的类型,支持时间类型或整型。Doris 会创建一个隐藏的顺序列。 +**AUTO_INCREMENT(<col_auto_increment_start_value>)** - `"function_column.sequence_type" = 'Date'` +> 在导入数据时,Doris 会为在自增列上没有指定值的数据行分配一个表内唯一的值。<col_auto_increment_start_value> 指定自增列的起始值。自增列的详细信息,请参阅[自增列](../../../../table-design/auto-increment.md)章节。 -* `enable_unique_key_merge_on_write` +**DEFAULT <col_default_value>** - Unique 表是否使用 Merge-on-Write 实现。 - 该属性在 2.1 版本之前默认关闭,从 2.1 版本开始默认开启。 +> 列的默认值。当写入时不包含此列时,使用此默认值填充。当默认值不显式设置时,使用 NULL 填充。可用的默认值包括: +> +> - NULL:全部类型均可用,用 NULL 作为默认值。 +> - 数值字面量:只能是数值类型时使用。 +> - 字符串字面量:只能是字符串类型时使用。 +> - CURRENT_DATE:只能是 date 类型时使用。用当前日期作为默认值。 +> - CURRENT_TIMESTAMP [ <defaultValuePrecision> ]:只能是 datetime 类型时使用。用当前时间作为默认值。<defaultValuePrecision> 可以指定时间精度。 +> - PI:只能是 double 类型时使用。用圆周率作为默认值。 +> - E:只能是 double 类型时使用。用数学常数作为默认值。 +> - BITMAP_EMPTY:只能当列是 bitmap 类型时使用。填充空的 bitmap。 -* `light_schema_change` +**ON UPDATE CURRENT_TIMESTAMP (<col_on_update_precision>)** - 是否使用 Light Schema Change 优化。 +> 当数据更新时,如果没有指定此列的值,则使用当前时间戳更新此列数据。只能在 UNIQUE(主键模型)的表上使用。 - 如果设置成 `true`, 对于值列的加减操作,可以更快地,同步地完成。 +### 索引相关参数 - `"light_schema_change" = 'true'` +**<index_name>** - 该功能在 2.0.0 及之后版本默认开启。 +> 指定索引标识符(即名称)。在创建的表中必须唯一。有关标识符的更多详细信息,请参阅[标识符要求](../../../basic-element/object-identifiers.md)和[保留关键字](../../../basic-element/reserved-keywords.md)。 -* `disable_auto_compaction` +**<index_cols>** - 是否对这个表禁用自动 Compaction。 +> 添加索引的列列表。必须是表中存在的列。 - 如果这个属性设置成 `true`, 后台的自动 Compaction 进程会跳过这个表的所有 Tablet。 +**<index_type>** - `"disable_auto_compaction" = "false"` +> 索引的类型。当前仅支持 INVERTED -* `enable_single_replica_compaction` +**<index_property>** - 是否对这个表开启单副本 Compaction。 +> 索引的属性。详细说明请参考[倒排索引](../../../../table-design/index/inverted-index.md)章节。 - 如果这个属性设置成 `true`, 这个表的 Tablet 的所有副本只有一个 do compaction,其他的从该副本拉取 rowset +### 自动分区相关参数 - `"enable_single_replica_compaction" = "false"` +有关分区的详细介绍,请参阅[自动分区](../../../../table-design/data-partitioning/auto-partitioning.md)章节。 -* `enable_duplicate_without_keys_by_default` +**<auto_partition_function>(<auto_partition_arguments>)** - 当配置为`true`时,如果创建表的时候没有指定 Unique、Aggregate 或 Duplicate 时,会默认创建一个没有排序列和前缀索引的 Duplicate 模型的表。 +> 自动分区方式。<auto_partition_function> 目前只支持`date_trunc`。<auto_partition_arguments> 填写自动分区的列和 date_trunc 的单位。例如 `date_trunc(col_1, 'day')`。 +> +> 当使用自动分区时,分区列必须为 NOT NULL。 - `"enable_duplicate_without_keys_by_default" = "false"` +### 手动分区相关参数 -* `skip_write_index_on_load` +有关分区的详细介绍,请参阅“手动分区”章节。 - 是否对这个表开启数据导入时不写索引。 +**<partition_type>** - 如果这个属性设置成 `true`, 数据导入的时候不写索引(目前仅对倒排索引生效),而是在 Compaction 的时候延迟写索引。这样可以避免首次写入和 Compaction - 重复写索引的 CPU 和 IO 资源消耗,提升高吞吐导入的性能。 +> Doris 支持 RANGE 分区和 LIST 分区。详情请参阅[手动分区](../../../../table-design/data-partitioning/manual-partitioning.md)章节。 - `"skip_write_index_on_load" = "false"` +**<partition_name>** -* `compaction_policy` +> 分区标识符(即名称)。在创建的表中必须唯一。有关标识符的更多详细信息,请参阅[标识符要求](../../../basic-element/object-identifiers.md)和[保留关键字](../../../basic-element/reserved-keywords.md)。 - 配置这个表的 Compaction 的合并策略,仅支持配置为 time_series 或者 size_based +**VALUES LESS THAN <partition_value_list>** - time_series: 当 rowset 的磁盘体积积攒到一定大小时进行版本合并。合并后的 rowset 直接晋升到 base compaction 阶段。在时序场景持续导入的情况下有效降低 compact 的写入放大率 +> range 分区。分区数据范围从下界到 <partition_value_list>。 +> +> 如果是表示上界,<partition_value_list> 可以用 `MAX_VALUE` 简化书写。 +> +> <partition_value_list> 的格式如下:`((col_1_value, ...), (col_1_value, ...), ...)` - 此策略将使用 time_series_compaction 为前缀的参数调整 Compaction 的执行 +**VALUES [ <partition_lower_bound>, <partition_upper_bound>)** - `"compaction_policy" = ""` +> range 分区。分区数据范围从 <partition_lower_bound> 到 <partition_upper_bound>。只创建一个分区。 +> +> <partition_lower_bound> 和 <partition_upper_bound> 格式如下:`(col_1_value, ...)` -* `group_commit_interval_ms` +**FROM <partition_lower_bound> TO <partition_upper_bound>** - 配置这个表的 Group Commit 攒批间隔。单位为 ms,默认值为 10000ms,即 10s。 + **INTERVAL <n> [ <datetime_unit> ]** - Group Commit 的下刷时机取决于 `group_commit_interval_ms`以及`group_commit_data_bytes`哪个先到设置的值。 +> range 分区。分区数据范围从 <partition_lower_bound> 到 <partition_value_list>。每建个 <n> 创建一个分区。 +> +> <partition_lower_bound> 和 <partition_upper_bound> 格式如下:`(col_1_value, ...)` - `"group_commit_interval_ms" = "10000"` +**VALUES IN {** -* `group_commit_data_bytes` + **(<partition_value> [, <partition_value> [ ... ] ])** - 配置这个表的 Group Commit 攒批数据大小。单位为 bytes,默认值为 134217728 bytes,即 128MB。 + **| <partition_value>** - Group Commit 的下刷时机取决于 `group_commit_interval_ms`以及`group_commit_data_bytes` 哪个先到设置的值。 + **}** - `"group_commit_data_bytes" = "134217728"` +> list 分区。分区列等于 <partition_value> 的属于此分区。 +> +> <partition_value> 格式如下:`(col_1_value, ...)` -* `time_series_compaction_goal_size_mbytes` +### 同步物化视图相关 - Compaction 的合并策略为 time_series 时,将使用此参数来调整每次 Compaction 输入的文件的大小,输出的文件大小和输入相当 +:::caution 注意 +rollup 可以创建的同步物化视图功能有限。已不再推荐使用。推荐使用独立的语句创建同步物化视图。详情请参阅 [CREATE MATERIALIZED VIEW](../sync-materialized-view/CREATE-MATERIALIZED-VIEW.md) 语句和[同步物化视图](../../../../query-acceleration/materialized-view/sync-materialized-view.md)章节。 +::: - `"time_series_compaction_goal_size_mbytes" = "1024"` +**<rollup_name>** + +> 同步物化视图的标示符(即名称)。在创建的表中必须唯一。有关标识符的更多详细信息,请参阅[标识符要求](../../../basic-element/object-identifiers.md)和[保留关键字](../../../basic-element/reserved-keywords.md)。 + +**<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`。如果设置为 `true`,`colocate_with`和`storage_policy`属性将被擦除。`dynamic partition`和`auto 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"` | +| compression | Doris 表的默认压缩方式是 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_write | Unique 表是否使用 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_mbytes | Compaction 的合并策略为 time_series 时,将使用此参数来调整每次 Compaction 输入的文件的大小,输出的文件大小和输入相当 | +| time_series_compaction_file_count_threshold | Compaction 的合并策略为 time_series 时,将使用此参数来调整每次 Compaction 输入的文件数量的最小值。一个 Tablet 中,文件数超过该配置,就会触发 Compaction | +| time_series_compaction_time_threshold_seconds | Compaction 的合并策略为 time_series 时,将使用此参数来调整 Compaction 的最长时间间隔,即长时间未执行过 Compaction 时,就会触发一次 Compaction,单位为秒 | +| time_series_compaction_level_threshold | Compaction 的合并策略为 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 表上开启。 | +| 动态分区相关属性 | 动态分区相关参考[数据划分 - 动态分区](../../../../table-design/data-partitioning/dynamic-partitioning) | + +## 权限控制 + +执行此 SQL 命令的[用户](../../../../admin-manual/auth/authentication-and-authorization.md)必须至少具有以下[权限](../../../../admin-manual/auth/authentication-and-authorization.md): + +| 权限 | 对象 | 说明 | +| :---------------- | :------------------------ | :----------------------------------------------------------- | +| CREATE_PRIV | 数据库(Database) | | +| SELECT_PRIV | 表(Table), 视图(View) | 当执行 CTAS 时,需要拥有被查询的表,视图或物化视图的 SELECT_PRIV 权限 | + +## 注意事项 + +- 数据库(Database)中不能包含具有相同名称的表(Table),视图(View)。 +- 表名,列名,rollup 名,不能使用[保留关键字(Reserved Keywords)](../../../basic-element/reserved-keywords.md) +- CREATE TABLE … LIKE: + - 只能对 Doris 内表使用此命令 + - 显示指定的 rollup 才会被复制 + - 所有的同步物化视图都不会被复制 +- CREATE TABLE … AS SELECT (CTAS): + - 如果 SELECT 列表中列名的别名是有效的列,则在 CTAS 语句中不需要列定义;如果省略,列名和数据类型将从基础查询中推断出来: + + ```sql + CREATE TABLE <table_name> AS SELECT ... + ``` + - 或者,可以使用以下语法明确指定名称: + + ```sql + CREATE TABLE <table_name> ( <col1_name> , <col2_name> , ... ) AS SELECT ... + ``` + +- 分区和分桶 + - 一个表必须指定分桶列,但可以不指定分区。关于分区和分桶的具体介绍,可参阅 [数据划分](../../../../table-design/data-partition) 文档。 + - Doris 中的表可以分为分区表和无分区的表。这个属性在建表时确定,之后不可更改。即对于分区表,可以在之后的使用过程中对分区进行增删操作,而对于无分区的表,之后不能再进行增加分区等操作。 + - 分区列和分桶列在表创建之后不可更改,既不能更改分区和分桶列的类型,也不能对这些列进行任何增删操作。 +- 动态分区 + - 动态分区功能主要用于帮助用户自动的管理分区。通过设定一定的规则,Doris 系统定期增加新的分区或删除历史分区。可参阅 [动态分区](../../../..//table-design/data-partitioning/dynamic-partitioning.md) 文档查看更多帮助。 +- 自动分区 + - 自动分区功能文档参见 [自动分区](../../../../table-design/data-partitioning/auto-partitioning.md)。 +- 同步物化视图 + - 用户可以在建表的同时创建多个同步物化视图(ROLLUP)。同步物化视图也可以在建表之后添加。写在建表语句中可以方便用户一次性创建所有同步物化视图。 + - 如果在建表时创建好同步物化视图,则后续的所有数据导入操作都会同步生成同步物化视图的数据。同步物化视图的数量可能会影响数据导入的效率。 + - 关于物化视图的介绍,请参阅文档 [同步物化视图](../../../../query-acceleration/materialized-view/sync-materialized-view.md)。 +- 索引 + - 用户可以在建表的同时创建多个列的索引。索引也可以在建表之后再添加。 + - 如果在之后的使用过程中添加索引,如果表中已有数据,则需要重写所有数据,因此索引的创建时间取决于当前数据量。 -* `time_series_compaction_file_count_threshold` +## 示例 - Compaction 的合并策略为 time_series 时,将使用此参数来调整每次 Compaction 输入的文件数量的最小值 +### 基础示例 - 一个 Tablet 中,文件数超过该配置,就会触发 Compaction +**明细模型** - `"time_series_Compaction_file_count_threshold" = "2000"` +```sql +CREATE TABLE t1 +( + c1 INT, + c2 STRING +) +DUPLICATE KEY(c1) +DISTRIBUTED BY HASH(c1) +PROPERTIES ( + 'replication_num' = '1' +) +``` -* `time_series_Compaction_time_threshold_seconds` +**聚合模型** - Compaction 的合并策略为 time_series 时,将使用此参数来调整 Compaction 的最长时间间隔,即长时间未执行过 Compaction 时,就会触发一次 Compaction,单位为秒 +```sql +CREATE TABLE t2 +( + c1 INT, + c2 INT MAX +) +AGGREGATE KEY(c1) +DISTRIBUTED BY HASH(c1) +PROPERTIES ( + 'replication_num' = '1' +) +``` - `"time_series_compaction_time_threshold_seconds" = "3600"` +**主键模型** -* `time_series_compaction_level_threshold` +```sql +CREATE TABLE t3 +( + c1 INT, + c2 INT +) +UNIQUE KEY(c1) +DISTRIBUTED BY HASH(c1) +PROPERTIES ( + 'replication_num' = '1' +) +``` - Compaction 的合并策略为 time_series 时,此参数默认为 1,当设置为 2 时用来控住对于合并过一次的段再合并一层,保证段大小达到 time_series_compaction_goal_size_mbytes, - - 能达到段数量减少的效果。 +**使用生成列** Review Comment: done -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org