hive 窗口函数,分析函数的一些理解

  • Post author:
  • Post category:其他


一.先解释什么是窗口函数

首先,我们要知道什么是窗口子句:

需要指定一个窗口的边界,语法是这样的:

ROWS betweenCURRENT ROW | UNBOUNDED PRECEDING | [num] PRECEDING AND  UNBOUNDED FOLLOWING | [num] FOLLOWING| CURRENT ROW

RANGE between [num] PRECEDING  AND [num]FOLLOWING

如下图:

ROWS是物理窗口,从行数上控制窗口的尺寸的;

RANGE是逻辑窗口,从列值上控制窗口的尺寸。这个比较难理解,但说白了就简单了

普通的聚合函数用group by分组,

每个分组

返回一个统计值,而分析函数采用partition by分组,并且

每组每行

都可以返回一个统计值


开窗函数over(),包含三个分析子句:分组(partition by), 排序(order by), 窗口(rows) ,

他们的使用形式如下:over(partition by xxx order by yyy rows between zzz)



窗口就是分析函数分析时要处理的数据范围


,就拿sum来说,它是sum窗口中的记录而不是整个分组中的记录,因此我们在想得到某个栏位的累计值时,我们需要把窗口指定到该分组中的第一行数据到当前行, 如果你指定该窗口从该分组中的第一行到最后一行,那么该组中的每一个sum值都会一样,即整个组的总和。


注释:




开窗函数over()

出现分组(partition by)子句时,


unbounded preceding即第一行是指表中一个分组里的第一行, unbounded following即最



版权声明:本文为kuodannie1668原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。