我是
靠谱客的博主
可耐面包,最近开发中收集的这篇文章主要介绍
hive中控制窗口范围rows between的使用,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
1.rows between的作用
在使用hsql完成一些业务需求的时候,我们经常会用到窗口函数,某些场景
下会涉及到需要控制窗口函数的范围来满足业务需求,这个时候就需要用到rows
between了,使用rows between可以根据自己的需求任意的控制窗口函数的范围。
2.rows between的使用
首先我们有一张如下的数据表
sid | day_time | sale_volume |
---|
101 | 2020-01-03 | 10 |
102 | 2020-01-04 | 20 |
103 | 2020-01-05 | 30 |
104 | 2020-01-06 | 40 |
104 | 2020-01-07 | 50 |
105 | 2020-02-05 | 33 |
106 | 2020-02-07 | 43 |
107 | 2020-02-08 | 53 |
108 | 2020-02-09 | 63 |
109 | 2020-02-10 | 73 |
110 | 2020-03-07 | 21 |
111 | 2020-03-08 | 31 |
112 | 2020-03-09 | 41 |
113 | 2020-03-10 | 51 |
114 | 2020-03-11 | 61 |
115 | 2020-03-12 | 71 |
116 | 2020-03-13 | 81 |
1. 求当前日期销售额和后面所有日期的销售额总和。
这里就需要使用使用row between来控制范围,范围就是最后一行到当前行
sql如下:
SELECT
sid,
day_time,
sales_volume,
sum(sales_volume) over(rows between current row and unbounded following) sum_sales
FROM
t_sale_info;
rows between current row and unbounded following
查询结果如下:
sid | day_time | sale_volume | sum_sales |
---|
116 | 2020-03-13 | 81 | 772.0 |
115 | 2020-03-12 | 71 | 691.0 |
114 | 2020-03-11 | 61 | 620.0 |
113 | 2020-03-10 | 51 | 559.0 |
112 | 2020-03-09 | 41 | 508.0 |
111 | 2020-03-08 | 31 | 467.0 |
110 | 2020-03-07 | 21 | 436.0 |
109 | 2020-02-10 | 73 | 415.0 |
108 | 2020-02-09 | 63 | 342.0 |
107 | 2020-02-08 | 53 | 279.0 |
106 | 2020-02-07 | 43 | 226.0 |
105 | 2020-02-05 | 33 | 183.0 |
104 | 2020-01-07 | 50 | 150.0 |
104 | 2020-01-06 | 40 | 100.0 |
103 | 2020-01-05 | 30 | 60.0 |
102 | 2020-01-04 | 20 | 30.0 |
101 | 2020-01-03 | 10 | 10.0 |
通过查询结果可以看出来,sum_salses这一列中的每一行都是后面所有行到
当前行的总和。
2.求当前日期销售额和前面所有日期的销售额总和。
这里就需要使用使用row between来控制范围,范围就是最后一行到当前行
sql如下:
SELECT
sid,
day_time,
sales_volume,
sum(sales_volume) over(rows between unbounded preceding and current row) sum_sales
FROM
t_sale_info;
rows between unbounded preceding and current row
查询结果数据如下:
sid | day_time | sale_volume | sum_sales |
---|
116 | 2020-03-13 | 81 | 81.0 |
115 | 2020-03-12 | 71 | 152.0 |
114 | 2020-03-11 | 61 | 213.0 |
113 | 2020-03-10 | 51 | 264.0 |
112 | 2020-03-09 | 41 | 305.0 |
111 | 2020-03-08 | 31 | 336.0 |
110 | 2020-03-07 | 21 | 357.0 |
109 | 2020-02-10 | 73 | 430.0 |
108 | 2020-02-09 | 63 | 493.0 |
107 | 2020-02-08 | 53 | 546.0 |
106 | 2020-02-07 | 43 | 589.0 |
105 | 2020-02-05 | 33 | 622.0 |
104 | 2020-01-07 | 50 | 672.0 |
104 | 2020-01-06 | 40 | 712.0 |
103 | 2020-01-05 | 30 | 742.0 |
102 | 2020-01-04 | 20 | 762.0 |
101 | 2020-01-03 | 10 | 772.0 |
通过查询结果可以看出来,sum_salses这一列中的每一行都是前面所有行到
当前行的总和。
3. 求当前日期和后面两天销售额的总和。
sql如下:
SELECT
sid,
day_time,
sales_volume,
sum(sales_volume) over(rows between current row and 2 following) sum_sales
FROM
t_sale_info;
查询结果如下:
sid | day_time | sale_volume | sum_sales |
---|
116 | 2020-03-13 | 81 | 213.0 |
115 | 2020-03-12 | 71 | 183.0 |
114 | 2020-03-11 | 61 | 153.0 |
113 | 2020-03-10 | 51 | 123.0 |
112 | 2020-03-09 | 41 | 93.0 |
111 | 2020-03-08 | 31 | 125.0 |
110 | 2020-03-07 | 21 | 157.0 |
109 | 2020-02-10 | 73 | 189.0 |
108 | 2020-02-09 | 63 | 159.0 |
107 | 2020-02-08 | 53 | 129.0 |
106 | 2020-02-07 | 43 | 126.0 |
105 | 2020-02-05 | 33 | 123.0 |
104 | 2020-01-07 | 50 | 120.0 |
104 | 2020-01-06 | 40 | 90.0 |
103 | 2020-01-05 | 30 | 60.0 |
102 | 2020-01-04 | 20 | 30.0 |
101 | 2020-01-03 | 10 | 10.0 |
通过查询结果可以看出来,sum_salses这一列中的每一行都是后面两行到
当前行的总和。
4. 求当前日期和前一天销售额的总和。
sql如下:
SELECT
sid,
day_time,
sales_volume,
sum(sales_volume) over(rows between 1 preceding and current row) sum_sales
FROM
t_sale_info;
查询结果如下:
sid | day_time | sale_volume | sum_sales |
---|
116 | 2020-03-13 | 81 | 81.0 |
115 | 2020-03-12 | 71 | 152.0 |
114 | 2020-03-11 | 61 | 132.0 |
113 | 2020-03-10 | 51 | 112.0 |
112 | 2020-03-09 | 41 | 92.0 |
111 | 2020-03-08 | 31 | 72.0 |
110 | 2020-03-07 | 21 | 52.0 |
109 | 2020-02-10 | 73 | 94.0 |
108 | 2020-02-09 | 63 | 136.0 |
107 | 2020-02-08 | 53 | 116.0 |
106 | 2020-02-07 | 43 | 96.0 |
105 | 2020-02-05 | 33 | 76.0 |
104 | 2020-01-07 | 50 | 83.0 |
104 | 2020-01-06 | 40 | 90.0 |
103 | 2020-01-05 | 30 | 70.0 |
102 | 2020-01-04 | 20 | 50.0 |
101 | 2020-01-03 | 10 | 30.0 |
通过查询结果可以看出来,sum_salses这一列中的每一行都是前面一行到
当前行的总和。
通过以上几个例子可以看到,使用rows between可以很灵活的控制窗口函数
的作用范围,这个在日常业务中如果能灵活使用可以很好的加快我们的工作效率
希望对大家有所帮助。
最后
以上就是可耐面包为你收集整理的hive中控制窗口范围rows between的使用的全部内容,希望文章能够帮你解决hive中控制窗口范围rows between的使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复