hive窗口函数,
功能:既能显示聚合前的数据 ,又能显示聚合后的函数
执行顺序:最后一步执行 ,仅仅位于order by 之前
select查询中 存在多个窗口函数时 他们之间是没有影响的,每个窗口应用自己规则
函数内容:
over():
partition by :分组(在分组内进行操作)。
order by :默认从起点行到当前行。
eg:
select DISTINCT appkey,amount, count(1)over(partition by appkey order by amount ) from xxx
window :rows between ... and ...
preceding ---往前
following -----往后
current row --当前行
unbounded---起点
主要序列函数不支持window子句:
ntile(n):将分组数据按照顺序分成n片,返回当前切片值
假如我们想要每位顾客购买金额前1/3的交易记录:
select name,orderdate,cost,
ntile(3) over() as sample1 , --全局数据切片
ntile(3) over(partition by name), -- 按照name进行分组,在分组内将数据切成3份
ntile(3) over(order by cost),--全局按照cost升序排列,数据切成3份
ntile(3) over(partition by name order by cost ) --按照name分组,在分组内按照 cost升序排列,数据切成3份
from t_window
row_number,rank,dense_rank:
- row_number()从1开始,按照顺序,生成分组内记录的序列,row_number()的值不会存在重复,当排序的值相同时,按照表中记录的顺序进行排列
- RANK() 生成数据项在分组中的排名,排名相等会在名次中留下空位
- DENSE_RANK() 生成数据项在分组中的排名,排名相等会在名次中不会留下空位
lag:返回上行的数据
lead:返回下行的数据
first_valve:
last_value
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。