欢迎投稿

今日深度:

hive窗口函数,

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

 

www.htsjk.Com true http://www.htsjk.com/hive/40900.html NewsArticle hive窗口函数, 功能 :既能显示聚合前的数据 ,又能显示聚合后的函数 执行顺序: 最后一步执行 ,仅仅位于order by 之前                   select查询中 存在多个窗口函数时 他们之间...
相关文章
    暂无相关文章
评论暂时关闭