文章详情

短信预约信息系统项目管理师 报名、考试、查分时间动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Hive-窗口函数

2018-02-08 15:48

关注

Hive-窗口函数

在Hive中支持窗口函数,Mysql在8.0版本后也支持使用,用好之后犹如开挂!

Window Function又称为窗口函数、分析函数。聚合函数可以将多行数据按照规定聚合为一行,一般来讲聚集后的行数要少于聚集前的行数。但是有时我们想要既显示聚集前的数据,又要显示聚集后的数据,这时便引入了窗口函数。

运行顺序:窗口函数是在select时执行的,位于order by之前。

1. 累计计算窗口函数

语法总结:

sum(A) over(partition by B order by C rows between D1 and D2)

avg(A) over(partition by B order by C rows between D1 and D2)

max(A) over(partition by B order by C rows between D1 and D2)

min(A) over(partition by B order by C rows between D1 and D2)

count(A) over(partition by B order by C rows between D1 and D2)

partition by:相当于分组

order by:按照什么顺序进行累加等。默认升序asc, 降序为desc。

A:需要被加工的字段名称,对指定字段计算

B:分组的字段名称

C:排序的字段名称

D1,D2:计算的行数范围

rows between:也叫window子句

unbounded:无界的

preceding:之前

following:之后

current row:当前行

unbounded preceding:前面的起点

unbounded following:后面的终点

rows between unbounded preceding and current row:之前所有行和本行,不写rows between为默认起点到当前行;

rows between 3 preceding and current row:前3行和本行(共4行);

range between current row and unbounded following:本行和之后的所有行;

rows between current row and 3 following:本行和后面3行(共4行);

rows between 3 preceding and 1 following: 从前3行到下一行(共4行)。

2. 分区排序窗口函数

 row_number() over(partition by A order by B)

            rank() over(partition by A order by B)

   desc_rank() over(partition by A order by B)

返回相应规则的排序序号

生成1 2 3 4 5 6 7 8 9 ...  : row_number() 查询出来的每一行生成一个序号,依次排序,且不重复

2 .生成1 1 1 4 5 6 7 7 9 ...   : rank() 生成的序号相同时,下一个不同的会跳跃,跳跃排序

生成1 1 1 2 3 3 4 5 6...   :desc_rank()生成的序号相同时,下一个不同的不会跳跃,是连续排序

3. 切片:分组排序窗口函数

ntile(n) over(partition by A order by B)

n:切分的片数

A:分组的字段名称

B:排序的字段名称

ntile(n):用于将分组数据按照顺序切分成n片,返回切片值

不支持 rows between...

如果切片不均匀,默认从第一个开始均分,如 5 5 4 4

4. 偏移分析窗口函数

lag:向上偏移  ---比如向上偏移2行 实则新行数据由原来的行整体下移两行,前两行出现空值可由默认值填充

lead:向下偏移 --同理

lag(A,offset,defval) over(partition by ... order by ...)

A:字段名称

offset:

defavl:

例如 : lag(A,1,A) over(partition by USER_NAME order by A)

    lag(A) over(partition by USER_NAME order by A)

    lag(A,2) over(partition by USER_NAME order by A)

lag(A,offset,defval) over(partition by ... order by ...)

注意:一定要习惯取别名

lag( ... ) over(...) as ...

lead( ... ) over(...) as ...

 

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯