ntile:分桶编号
速查结论
ntile(n) 是 Spark SQL 中用于将每个窗口分区的行均匀分配到 n 个桶中并返回桶编号的窗口函数。
语法
ntile(n) OVER (PARTITION BY expr ORDER BY expr [ASC|DESC])
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| n | INTEGER | 要将行划分到的桶数量。必须是正整数。 |
示例
> SELECT a, b, ntile(2) OVER (PARTITION BY a ORDER BY b) FROM VALUES ('A1', 2), ('A1', 1), ('A2', 3), ('A1', 1) tab(a, b);
A1 1 1
A1 1 1
A1 2 2
A2 3 1
常见报错与避坑指南
- 行数不能被 n 整除:当分区中的行数不能被 n 整除时,前面的桶会多分配一行。例如,7 行分 3 个桶,分配结果为 [3, 2, 2]。
- n 值必须大于 0:如果 n 小于等于 0,查询将报错。请确保传入的桶数量为有效正整数。
Since: 2.0.0
📱关注公众号
「数据仓库技术」文章同步更新,不错过每一篇干货

💬加群交流
备注「数据仓库技术」加入社群,每日一道大厂SQL真题
