博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Hive]窗口函数与分析函数
阅读量:6788 次
发布时间:2019-06-26

本文共 1879 字,大约阅读时间需要 6 分钟。

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

1 窗口函数

窗口函数 描述
LAG() LAG()窗口函数返回分区中当前行之前行(可以指定第几行)的值。 如果没有行,则返回null。
LEAD() LEAD()窗口函数返回分区中当前行后面行(可以指定第几行)的值。 如果没有行,则返回null。
FIRST_VALUE FIRST_VALUE窗口函数返回相对于窗口中第一行的指定列的值。
LAST_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() 将每个分区的行尽可能均匀地划分为指定数量的分组

具体参考:

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 TGROUP BY a;
 

转载地址:http://hfpgo.baihongyu.com/

你可能感兴趣的文章
什么是Consul
查看>>
学习新技术,不再吃老本
查看>>
Tomcat最新本地提权漏洞
查看>>
OURS-IOTV2 物联网套件 各模块ID
查看>>
c语言冒泡排序
查看>>
公共资源情报(OSINT)工具Automater
查看>>
新版本eclipse导入旧版本插件
查看>>
Linux系统之程序包管理器-RPM
查看>>
Javascript中String
查看>>
清除WebLogic缓存
查看>>
11g rman 配置catalog
查看>>
时间戳格式化
查看>>
我的友情链接
查看>>
Tablacus Script Control 64
查看>>
Vim for C Programmers
查看>>
第六章 嫉妒、欺骗、背叛
查看>>
【未解决】js对象字面量、eval()方法
查看>>
安装php加速器Zend guard loader出现无法加载,没有找到php5.dll 的错误
查看>>
关于OpenCV 3.1的搭建使用经验
查看>>
唯品会的订单分库分表实践总结以及关键步骤
查看>>