[Hive]窗口函数与分析函数

标签: Hive 窗口函数 分析函数 windowing functions analytics functions
1420人阅读 评论(0) 收藏 举报
分类:

本文介绍了用于窗口函数和分析函数的Hive QL增强功能。所有窗口和分析函数操作都按照SQL标准。 当前版本支持以下窗口函数和分析函数:

1 窗口函数

窗口函数描述
LAG()LAG()窗口函数返回分区中当前行之前行(可以指定第几行)的值。 如果没有行,则返回null。
LEAD()LEAD()窗口函数返回分区中当前行后面行(可以指定第几行)的值。 如果没有行,则返回null。
FIRST_VALUEFIRST_VALUE窗口函数返回相对于窗口中第一行的指定列的值。
LAST_VALUELAST_VALUE窗口函数返回相对于窗口中最后一行的指定列的值。

具体参考: [Hive]窗口函数LEAD LAG FIRST_VALUE LAST_VALUE

2 OVER子句

OVER子句可以与标准聚合函数使用(COUNT,SUM,MIN,MAX,AVG)。

OVER可以与一个或多个任何原始数据类型的分区列的PARTITION BY语句使用。

OVER可以与一个或多个任何原始类型的分区列(排序列)的PARTITION BY(ORDER BY)使用。

带有窗口规范的OVER子句。窗口可以在WINDOW子句中单独定义。 窗口规范支持如下格式:

(ROWS | RANGE) BETWEEN (UNBOUNDED | [num]) PRECEDING AND ([num] PRECEDING | CURRENT ROW | (UNBOUNDED | [num]) FOLLOWING)
(ROWS | RANGE) BETWEEN CURRENT ROW AND (CURRENT ROW | (UNBOUNDED | [num]) FOLLOWING)
(ROWS | RANGE) BETWEEN [num] FOLLOWING AND (UNBOUNDED | [num]) FOLLOWING

当缺少WINDOW子句并指定使用ORDER BY时,窗口规范默认为RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW,即从第一行到当前行。

当缺少ORDER BY和WINDOW子句时,窗口规范默认为ROW BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING,即第一行到最后一行。

备注

PRECEDING : 表示当前行之前的行

UNBOUNDED PRECEDING : 表示当前行之前无边界行,即第一行

num PRECEDING : 表示当前行之前第num行

CURRENT ROW : 表示当前行

FOLLOWING : 表示当前行后面的行

UNBOUNDED FOLLOWING : 表示当前行后面无边界行,即最后一行

num FOLLOWING : 表示当前行后面第num行

3 分析函数

分析函数描述
RANK返回数据项在分区中的排名。排名值序列可能会有间隔
DENSE_RANK返回数据项在分区中的排名。排名值序列是连续的,不会有间隔
PERCENT_RANK计算当前行的百分比排名
ROW_NUMBER确定分区中当前行的序号
CUME_DIST计算分区中当前行的相对排名
NTILE()将每个分区的行尽可能均匀地划分为指定数量的分组

具体参考:[Hive]分析函数 RANK ROW_NUMBER CUME_DIST CUME_DIST

4 Distinct (Hive 2.1.0以后版本支持)

Distinct 支持包括SUM,COUNT和AVG的聚合函数,在每个分区不同值上进行聚合(aggregate over the distinct values within each partition)。当前实现具有以下局限性:由于性能原因,在分区子句中不能支持ORDER BY或窗口规范。支持的语法如下:

COUNT(DISTINCT a) OVER (PARTITION BY c)

在 Hive 2.2.0 后 Distinct可以支持 ORDER BY 和 窗口规范 (see HIVE-13453)。例如:

COUNT(DISTINCT a) 
OVER (PARTITION BY c ORDER BY d ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)

5. OVER子句中支持聚合函数(Hive 2.1.0及以后版本支持)

添加了对在OVER子句中使用聚合函数的支持。 例如,目前我们可以在OVER子句中使用SUM聚合函数,如下所示:

SELECT rank() OVER (ORDER BY sum(b))
FROM T
GROUP BY a;
查看评论

hive之窗口函数理解与实践

rt_data表存放了当天每半小时的店铺销售数据 ------------------------------------------------------------ 1.统计截止到当前时间段的店...
  • xiepeifeng
  • xiepeifeng
  • 2015年01月13日 14:58
  • 21480

Hive常用函数大全(二)(窗口函数、分析函数、增强group)

关系运算## > < = ##注意: String 的比较要注意(常用的时间比较可以先 to_date 之后再比较) select long_time>short_time, long_time...
  • scgaliguodong123_
  • scgaliguodong123_
  • 2017年03月03日 11:13
  • 5641

Hive窗口函数

Hive窗口函数
  • qq_26937525
  • qq_26937525
  • 2017年02月08日 13:34
  • 7818

尽量不要使用 distinct

大多数情况下,Distinct函数都会导致对最终结果集完成一次排序,因此,这就成为成本最昂贵的排序之一。Distinct一直是SQL语言中成本最高的函数之一。不过,对于DB2V9,优化工具会尽量利用索...
  • u010745238
  • u010745238
  • 2015年01月18日 22:52
  • 3801

Hive 窗口函数、分析函数

http://www.cnblogs.com/skyEva/p/5730531.html Hive 窗口函数、分析函数 ...
  • u011239443
  • u011239443
  • 2017年03月08日 15:16
  • 415

Hive分析窗口函数系列文章

Hive中提供了越来越多的分析函数,用于完成负责的统计分析。抽时间将所有的分析窗口函数理一遍,将陆续发布。 今天先看几个基础的,SUM、AVG、MIN、MAX。 用于实现分组内所有和连续累积的统计。 ...
  • guohecang
  • guohecang
  • 2016年06月03日 22:52
  • 3342

hive内置函数详解(分析函数、窗口函数)

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/75/97/wKioL1Y9oZiAkspGAAMsRcKYMDs505.jpg" ...
  • jethai
  • jethai
  • 2016年08月28日 14:05
  • 2375

窗口函数之排名函数与分析函数

窗口函数中的排名函数与分析函数实在是太好用了,尤其是row_number和lead 全局表如下: 排名函数       row_number           ROW_NUMBER() ...
  • u012102306
  • u012102306
  • 2016年11月11日 18:58
  • 2490

Hive分析窗口函数

转载:http://lxw1234.com/archives/category/hive/page/4 hive分析窗口函数Hive中提供了越来越多的分析函数,用于完成负责的统计分析本文涉及的函数汇总...
  • u010368839
  • u010368839
  • 2017年07月19日 12:42
  • 228

Hive 窗口函数、分析函数

网址:https://www.cnblogs.com/skyEva/p/5730531.html 1 分析函数:用于等级、百分点、n分片等 Ntile 是Hive很强大的一个分析函数。 ...
  • ydc321
  • ydc321
  • 2018年01月31日 09:52
  • 29
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 159万+
    积分: 2万+
    排名: 372
    博客专栏
    最新评论