OPTIMIZE
功能描述
对目标表的指定数据进行重写。

目前仅Iceberg表支持该语法。
注意事项
- 如果用户指定了排序键,数据重写后,文件内数据有序,而无法保证全局有序。
- 建议选择重写条件时,按照分区维度便捷重写条件。
语法格式
OPTIMIZE table_name REWRITE DATA
[ WITH OPTIONS (option_key = option_value [, ...]) ]
[ WHERE condition ]
[ ORDER BY target_list [ ASC | DESC ] ] 参数说明
- table_name:目标表的名字。取值范围:已存在的表名。
- condition:一个返回boolean值的表达式,用于判断哪些文件需要被重写。
- target_list:数据重写的排序键。
- option_key, option_value:数据重写的配置选项。
参数 | 取值 | 说明 | 默认值 |
|---|---|---|---|
target-file-size-bytes | 0~Max(uint64) | 重写后的文件大小。 | 与表参数write.target-file-size-bytes保持一致 |
min-file-size-bytes | 0~Max(uint64) | 原始文件大小小于该阈值的文件会被当做目标文件。 | 75% * target-file-size-bytes |
max-file-size-bytes | 0~Max(uint64) | 原始文件大小大于该阈值的文件会被当做目标文件。 | 180% * target-file-size-bytes |
min-input-files | 0~Max(uint32) | 当单个分区内目标文件个数大于该值时,将会对该分区进行数据重写。 | 5 |
delete-file-threshold | 0~Max(uint32) | 当单个分区内delete文件个数大于该值时,将会对该分区进行数据重写。 | INT_MAX |
rewrite-all | true, false | 忽视以上所有条件,对所有满足用户条件的文件进行重写。 | false |
max-file-group-size-bytes | 0~Max(uint64) | 分区内目标文件总大小大于该阈值时,将该分区的目标文件拆分为多个task进行处理。 | 100GB |
示例
CREATE TABLE reason_t2
(
TABLE_SK INTEGER ,
TABLE_ID VARCHAR(20) ,
TABLE_NA VARCHAR(20)
) PARTITION BY (TABLE_SC VARCHAR(20)) STORE AS iceberg;
INSERT INTO reason_t2 VALUES (1, 'S01', 'StudentA', 'Xiangbei'),(2, 'T01', 'TeacherA', 'Lingnan'),(3, 'T02', 'TeacherB', 'Hainan');
INSERT INTO reason_t2 VALUES (4, 'S02', 'StudentX', 'Xiangbei'),(5, 'T03', 'TeacherX', 'Lingnan'),(6, 'T04', 'TeacherY', 'Hainan'); OPTIMIZE reason_t2 REWRITE DATA WITH OPTIONS ('rewrite-all' = 'true') WHERE TABLE_SC = 'Hainan'; 使用ORDER BY语句查看TABLE_SC ='Lingnan'分区数据重写计划:
EXPLAIN VERBOSE OPTIMIZE reason_t2 REWRITE DATA WITH OPTIONS ('rewrite-all' = 'true') WHERE TABLE_SC = 'Lingnan' ORDER BY 1;
QUERY EXEC INFO
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
id | operation | E-rows | E-distinct | E-width | E-costs
----+-------------------------------------------------------------------------+--------+------------+---------+---------
1 | -> Row Adapter | 1000 | | 178 | 73.68
2 | -> Vector Insert on reason_t2 | 1000 | | 178 | 73.68
3 | -> Vector Sort | 1000 | | 178 | 53.68
4 | -> Partitioned Vector Foreign Scan on reason_t2 | 1000 | | 178 | 1.35
Predicate Information (identified by plan id)
---------------------------------------------------------------------------------------------------------------------------------------------------------------
4 --Partitioned Vector Foreign Scan on reason_t2
Server Type: lf
Pruning results: (Manifests total: 3, Manifests left: 2, Files total: 4, Files dynamic prune 0, Files dynamic RF prune: 0, Files left after pruning: 2)
DN read from: direct
replication: 2 files 0.00 MB 设置min-file-size-bytes以重写全部目标文件:
EXPLAIN VERBOSE OPTIMIZE reason_t2 REWRITE DATA WITH OPTIONS ('min-file-size-bytes' = '0') ORDER BY 1; 
