width_bucket:等宽分桶
速查结论
width_bucket(value, min_value, max_value, num_bucket) 是 Spark SQL 中用于将数值分配到等宽直方图的桶中的函数。
语法
width_bucket(value, min_value, max_value, num_bucket)
width_bucket(value, min_value, max_value, num_bucket) - 返回在范围从 min_value 到 max_value 的等宽直方图中,value 将被分配到的桶编号,该直方图有 num_bucket 个桶。
参数说明
| 参数 | 说明 |
|---|---|
| value | 要分配的值,可以是数值或 INTERVAL 类型 |
| min_value | 范围下界 |
| max_value | 范围上界 |
| num_bucket | 桶的数量 |
示例
> SELECT width_bucket(5.3, 0.2, 10.6, 5);
3
> SELECT width_bucket(-2.1, 1.3, 3.4, 3);
0
> SELECT width_bucket(8.1, 0.0, 5.7, 4);
5
> SELECT width_bucket(-0.9, 5.2, 0.5, 2);
3
> SELECT width_bucket(INTERVAL '0' YEAR, INTERVAL '0' YEAR, INTERVAL '10' YEAR, 10);
1
> SELECT width_bucket(INTERVAL '1' YEAR, INTERVAL '0' YEAR, INTERVAL '10' YEAR, 10);
2
> SELECT width_bucket(INTERVAL '0' DAY, INTERVAL '0' DAY, INTERVAL '10' DAY, 10);
1
> SELECT width_bucket(INTERVAL '1' DAY, INTERVAL '0' DAY, INTERVAL '10' DAY, 10);
2
常见报错与避坑指南
- 越界返回值:当
value小于min_value时返回 0,大于等于max_value时返回num_bucket + 1,这些值表示超出范围。 min_value大于max_value:当min_value > max_value时,桶编号会翻转,小于max_value的值会落入高编号桶。- 支持 INTERVAL 类型:
value、min_value、max_value均可使用 INTERVAL 类型进行分桶。
Since: 3.1.0
📱关注公众号
「数据仓库技术」文章同步更新,不错过每一篇干货

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