我是靠谱客的博主 可耐面包,最近开发中收集的这篇文章主要介绍hive中控制窗口范围rows between的使用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.rows between的作用

  在使用hsql完成一些业务需求的时候,我们经常会用到窗口函数,某些场景
下会涉及到需要控制窗口函数的范围来满足业务需求,这个时候就需要用到rows
between了,使用rows between可以根据自己的需求任意的控制窗口函数的范围。

2.rows between的使用

首先我们有一张如下的数据表
sidday_timesale_volume
1012020-01-0310
1022020-01-0420
1032020-01-0530
1042020-01-0640
1042020-01-0750
1052020-02-0533
1062020-02-0743
1072020-02-0853
1082020-02-0963
1092020-02-1073
1102020-03-0721
1112020-03-0831
1122020-03-0941
1132020-03-1051
1142020-03-1161
1152020-03-1271
1162020-03-1381
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
/* 这里面current row就是指当前行,unbounded following就是指最后一行,
and前面和后面的关系就是范围,从and后面的到and前面,但是and前面是不可以
使用unbounded following的,这样使用是错误的*/
查询结果如下:
sidday_timesale_volumesum_sales
1162020-03-1381772.0
1152020-03-1271691.0
1142020-03-1161620.0
1132020-03-1051559.0
1122020-03-0941508.0
1112020-03-0831467.0
1102020-03-0721436.0
1092020-02-1073415.0
1082020-02-0963342.0
1072020-02-0853279.0
1062020-02-0743226.0
1052020-02-0533183.0
1042020-01-0750150.0
1042020-01-0640100.0
1032020-01-053060.0
1022020-01-042030.0
1012020-01-031010.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
/*这里的unbounded preceding就是第一行数据,current row就是当前行
数据,关于and前和and后的关系前面说过了这里就不细说了*/
查询结果数据如下:
sidday_timesale_volumesum_sales
1162020-03-138181.0
1152020-03-1271152.0
1142020-03-1161213.0
1132020-03-1051264.0
1122020-03-0941305.0
1112020-03-0831336.0
1102020-03-0721357.0
1092020-02-1073430.0
1082020-02-0963493.0
1072020-02-0853546.0
1062020-02-0743589.0
1052020-02-0533622.0
1042020-01-0750672.0
1042020-01-0640712.0
1032020-01-0530742.0
1022020-01-0420762.0
1012020-01-0310772.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;
-- 语法解析
/*current row是指当前行,2 following就是后两行数据*/
查询结果如下:
sidday_timesale_volumesum_sales
1162020-03-1381213.0
1152020-03-1271183.0
1142020-03-1161153.0
1132020-03-1051123.0
1122020-03-094193.0
1112020-03-0831125.0
1102020-03-0721157.0
1092020-02-1073189.0
1082020-02-0963159.0
1072020-02-0853129.0
1062020-02-0743126.0
1052020-02-0533123.0
1042020-01-0750120.0
1042020-01-064090.0
1032020-01-053060.0
1022020-01-042030.0
1012020-01-031010.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;
-- 语法解析
/*1 preceding 就是指上一行数据,current row就是指当前行数据*/
查询结果如下:
sidday_timesale_volumesum_sales
1162020-03-138181.0
1152020-03-1271152.0
1142020-03-1161132.0
1132020-03-1051112.0
1122020-03-094192.0
1112020-03-083172.0
1102020-03-072152.0
1092020-02-107394.0
1082020-02-0963136.0
1072020-02-0853116.0
1062020-02-074396.0
1052020-02-053376.0
1042020-01-075083.0
1042020-01-064090.0
1032020-01-053070.0
1022020-01-042050.0
1012020-01-031030.0
  通过查询结果可以看出来,sum_salses这一列中的每一行都是前面一行到
当前行的总和。

  通过以上几个例子可以看到,使用rows between可以很灵活的控制窗口函数
的作用范围,这个在日常业务中如果能灵活使用可以很好的加快我们的工作效率
希望对大家有所帮助。

最后

以上就是可耐面包为你收集整理的hive中控制窗口范围rows between的使用的全部内容,希望文章能够帮你解决hive中控制窗口范围rows between的使用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(73)

评论列表共有 0 条评论

立即
投稿
返回
顶部