hive 之 row_number等窗口分析函数用法

一、排序&去重分析

row_number() over(partititon by col1 order by col2) as rn

结果:1,2,3,4

rank() over(partititon by col1 order by col2) as rk

结果:1,2,2,4,5

dense_rank() over(partititon by col1 order by col2) as ds_rk

结果:1,2,2,3,4

上HQL语句:

select
order_id,
departure_date,
row_number() over(partition by order_id order by departure_date) as rn, -- 直排
rank() over(partition by order_id order by departure_date) as rk, -- 并列的,下一个数字会跳过
dense_rank() over(partition by order_id order by departure_date) as d_rk -- 并列的,下一个数据不会跳过
from ord_test
where order_id=410341346;

运行结果如下图:

二、跨行获取

lag(col1,n,DEFAULT) over(partition by col1 order by col2) as up
用于统计窗口内往上第n行值,第一个参数为列名,第二个参数为往上第n行(可选,默认为1),第三个参数为默认值(当往上第n行为NULL时候,取默认值,如不指定,则为NULL)

lead(col1,n,DEFAULT) over(partition by col1 order by col2) as down
用于统计窗口内往下第n行值,第一个参数为列名,第二个参数为往下第n行(可选,默认为1),第三个参数为默认值(当往下第n行为NULL时候,取默认值,如不指定,则为NULL)

first_value() over(partition by col1 order by col2) as fv
取分组内排序后,截止到当前行,第一个值

last_value() over(partition by col1 order by col2) as lv
取分组内排序后,截止到当前行,第一个值

select
order_id,
departure_date,
first_value(departure_date) over(partition by order_id order by add_time)as fv, -- 取分组内第一条
last_value(departure_date) over(partition by order_id order by add_time)as lv -- 取分组内最后一条
from ord_test
where order_id=410341346;

select
order_id,
departure_date,
lead(departure_date,1) over(partition by order_id order by departure_date)as down_1, -- 向下取一级
lag(departure_date,1) over(partition by order_id order by departure_date)as up_1 -- 向上取一级
from ord_test
where order_id=410341346;

结果如下:

莫问

我还没有学会写个人说明!

2 条评论

  1. 0 已看

  2. 0 期待更新

发表评论

您的电子邮件地址不会被公开,必填项已用*标注。

相关推荐

Google Voice 永久保号教程(可能会失效)

前提:现在,谷歌语音在90天内必须有主动发短信或打电话的动作,否则会被回收。 ① 手动临时保号 目前可以的保号方法就是定期发短信或者打电话: 1、GV号定期互发短信 手动发短信是最省钱最有效的Google Voice保 ...

个人电脑网络DNS修改教程

本文关键字: 个人电脑网络DNS修改教程,DNS修改,常见DNS,修改DNS,dns用啥好? 一: DNS简介 日常生活中,网络已经成为我们不可分割的一部分,但是我们经常会遇到以下问题,那可能是DNS的锅哦! 域名被劫持. 一般发生在 ...

debian10开启bbr加速

由于 Debian10 默认的内核就是 4.19 版本的内核而且编译了 TCP BBR 模块,所以可以直接通过参数开启。 新的 TCP 拥塞控制算法 BBR (Bottleneck Bandwidth and RTT) 可以让服务器的带宽尽量跑慢,并且尽量不要有 ...