Hive:窗口函数[ntile, first_value,row_number() ,rank(),dens_rank()]和自定义函数
ntile 分组
它把有序的数据集合
平均分配
到
指定的数量(num
)个桶中
,
将桶号分配给每一行。如果不能平均分配,则优先分配较小编号的桶,并且各个桶中能放的行数最多相差1。
被称作窗口函数、序列函数或分析函数,
本质上是一种窗口函数,但由于其生成序列化编号的特性,也被称为序列函数;同时,由于窗口函数在某些数据库系统中被称为分析函数,
NTILE
也常被归类为分析函数
使用场景: 常用于将数据分段,以便进行分组分析或计算分位数。
示例
first_value和last_value
窗口函数,常与 OVER
子句结合使用,以定义窗口的范围和排序规则
示例
注意: 使用last_value需要指定窗口的范围,使用rows或rang,
如果没有指定的话,窗口函数的行为取决于数据库的具体实现.在某些数据库系统中,如果未明确指定窗口范围,LAST_VALUE
函数可能会返回整个结果集的最后一个值。但是,在Hive中,如果不指定窗口范围,LAST_VALUE
函数默认会将整个分区(在没有 PARTITION BY
子句的情况下,整个结果集就是一个分区)视为窗口,并为每一行返回整个窗口内的最后一个值。
FIRST_VALUE
和 LAST_VALUE
的行为可能因版本和实现而异。为了确保跨数据库系统的兼容性和可预测性,建议在使用这些函数时总是明确指定窗口范围(rows或rang)。这样可以避免因默认行为而导致的意外结果。
lag 和 lead
窗口函数
使用场景: 处理时间序列数据或需要比较当前记录与相邻记录
语法:
3个排名函数
属于窗口函数, 格式: 排序函数 over( order by 字段 排序方式)
row_number : 不存在并列名次
rank() :并列名次情况,顺序跳跃递增
dense_rank() : 有并列名次情况,顺序递增
示例排序效果
row_number
rank()
dens_rank()
自定义函数
示例