-
Hive窗口函数介绍:
窗口函数(Window Functions)是SQL中的一种高级分析功能,它允许你在查询结果的一个窗口(或分区)内进行计算。与聚合函数不同,窗口函数不会将多行合并成一行,而是保留原有的行,同时在这些行上计算聚合值。
窗口函数在Hive中非常有用,可以用来实现各种复杂的分析和计算,例如排名、累计和移动平均等。常见的窗口函数包括
ROW_NUMBER
、RANK
、DENSE_RANK
、NTILE
、LAG
、LEAD
等。 -
Hive窗口函数使用:
以下是一些常见的窗口函数及其用法的例子:
ROW_NUMBER
:为每一行分配一个唯一的行号。
SELECT column1, column2,
ROW_NUMBER() OVER (PARTITION BY column1 ORDER BY column2) as row_num
FROM table;
RANK
:为每一行分配一个排名,具有相同值的行会分配相同的排名,跳过后续的排名。
SELECT column1, column2,
RANK() OVER (PARTITION BY column1 ORDER BY column2) as rank
FROM table;
DENSE_RANK
:为每一行分配一个排名,具有相同值的行会分配相同的排名,不跳过后续的排名。
SELECT column1, column2,
DENSE_RANK() OVER (PARTITION BY column1 ORDER BY column2) as dense_rank
FROM table;
NTILE
:将结果分成指定数量的桶,并为每一行分配一个桶号。
SELECT column1, column2,
NTILE(4) OVER (PARTITION BY column1 ORDER BY column2) as bucket
FROM table;
LAG
:返回当前行的前N行的值。
SELECT column1, column2,
LAG(column2, 1) OVER (PARTITION BY column1 ORDER BY column2) as prev_value
FROM table;
LEAD
:返回当前行的后N行的值。
SELECT column1, column2,
LEAD(column2, 1) OVER (PARTITION BY column1 ORDER BY column2) as next_value
FROM table;
SUM
:计算累计和。
SELECT column1, column2,
SUM(column2) OVER (PARTITION BY column1 ORDER BY column2 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as cumulative_sum
FROM table;
在这些例子中,PARTITION BY
用于将数据分成不同的分区,ORDER BY
用于在分区内定义行的顺序。窗口函数在每个分区内独立计算。