hive窗口函数最全总结

准备工作

一:窗口函数概况

1.1 窗口函数说明

1.2 窗口范围说明

1.2.1 窗口范围取值可选项

1.2.2 默认窗口范围含义

思考一:如何理解省略order by的情况,不能指定窗口范围?

二:窗口函数分类和特性

2.1 窗口函数分类

2.2 窗口函数功能和常见应用概括

2.2.1 功能

2.2.2 应用

三:窗口函数应用场景(基础使用)

3.1 聚合型窗口函数

3.1.1 情境一:购买物品的用户及其总人数

3.1.2 情景二:用户购买物品明细及每周各种类型用户购买总数量(补分析列)。

3.2 分析型(排序)窗口函数

3.2.1情景三:每种用户类型销量排行第一的用户及其明细(分组排名)

思考二:窗口排序遇到null

3.2.2 情景四:每种用户类型销量排名前2的用户明细(top n)

3.1.4 情景五:连续n天登陆

情景六:给定数字的频率查询中位数

3.3 取值型窗口函数

3.3.1 准备工作

3.3.2 情景七:找到车辆上一次锁车记录

3.3.3 情景八:那么如何求某个省份围栏、某小时、某辆车的最长未被骑行时间。(多次窗口使用)

思考三:多次窗口使用能否改成一次窗口和group by结合得到大致数据?

思考四:多次窗口使用能否改成一次窗口和group by结合得到所有明细数据?

3.3.4 情景九:连续出现的数字

四:进阶使用

4.1 窗口函数与group by异同点

4.1.1 窗口函数与group by 区别

4.1.2 group by去重

4.2 collect_list + partition by的特殊用法

4.2.1 问题提出

4.2.2 解决思路

4.2.3 实际解决

4.2.4 延伸到风控业务的实际用法

4.3 cube&grouping set这块

五:窗口函数底层运行原理

六:其他注意事项

思考问题:

思考一:如何理解省略order by的情况,不能指定窗口范围?

思考二:窗口排序遇到null

准备工作

已经有测试表:order_detail.本文接下来所有测试样例如果未特殊说明均基于下面order_detail表。

user_id

(用户ID)

order_date

(订单日期)

user_type

(用户类型)

sales

(销量)

1

qishili

2022-07-03

new

5

2

wangshi

2022-07-01

old

2

3

liiu

2022-07-01

new

1

4

lilisi

2022-07-05

new

5

5

lisi

2022-07-02

old

1

6

wutong

2022-07-02

new

6

7

qibaqiu

2022-07-05

new

1

8

liwei

2022-07-02

old

3

9

zhangsa

2022-07-02

new

2

10

wanger

2022-07-02

new

3

一:窗口函数概况

1.1 窗口函数说明

窗口函数简单的说就是在执行聚合函数的时候指定一个操作窗口,这个窗口由over来进行控制。接下来重点介绍一下over()函数。

over():指定分析函数工作的数据窗口大小,这个大小可能会随着行的变化而变化。

其基本语法如下:<分析函数> over ( partition by <用于分组的列名> order by <用于排序的列名> desc/asc rows between 开始行 and 结束行 )

样例1--窗口函数基本使用

select 
    user_id,
    user_type,
    sales,
    count(user_id) over(partition by user_type order by sales desc 
          rows between unbounded preceding and current row) as cnt
from order_detail

可以看到over()里面一共有3部分组成:分区、排序、指定窗口范围,注意这三部分可以组合使用,也可以不使用。

  1. partition by可以理解为分组。over(partition by 列)搭配分析函数时候(可以接多个列,表示按照这些列分组),分析函数是按照每一组的数据进行分析计算的。

  2. order by是在窗口内进行排序,desc/asc可以进行选择使用。

  3. rows between 开始位置 and 结束位置,指定数据范围。 -- 例如常使用的窗口范围是rows between unbounded preceding and current row.常用该窗口来累加计算。

1.2 窗口范围说明

你可能感兴趣的:(大数据,java,开发语言)