7. 排序、限制与抽样
7.1 排序与数据分发
| 对比项 | ORDER BY |
SORT BY |
DISTRIBUTE BY |
CLUSTER BY |
|---|---|---|---|---|
| 核心作用 | 全局排序 | 每个 Reducer 内部局部排序 | 控制数据分发,类似分区 | 同一列上的 DISTRIBUTE BY +
SORT BY,默认升序 |
| Reducer 数量 | 强制 1 个 | 多个 | 多个 | 多个 |
| 输出有序性 | 单个文件,全局有序 | 多个文件,文件内有序,文件间无序 | 只保证相同键进入同一 Reducer,不保证顺序 | 多个文件,每个文件内部按分发列升序 |
| 是否全局有序 | 是 | 否 | 否 | 否 |
| 典型场景 | 最终报表、Top N、必须全局有序的小结果集 | 相同 a 进入同一 Reducer 后,再按 b
排序 |
相同 a 进入同一 Reducer |
相同 a 进入同一 Reducer,内部按 a
升序 |
7.2 限制行数
SELECT *
FROM employees
LIMIT 10;
LIMIT n 返回前 n 行。
7.3 类型转换
SELECT CAST(value AS INT)
FROM source_table;
使用 CAST(value AS type)
进行类型转换。无法转换的值通常得到 NULL。
7.4 抽样查询
SELECT *
FROM source_table
TABLESAMPLE(BUCKET 1 OUT OF 4 ON user_id);
课件给出的抽样语法为
TABLESAMPLE(BUCKET x OUT OF y ON 列名)。