Hive函数--窗口函数

窗口函数介绍:

        概述: 窗口函数指的是 over()函数, 它可以结合特定的函数一起使用, 完成不同的功能.

        目的、作用: 窗口函数 = 给表新增一列, 至于新增的内容是什么, 取决于窗口函数和什么函数一起使用.

        格式: 能和窗口函数一起使用的函数 over(partition by 分组字段 order by 排序字段 rows between 起始行 and 结束行),能和窗口函数一起使用:

        聚合函数: count(), sum(), max(), min(), avg()

        排序函数: row_number(), rank(), dense_rank(), ntile()

        其它函数: lag(), lead(), first_value(), last_value()

Hive窗口函数--结合聚合函数

sum() + group by 一起使用.

select 列, sum(列) as 别名 from 表名 group by 列;

聚合函数 + 窗口函数一起使用.

        细节:

                如果写了partition by(表示分组): 则默认操作 组内所有的数据.

                如果写了order by(表示排序):     则默认操作 组内第一行 至 当前行的数据.

select *, sum(列) over(partition by 列)  from 表名;
select *, sum(列) over(partition by 列 order by 列) from 表名;

Hive窗口函数--结合排序函数

        这里的排序函数指的是: row_number(), rank(), dense_rank(), 它们都可以做排名, 不同的是, 对相同值的处理结果.
            例如: 数据是100, 90, 90, 60, 则: 
                 row_number是: 1, 2, 3, 4,  
                 rank: 1, 2, 2, 4,  
                 dense_rank: 1, 2, 2, 3

--格式
select
    *,
    row_number() over (partition by 列 order by 列 desc ) as 别名 ,      
    rank() over (partition by 列 order by 列 desc ) as 别名,
    dense_rank() over (partition by 列 order by 列 desc ) as 别名
from 表;

        ntile(数字)表示几分之几, 里边的数字表示把数据分成几份, 如果不够分, 优先参考最小分区.
              例如: 7条数据分成3份, 则最终结果为:  1, 1, 1    2, 2    3, 3
              ntile(数字,表示分成几份)  采用均分策略, 每份之间的差值不超过1, 优先参考最小的那个部分, 即: 7分成3份, 则是: 3, 2, 2

-- 格式
select
    *,
    ntile(3) over (partition by 列 order by 列 desc )      
from 表;

Hive窗口函数--结合其它函数

        lag 用于统计窗口内往上第n行值需求: 显示用户上一次的访问时间.

        lead 用于统计窗口内往下第n行值

        first_value 取分组内排序后,截止到当前行,第一个值

        last_value 取分组内排序后,截止到当前行,最后一个值

你可能感兴趣的:(hive,hadoop,数据仓库)