hive lag() 和lead()函数

LAGLEAD函数简介

Hive 中的 LAGLEAD 函数时,通常用于在结果集中获取同一列在前一行(LAG)或后一行(LEAD)的值。这在分析时间序列数据、计算变化率或查找趋势时非常有用。以下是这两个函数的用法示例:

1. LAG 函数:
LAG 函数用于获取前一行的值。它的基本语法是:

LAG(column_expression, offset, default_value) 
OVER (PARTITION BY partition_expression 
ORDER BY sort_expression)
  • column_expression:要获取前一行值的列或表达式。
  • offset:要回溯的行数。例如,使用 LAG(column, 1) 获取前一行的值,LAG(column, 2) 获取前两行的值,依此类推。
  • default_value:可选参数,用于指定在没有前一行时的默认值。
  • PARTITION BY:可选子句,用于指定分区列,以在不同分区内分别计算。
  • ORDER BY:用于指定排序的列,以确定 “前一行” 是相对于哪些行的。

2. LEAD 函数:
LEAD 函数用于获取后一行的值。它的基本语法是:

LEAD(column_expression, offset, default_value) OVER (PARTITION BY partition_expression ORDER BY sort_expression)

LAG 函数相似,只是它返回后一行的值

示例

假设我们有以下名为 “daily_stock_prices” 的表,包含每日股票价格的数据:date, ticker, price。我们想要为每只股票计算前一天和后一天的股票价格。
“daily_stock_prices” 表的样例数据:

date ticker price
2023-08-01 AAPL 150.5
2023-08-02 AAPL 152.3
2023-08-03 AAPL 149.8
2023-08-01 GOOG 2800.0
2023-08-02 GOOG 2750.5
2023-08-03 GOOG 2785.2

使用 “hive lag” 函数来计算前一天的股票价格:

SELECT 
  date,
  ticker,
  price,
  LAG(price, 1) OVER (PARTITION BY ticker ORDER BY date) AS prev_day_price
FROM daily_stock_prices;

查询结果如下:

date ticker price prev_day_price
2023-08-01 AAPL 150.5 NULL
2023-08-02 AAPL 152.3 150.5
2023-08-03 AAPL 149.8 152.3
2023-08-01 GOOG 2800.0 NULL
2023-08-02 GOOG 2750.5 2800.0
2023-08-03 GOOG 2785.2 2750.5
使用 “hive lead” 函数计算后一天的股票价格,
SELECT 
  date,
  ticker,
  price,
  LEAD(price, 1) OVER (PARTITION BY ticker ORDER BY date) AS next_day_price
FROM daily_stock_prices;

查询结果如下:

date ticker price next_day_price
2023-08-01 AAPL 150.5 152.3
2023-08-02 AAPL 152.3 149.8
2023-08-03 AAPL 149.8 NULL
2023-08-01 GOOG 2800.0 2750.5
2023-08-02 GOOG 2750.5 2785.2
2023-08-03 GOOG 2785.2 NULL

你可能感兴趣的:(hive,大数据,sql)