是的,Hive SQL 支持窗口函數。從 Hive 2.0 版本開始,Hive 引入了窗口函數,允許用戶在查詢中使用窗口函數進行復雜的分析。窗口函數可以對一個或多個表中的行進行分區,并在每個分區上執行聚合操作。
Hive 支持的窗口函數包括:
ROW_NUMBER()
:為每個分區中的行分配一個唯一的序號。RANK()
:為每個分區中的行分配一個排名,根據排序順序。DENSE_RANK()
:與 RANK()
類似,但排名不會跳過下一個排名。NTILE()
:將每個分區中的行分成指定數量的組(桶)。LEAD()
和 LAG()
:分別返回當前行前面或后面的行。SUM() OVER ()
、AVG() OVER ()
、COUNT() OVER ()
等:這些函數允許你在一個窗口上執行聚合操作。要使用窗口函數,你需要在查詢中包含一個 OVER()
子句,用于指定窗口的定義。窗口定義包括分區鍵、排序順序和窗口范圍。
以下是一個簡單的示例,展示了如何在 Hive SQL 查詢中使用窗口函數:
SELECT employee_id, salary,
ROW_NUMBER() OVER (ORDER BY salary DESC) AS rank
FROM employees;
這個查詢將按薪水降序排列員工,并為每個員工分配一個基于薪水的排名。