hive的窗口函数详解

hive的窗口函数详解1 1 hive 窗口函数窗口函数是什么鬼 窗口函数指定了函数工作的数据窗口大小 当前行的上下多少行 这个数据窗口大小可能会随着行的变化而变化 窗口函数和聚合函数区别 窗口函数对于每个组返回多行 组内每一行对应返回一行值 聚合函数对于每个组

欢迎大家来到IT世界,在知识的湖畔探索吧!

1.1 hive窗口函数

窗口函数是什么鬼? 窗口函数指定了函数工作的数据窗口大小(当前行的上下多少行),这个数据窗口大小可能会随着行的变化而变化。 窗口函数和聚合函数区别? 窗口函数对于每个组返回多行,组内每一行对应返回一行值。 聚合函数对于每个组只返回一行。

欢迎大家来到IT世界,在知识的湖畔探索吧!

1.1.1 在日常的开发中常用那些类型函数??

欢迎大家来到IT世界,在知识的湖畔探索吧!1、字符串操作函数?split、concat、ifnull、cast 2、聚合函数 : hive适用于分析,所以常用。 3、时间函数 : 数仓的特征随时间变化而变化,所以时间也特别多 4、窗口函数:sum() over() 、 count() over() 、 排名函数 接下来,着重讲解hive的窗口函数。

1.1.2 了解哪些窗口函数,都是什么意思?

sum(col) over() : 分组对col累计求和,over() 中的语法如下 count(col) over() : 分组对col累计,over() 中的语法如下 min(col) over() : 分组对col求最小 max(col) over() : 分组求col的最大值 avg(col) over() : 分组求col列的平均值 first_value(col) over() : 某分区排序后的第一个col值 last_value(col) over() : 某分区排序后的最后一个col值 lag(col,n,DEFAULT) : 统计往前n行的col值,n可选,默认为1,DEFAULT当往上第n行为NULL时候,取默认值,如不指定,则为NULL lead(col,n,DEFAULT) : 统计往后n行的col值,n可选,默认为1,DEFAULT当往下第n行为NULL时候,取默认值,如不指定,则为NULL ntile(n) : 用于将分组数据按照顺序切分成n片,返回当前切片值。注意:n必须为int类型。 ​ 排名函数: row_number() over() : 排名函数,不会重复,适合于生成主键或者不并列排名 rank() over() : 排名函数,有并列名次,名次不连续。如:1,1,3 dense_rank() over() : 排名函数,有并列名次,名次连续。如:1,1,2

over(分组 排序 窗口) 中的order by后的语法: 1、物理窗口(真实往上下移动多少行rows between):

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

如: over(partition by col order by rows between 1 preceding and 1 fllowing)

hive的窗口函数详解



欢迎大家来到IT世界,在知识的湖畔探索吧!

2、 逻辑窗口(满足条件上下多少行):(金融行业、保险行业、p2p等)

range between [num] PRECEDING AND [num] FOLLOWING

如: over(partition by col order by range between 5 preceding and 5 fllowing)

hive的窗口函数详解

注意:窗口函数一般不和group by搭配使用。

欢迎大家来到IT世界,在知识的湖畔探索吧!应用: 某天某产品的累计销售额。 物理窗口: 求多维度累计(累计退款金额、累计交易额、累计订单数量) 逻辑窗口: 范围累计环比情况、某值上下加减。

1.1.3 编写sql实现每个用户截止到每月为止的最大单月访问次数和累计到该月的总访问次数

数据: userid,month,visits A,2015‐01,5 A,2015‐01,15 B,2015‐01,5 A,2015‐01,8 B,2015‐01,25 A,2015‐01,5 A,2015‐02,4 A,2015‐02,6 B,2015‐02,10 B,2015‐02,5 A,2015‐03,16 A,2015‐03,22 B,2015‐03,23 B,2015‐03,10 B,2015‐03,1

每个用户截止到每月为止的最大单月访问次数和累计到该月的总访问次数,结果数据格式如下:

hive的窗口函数详解

答案:

欢迎大家来到IT世界,在知识的湖畔探索吧!-- 建表语句 c*reate table visits( userid string, month string, visits int ) row format delimited fields terminated by ',' ; ​ -- 装载数据语句 load data local inpath '/home/visits' into table visits; ​ -- 查询语句​ select t.userid, t.month, max(visits) over(distribute by t.userid sort by t.month) max_visits, sum(visits) over(distribute by t.userid sort by t.month) total_visits, t.visits from (select vs.userid, vs.month, sum(visits) visits from visits vs group by vs.userid,vs.month) t ; ​ ​ 查询结果: OK A 2015‐01 33 33 33 A 2015‐02 33 43 10 A 2015‐03 38 81 38 B 2015‐01 30 30 30 B 2015‐02 30 45 15 B 2015‐03 34 79 34 ​ ​ 注意: 1、月份转换成成时间戳更好 2、子查询不会限制性能,相反更好。

hive的窗口函数咱们就介绍到这儿啦。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/97162.html

(0)
上一篇 9小时前
下一篇 9小时前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信