hive 窗口函数_Hive 的窗口函数

本文首发于:微信公众号【大数据每日哔哔,文章:Hive SQL 窗口函数
在 SQL 中有一类函数叫做聚合函数,例如 sum()、avg()、max()、min() 等等,这类函数可以将多行数据按照规则聚集为一行,一般来讲聚集后的行数是要少于聚集前的行数的。但是,有时候我们既要显示聚集前的数据,又要显示聚集后的数据,此时我们便引入了窗口函数。窗口函数主要用于 OLAP 数据分析。

在深入研究Over字句之前,一定要注意:在SQL处理中,窗口函数都是最后一步执行,而且仅位于Order by子句之前。

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

LAG 和 LEAD 的用法:

LAG 

FIRST_VALUE 和 LAST_VALUE 的用法:

FIRST_VALUE 

下面举个例子,数据集如下:

hive

LAG(col,n,default)

与 partitioned by 结合使用,返回当前分区中,当前行之前的第 n 行对应的值。如果没有则默认换回 null。第一个参数为列名,第二个参数为当前行之前第n行(可选,默认为1),第三个参数为缺失时默认值(当前行之前第n行为NULL没有时,返回该默认值,如不指定,则为NULL)。

为了比较每个用户浏览次数与前一天的浏览次数进行比较,查询返回当前浏览次数以及前一天的浏览数量。由于在2019-02-10之前没有浏览行为,前一天的浏览次数设置为0(不设置默认为NULL)。
hive

LEAD(col,n,default)

与 LAG 函数相反。

FIRST_VALUE(col,布尔值)

第一个参数是需要第一个值的列,第二个(可选)参数必须是默认为false的布尔值。如果设置为true,则跳过空值。

hive

LAST_VALUE(col,布尔值)

与 FIRST_VALUE() 函数相反,这里就不进行演示了。

over子句

官方 OVER子句 包括几个部分:

  • 聚合函数(count, sum, min, max, avg)
  • OVER 子句
  • PARTITION BY 子句
  • ORDER BY 子句
  • WINDOW 子句

结合具体的业务场景,SQL 语句如下:

---1)201504月份的销售额

windows子句

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

| 关键字 | 说明 | | --- | --- | | PRECEDING | 表示当前行之前的行 | | UNBOUNDED PRECEDING | 表示当前行之前无边界行,即第一行 | | num PRECEDING | 表示当前行之前第num行 | | CURRENT ROW | 表示当前行 | | FOLLOWING | 表示当前行后面的行 | | UNBOUNDED FOLLOWING | 表示当前行后面无边界行,即最后一行 | | num FOLLOWING | 表示当前行后面第num行 |


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

参考

  • Windowing and Analytics Functions
  • HiveQL的窗口函数

订阅

5f164a048ee897b4c234e7b93723264e.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值