参考地址:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+WindowingAndAnalytics

环境准备:

CREATE TABLE `wtab`(
`a` int,
`b` int,
`c` int);

  

数据:

1、LEAD函数

LEAD (scalar_expression [,offset] [,default]) OVER ([query_partition_clause] order_by_clause); The LEAD function is used to return data from the next row.

lead函数主要是返回窗口中列名为:scalar_expression偏移为offset的值,如果不存在则返回NULL,窗口使用over划分,具体划分参考示例:

 SELECT a, LEAD(a,1,9999) OVER (PARTITION BY b ORDER BY C) from wtab;

PARTITION BY 表示根据字段b划分窗口,就是b值相同的划分到一个窗口,ORDER BY 表示窗口内部按照字段C进行排序。此条查询结果为:

以b=1为例讲解,b相同的都在一个窗口按照c排序之后结果为:

这个就是b=1的窗口,a=1下面offset=1的数据为11,所以查询结果为:1 11 ;其他同理。

2、LAG函数

LAG  (scalar_expression [,offset] [,default]) OVER ([query_partition_clause] order_by_clause); The LAG function is used to access data from a previous row.

lag函数与lead函数相反,是向上offset取row,如果row不存在则返回默认值。示例:

 SELECT a, LAG(a, 2, 66666) OVER (PARTITION BY b ORDER BY C) from wtab;

根据字段b划分窗口之后向上offset=2取row,没有的话返回6666

 3:  FIRST_VALUE(columnName,isSkipNull) 函数

划分窗口之后,取columnName第一个值,第二个参数指定是否忽略null,默认false,示例:

SELECT a, FIRST_VALUE(a,true) OVER (PARTITION BY b ORDER BY C) from wtab;

 

查询结果

同理LAST_VALUE取当前窗口的最后一个值!如果只是select last_value(a) from table 这种事窗口内全部元素到达之后采取;如果是 select a, last_value(a) from table这种形式是当前a的值的当前窗口取最后一个,当排序的key存在重复值的时候,取值存在不确定。例如数据为:

查询为:

会发现b=1的窗口的last_value有点与预期不一样,这就是由于排序的字段c存在相同的值,由于每一row到达顺序不一样导致结果存在不确定性。但是对于b=155的窗口,字段c不存在重复值,这样就不会存在不确定性!!!!first_value同理,当半路来一个更小的值可能就存在不确定性,

因此:first_value与last_value不要和函数内部使用的字段联合查询:例如select last_value(a),a 这种就是联合查询了,函数内部字段a,外面还有字段a,此时窗口是根据当前字段a的值确定的当前窗口取first或者last.

3:

  • COUNT
  • SUM
  • MIN
  • MAX
  • AVG

这几个函数就是窗口内的聚集函数,没有特别之处,partition by 可以按照多个字段划分窗口

待补充:https://blog.csdn.net/qq_20641565/article/details/52841345

Hive窗口函数的更多相关文章

  1. Hive 窗口函数sum() over()求当前行和前面n条数据的和

    前几天遇到一个这样的需求:销售总占比加起来超过75%的top分类.具体需求是这样的:商品一级分类标签下面有许多商品标签,例如运动户外一级标签,下面可能存在361°,CBA,Nike,Adidas... ...

  2. hive窗口函数/分析函数详细剖析

    hive窗口函数/分析函数 在sql中有一类函数叫做聚合函数,例如sum().avg().max()等等,这类函数可以将多行数据按照规则聚集为一行,一般来讲聚集后的行数是要少于聚集前的行数的.但是有时 ...

  3. Hive窗口函数保姆级教程

    在SQL中有一类函数叫做聚合函数,例如sum().avg().max()等等,这类函数可以将多行数据按照规则聚集为一行,一般来讲聚集后的行数是要少于聚集前的行数的.但是有时我们想要既显示聚集前的数据, ...

  4. Hive 窗口函数、分析函数

    1 分析函数:用于等级.百分点.n分片等 Ntile 是Hive很强大的一个分析函数. 可以看成是:它把有序的数据集合 平均分配 到 指定的数量(num)个桶中, 将桶号分配给每一行.如果不能平均分配 ...

  5. Hive 窗口函数LEAD LAG FIRST_VALUE LAST_VALUE

    窗口函数(window functions)对多行进行操作,并为查询中的每一行返回一个值. OVER()子句能将窗口函数与其他分析函数(analytical functions)和报告函数(repor ...

  6. Hive窗口函数之LAG、LEAD、FIRST_VALUE、LAST_VALUE的用法

    一.创建表: create table windows_ss ( polno string, eff_date string, userno string ) ROW FORMAT DELIMITED ...

  7. Hive窗口函数最全案例详解

    语法: 分析函数 over(partition by 列名 order by 列名 rows between 开始位置 and 结束位置) 常用分析函数: 聚合类 avg().sum().max(). ...

  8. Hive窗口函数案例详解

    语法: 分析函数 over(partition by 列名 order by 列名 rows between 开始位置 and 结束位置) 常用分析函数: 聚合类 avg().sum().max(). ...

  9. Hive 窗口函数之 lead() over(partition by ) 和 lag() over(partition by )

    lead函数用于提取当前行前某行的数据 lag函数用于提取当前行后某行的数据 语法如下: lead(expression,offset,default) over(partition by ... o ...

随机推荐

  1. 向Spring容器中注册组件的方法汇总小结

    1.通过xml定义 <bean class=""> <property name="" value=""></ ...

  2. JavaScript碎片—函数闭包(模拟面向对象)

    经过这几天的博客浏览,让我见识大涨,其中有一篇让我感触犹深,JavaScript语言本身是没有面向对象的,但是那些大神们却深深的模拟出来了面向对象,让我震撼不已.本篇博客就是在此基础上加上自己的认知, ...

  3. JS中replace替换全部的正确应用

    一般使用 var str = "test-test-test"; str = "test-test-test".replace("test" ...

  4. springboot 格式化返回日期

    两种方式: 1,可以在 pojo 类每个属性添加 @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8&qu ...

  5. SuperMap-iServer过滤请求返回值

    目的: iServer发布的arcgis地图服务中,由于tileinfo参数为null,导致用arcgis-ios客户端开发的APP闪退.通过过滤器将get请求的返回值修改 代码: package c ...

  6. 数据库连接池(基于MySQL数据库)

    使用JDBC是怎么保证数据库客户端和数据库服务端进行连接的? 通过代码: conn=DriverManager.getConnection(url, username, password); JDBC ...

  7. iOS中时间与时间戳的相互转化

    //获取当前系统时间的时间戳 #pragma mark - 获取当前时间的 时间戳 +(NSInteger)getNowTimestamp{ NSDateFormatter *formatter = ...

  8. MySQL 横向表分区之RANGE分区小结

    MySQL 横向表分区之RANGE分区小结 by:授客 QQ:1033553122 目录 简介 1 RANGE分区 1 创建分区表 1 查看表分区 2 新增表分区 2 新增数据 3 分区表查询 3 删 ...

  9. Android P的APP适配总结,让你快人一步

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由QQ音乐技术团队发表于云+社区专栏 上篇:Android P 行为变更适配 Android P 这次有很多行为变更,其中不乏一些需要亟 ...

  10. 算法: 包含min函数的栈

    * @Description 包含min函数的栈* @问题:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)).* @思路: 1:Stack 类中的p ...