一、描述
注意:表的写入排序仅影响数据如何被写入存储,不保证查询结果的排序。如需查询有序结果,需在 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;