[Doc]Update doc for dynamic partition (#3093)
Add explain of dynamic dropping partition.
This commit is contained in:
@ -23,7 +23,7 @@ under the License.
|
||||
|
||||
最初的设计、实现和效果可以参阅 [ISSUE 2262](https://github.com/apache/incubator-doris/issues/2262)。
|
||||
|
||||
目前实现了动态添加分区的功能,下一个版本会支持动态删除分区的功能。
|
||||
目前实现了动态添加分区及动态删除分区的功能。
|
||||
|
||||
## 名词解释
|
||||
|
||||
@ -34,16 +34,32 @@ under the License.
|
||||
|
||||
在某些使用场景下,用户会将表按照天进行分区划分,每天定时执行例行任务,这时需要使用方手动管理分区,否则可能由于使用方没有创建分区导致数据导入失败,这给使用方带来了额外的维护成本。
|
||||
|
||||
在实现方式上, FE会启动一个后台线程,根据fe.conf中`dynamic_partition_enable` 及 `dynamic_partition_check_interval_seconds`参数决定该线程是否启动以及该线程的调度频率.
|
||||
在实现方式上, FE会启动一个后台线程,根据fe.conf中`dynamic_partition_enable` 及 `dynamic_partition_check_interval_seconds`参数决定该线程是否启动以及该线程的调度频率。每次调度时,会在注册表中读取动态分区表的属性,并根据动态分区属性动态添加及删除分区。
|
||||
|
||||
建表时,在properties中指定dynamic_partition属性,FE首先对动态分区属性进行解析,校验输入参数的合法性,然后将对应的属性持久化到FE的元数据中,并将该表注册到动态分区列表中,后台线程会根据配置参数定期对动态分区列表进行扫描,读取表的动态分区属性,执行添加分区的任务,每次的调度信息会保留在FE的内存中,可以通过`SHOW DYNAMIC PARTITION TABLES`查看调度任务是否成功,如果存在分区创建失败,会将失败信息输出。
|
||||
建表时,在properties中指定dynamic_partition属性,FE首先对动态分区属性进行解析,校验输入参数的合法性,然后将对应的属性持久化到FE的元数据中,并将该表注册到动态分区列表中,后台线程会根据配置参数定期对动态分区列表进行扫描,读取表的动态分区属性,执行添加分区及删除分区的任务,每次的调度信息会保留在FE的内存中(重启后则丢失),可以通过`SHOW DYNAMIC PARTITION TABLES`查看调度任务是否成功,如果存在分区创建或删除失败,会将失败信息输出。
|
||||
|
||||
## 使用方式
|
||||
|
||||
### 动态分区属性参数说明:
|
||||
|
||||
`dynamic_partition.enable`: 是否开启动态分区特性,可指定为 `TRUE` 或 `FALSE`。
|
||||
|
||||
|
||||
`dynamic_partition.time_unit`: 动态分区调度的单位,可指定为 `DAY` `WEEK` `MONTH`,当指定为 `DAY` 时,动态创建的分区名后缀格式为`yyyyMMdd`,例如`20200325`。当指定为 `WEEK` 时,动态创建的分区名后缀格式为`yyyy_ww`即当前日期属于这一年的第几周,例如 `2020-03-25` 创建的分区名后缀为 `2020_13`, 表明目前为2020年第13周。当指定为 `MONTH` 时,动态创建的分区名后缀格式为 `yyyyMM`,例如 `202003`。
|
||||
|
||||
`dynamic_partition.start`: 动态分区的开始时间, 以当天为基准,超过该时间范围的分区将会被删除。如果不填写,则默认为`Integer.MIN_VALUE` 即 `-2147483648`。
|
||||
|
||||
|
||||
`dynamic_partition.end`: 动态分区的结束时间, 以当天为基准,会提前创建N个单位的分区范围。
|
||||
|
||||
`dynamic_partition.prefix`: 动态创建的分区名前缀。
|
||||
|
||||
`dynamic_partition.buckets`: 动态创建的分区所对应的分桶数量。
|
||||
|
||||
### 建表
|
||||
|
||||
建表时,可以在 `PROPERTIES` 中指定以下`dynamic_partition`属性,表示这个表是一个动态分区表。
|
||||
|
||||
|
||||
示例:
|
||||
|
||||
```
|
||||
@ -59,30 +75,35 @@ ENGINE=olap
|
||||
DUPLICATE KEY(k1, k2, k3)
|
||||
PARTITION BY RANGE (k1)
|
||||
(
|
||||
PARTITION p1 VALUES LESS THAN ("2014-01-01"),
|
||||
PARTITION p2 VALUES LESS THAN ("2014-06-01"),
|
||||
PARTITION p3 VALUES LESS THAN ("2014-12-01")
|
||||
PARTITION p20200321 VALUES LESS THAN ("2020-03-22"),
|
||||
PARTITION p20200322 VALUES LESS THAN ("2020-03-23"),
|
||||
PARTITION p20200323 VALUES LESS THAN ("2020-03-24"),
|
||||
PARTITION p20200324 VALUES LESS THAN ("2020-03-25")
|
||||
)
|
||||
DISTRIBUTED BY HASH(k2) BUCKETS 32
|
||||
PROPERTIES(
|
||||
"storage_medium" = "SSD",
|
||||
"dynamic_partition.enable" = "true"
|
||||
"dynamic_partition.enable" = "true",
|
||||
"dynamic_partition.time_unit" = "DAY",
|
||||
"dynamic_partition.start" = "-3",
|
||||
"dynamic_partition.end" = "3",
|
||||
"dynamic_partition.prefix" = "p",
|
||||
"dynamic_partition.buckets" = "32"
|
||||
);
|
||||
```
|
||||
创建一张动态分区表,指定开启动态分区特性,以当天为2020-01-08为例,在每次调度时,会提前创建今天以及以后3天的4个分区(若分区已存在则会忽略),分区名根据指定前缀分别为`p20200108` `p20200109` `p20200110` `p20200111`,每个分区的分桶数量为32,每个分区的范围如下:
|
||||
创建一张动态分区表,指定开启动态分区特性,以当天为2020-03-25为例,在每次调度时,会删除分区上界小于 `2020-03-22` 的分区,为了避免删除非动态创建的分区,动态删除分区只会删除分区名符合动态创建分区规则的分区,例如分区名为a1, 则即使分区范围在待删除的分区范围内,也不会被删除。同时在调度时会提前创建今天以及以后3天(总共4天)的分区(若分区已存在则会忽略),分区名根据指定前缀分别为`p20200325` `p20200326` `p20200327` `p20200328`,每个分区的分桶数量为32。同时会删除 `p20200321` 的分区,最终的分区范围如下:
|
||||
```
|
||||
[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]; )
|
||||
[types: [DATE]; keys: [2020-03-22]; ‥types: [DATE]; keys: [2020-03-23]; )
|
||||
[types: [DATE]; keys: [2020-03-23]; ‥types: [DATE]; keys: [2020-03-24]; )
|
||||
[types: [DATE]; keys: [2020-03-24]; ‥types: [DATE]; keys: [2020-03-25]; )
|
||||
[types: [DATE]; keys: [2020-03-25]; ‥types: [DATE]; keys: [2020-03-26]; )
|
||||
[types: [DATE]; keys: [2020-03-26]; ‥types: [DATE]; keys: [2020-03-27]; )
|
||||
[types: [DATE]; keys: [2020-03-27]; ‥types: [DATE]; keys: [2020-03-28]; )
|
||||
[types: [DATE]; keys: [2020-03-28]; ‥types: [DATE]; keys: [2020-03-29]; )
|
||||
```
|
||||
|
||||
### 开启动态分区功能
|
||||
1. 首先需要在fe.conf中设置`dynamic_partition_enable=true`,可以在集群启动时通过修改配置文件指定,也可以在运行时通过http接口动态修改,修改方法查看高级操作部分
|
||||
1. 首先需要在fe.conf中设置`dynamic_partition_enable=true`,可以在集群启动时通过修改配置文件指定,或者通过MySQL连接后使用命令行 `ADMIN SET FRONTEND CONFIG ("dynamic_partition_enable" = "true")`修改,也可以在运行时通过http接口动态修改,修改方法查看高级操作部分
|
||||
|
||||
2. 如果需要对0.12版本之前的表添加动态分区属性,则需要通过以下命令修改表的属性
|
||||
```
|
||||
@ -95,14 +116,14 @@ ALTER TABLE dynamic_partition set ("dynamic_partition.enable" = "true", "dynamic
|
||||
|
||||
如果需要对指定表停止动态分区功能,则可以通过以下命令修改表的属性
|
||||
```
|
||||
ALTER TABLE dynamic_partition set ("dynamic_partition.enable" = "false")
|
||||
ALTER TABLE dynamic_partition SET ("dynamic_partition.enable" = "false")
|
||||
```
|
||||
|
||||
### 修改动态分区属性
|
||||
|
||||
通过如下命令可以修改动态分区的属性
|
||||
```
|
||||
ALTER TABLE dynamic_partition set("key" = "value")
|
||||
ALTER TABLE dynamic_partition SET ("key" = "value")
|
||||
```
|
||||
|
||||
### 查看动态分区表调度情况
|
||||
@ -112,11 +133,11 @@ ALTER TABLE dynamic_partition set("key" = "value")
|
||||
```
|
||||
SHOW DYNAMIC PARTITION TABLES;
|
||||
|
||||
+-------------------+--------+----------+------+--------+---------+---------------------+---------------------+--------+------+
|
||||
| TableName | Enable | TimeUnit | End | Prefix | Buckets | LastUpdateTime | LastSchedulerTime | State | Msg |
|
||||
+-------------------+--------+----------+------+--------+---------+---------------------+---------------------+--------+------+
|
||||
| dynamic_partition | true | DAY | 3 | p | 32 | 2020-01-08 20:19:09 | 2020-01-08 20:19:34 | NORMAL | N/A |
|
||||
+-------------------+--------+----------+------+--------+---------+---------------------+---------------------+--------+------+
|
||||
+-------------------+--------+----------+-------+------+--------+---------+---------------------+---------------------+--------+------------------------+----------------------+
|
||||
| TableName | Enable | TimeUnit | Start | End | Prefix | Buckets | LastUpdateTime | LastSchedulerTime | State | LastCreatePartitionMsg | LastDropPartitionMsg |
|
||||
+-------------------+--------+----------+-------+------+--------+---------+---------------------+---------------------+--------+------------------------+----------------------+
|
||||
| dynamic_partition | true | DAY | -3 | 3 | p | 32 | 2020-03-12 17:25:47 | 2020-03-12 17:25:52 | NORMAL | N/A | N/A |
|
||||
+-------------------+--------+----------+-------+------+--------+---------+---------------------+---------------------+--------+------------------------+----------------------+
|
||||
1 row in set (0.00 sec)
|
||||
|
||||
```
|
||||
@ -124,7 +145,8 @@ SHOW DYNAMIC PARTITION TABLES;
|
||||
* LastUpdateTime: 最后一次修改动态分区属性的时间
|
||||
* LastSchedulerTime: 最后一次执行动态分区调度的时间
|
||||
* State: 最后一次执行动态分区调度的状态
|
||||
* Msg: 最后一次执行动态分区调度的错误信息
|
||||
* LastCreatePartitionMsg: 最后一次执行动态添加分区调度的错误信息
|
||||
* LastDropPartitionMsg: 最后一次执行动态删除分区调度的错误信息
|
||||
|
||||
## 高级操作
|
||||
|
||||
|
||||
Reference in New Issue
Block a user