WRITE ORDERED BY

最近更新时间:2026-05-20 14:11:22

我的收藏

描述

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 tci
TBLPROPERTIES ('primary-key' = 'id');

数据写入排序规则定义(基本用法)

ALTER TABLE tci_write_ordered
WRITE ORDERED BY category ASC, id DESC;

数据写入排序规则定义(指定 NULL 值排序行为)

ALTER TABLE tci_write_ordered
WRITE ORDERED BY category ASC NULLS LAST, id DESC NULLS FIRST;

局部排序规则定义

ALTER TABLE tci_write_ordered
WRITE LOCALLY ORDERED BY category, name;

验证排序规则

INSERT INTO tci_write_ordered
VALUES (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_ordered
WRITE UNORDERED;