跳到主要内容

ntile:分桶编号

速查结论

ntile(n) 是 Spark SQL 中用于将每个窗口分区的行均匀分配到 n 个桶中并返回桶编号的窗口函数。

语法

ntile(n) OVER (PARTITION BY expr ORDER BY expr [ASC|DESC])

参数说明

参数类型说明
nINTEGER要将行划分到的桶数量。必须是正整数。

示例

> 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真题

交流微信二维码

你可能还想看