Hive窗口函数详细介绍1

       在hive中,窗口函数(又叫开窗函数)具有强大的功能,掌握好窗口函数,能够帮助我们非常方便的解决很多问题。首先我们要了解什么是窗口函数,简单的说窗口函数是hive中一种可以按指定窗口大小计算的函数,例如,sum(),avg(),min(),max()等聚合函数,还有rank(),row_number() 可用作排序使用的窗口函数。下面一一对它们做介绍。

  首先,要介绍一些在窗口函数中经常使用的函数或关键字,用来控制窗口函数中窗口的大小。

  over():用来指定窗口函数的窗口大小,这个窗口可以随着数据行的变化而发生变化。

  current_row:当前行

  n  preceding :往前n行数据

  n  following:往后n行数据

       unbounded:起点,unbounded preceding  表示从前面的起点开始,unbounded  following 表示到数据行的终点。

  如果不指定,默认从起始行到当前行。

1.sum(),avg(),min(),max()

    数据准备

      

扫描二维码关注公众号,回复: 11447961 查看本文章
create  table  if   not    exists   buy_info  (
    
 name   string,
 buy_date   string,
 buy_num   int
)
row  format  delimited  fields   terminated  by  '|'

select  *    from    buy_info;  信息如下

liulei     2015-04-11    5

liulei     2015-04-12    7

liulei     2015-04-13    3

liulei     2015-04-14    2

liulei     2015-04-15    4

liulei     2015-04-16    4

select   name ,buy_time ,num,  sum(num)   over(partition by name   order  by  buy_date  asc)  as  info1 ,--先按姓名分组,再按购买时间升序排序,最后求和,默认是从起始行到当前行
sum(num) over(partition by name order by buy_date rows between unbounded preceding and
unbounded and current_row) as info2, --从起点到当前行,和1结果一样
sum(num) over(partition by name order by buy_date rows between 3 preceding and current_row) as info3,--从当前行往前数3行到当前行
sum(num) over(partition by name) as info4 , --分组内所有行
sum(num) over(partition by name order by buy_date rows between 1 preceding and 1 following) as info5,--当前行+往前一行+往后一行
sum(num) over(partition by name order by buy_date rows between 1 prededing and unbounded following) as info6 --从当前行往前数一行到最后一行

查询结果如下

name buy_date buy_num info1 info2 Info3 info4 info5 info6
liulei 2015-04-11     5 5 5 5 25 5 25
liulei 2015-04-12      7 12 12 12 25 15 25
liulei 2015-04-13     3 15 15 15 25 12 20
liulei 2015-04-14     2 17 17 17 25 9 13
liulei 2015-04-15     4 21 21 16 25 10 10
liulei 2015-04-16     4 25 25 13 25 8 8

猜你喜欢

转载自www.cnblogs.com/itachilearner/p/13341350.html