描述
ALTER TABLE ... WRITE ORDERED BY 语句用于为表设置写入时的排序顺序。当数据写入该表时(例如通过 MERGE INTO),引擎会按照指定的排序顺序组织数据,从而提升查询性能。注意:
表的写入排序仅影响数据如何被写入存储,不保证查询结果的排序。如需查询有序结果,需在 SELECT 中使用
ORDER BY。语法
-- 设置全局排序(跨任务排序)ALTER TABLE table_name WRITE ORDERED BY col1 [ ASC | DESC ] [ NULLS FIRST | NULLS LAST ][, col2 [ ASC | DESC ] ... ];-- 设置局部排序(任务内排序)ALTER TABLE table_name WRITE LOCALLY ORDERED BY col1, col2;-- 取消排序ALTER TABLE table_name WRITE UNORDERED;
参数说明
关键字 | 说明 |
ASC | 升序排列(默认) |
DESC | 降序排列 |
NULLS FIRST | 空值排在最前(默认) |
NULLS LAST | 空值排在最后 |
LOCALLY ORDERED BY | 仅在单个任务内部排序,不跨任务重分布 |
UNORDERED | 取消所有写入排序 |
注意事项
写入排序是一种优化手段,用于提升点查询和范围扫描性能。
排序会带来额外的写入开销,需根据实际查询模式权衡。
示例
创建基础表
DROP TABLE IF EXISTS tci_write_ordered;CREATE TABLE tci_write_ordered (id BIGINT NOT NULL,category STRING,name STRING,amount DOUBLE) USING tciTBLPROPERTIES ('primary-key' = 'id');
数据写入排序规则定义(基本用法)
ALTER TABLE tci_write_orderedWRITE ORDERED BY category ASC, id DESC;
数据写入排序规则定义(指定 NULL 值排序行为)
ALTER TABLE tci_write_orderedWRITE ORDERED BY category ASC NULLS LAST, id DESC NULLS FIRST;
局部排序规则定义
ALTER TABLE tci_write_orderedWRITE LOCALLY ORDERED BY category, name;
验证排序规则
INSERT INTO tci_write_orderedVALUES (3, 'B', 'Charlie', 100.0),(1, 'A', 'Alice', 200.0),(2, 'A', 'Bob', 150.0),(4, NULL, NULL, 0.0);SELECT * FROM tci_write_ordered;DESCRIBE EXTENDED tci_write_ordered;
取消排序规则
ALTER TABLE tci_write_orderedWRITE UNORDERED;