LEAD 함수

LEAD 함수

Apache Pinot의 LEAD 윈도우 함수는 같은 결과 집합에서 지정한 물리적 오프셋만큼 뒤의 행 값을 반환해요. 현재 행의 값을 그다음 행의 값과 비교할 때 유용해요.

출처: 문서

본문

LEAD 함수는 같은 결과 집합에서 지정한 물리적 오프셋만큼 뒤에 있는 행에서 값을 반환해요. 현재 행의 값을 이후 행의 값과 비교하는 데 쓸 수 있어요.

시그니처

LEAD(any expression [, bigint offset [, any default]]) [IGNORE NULLS | RESPECT NULLS] OVER (...)

인자

  • expression: 값을 반환할 컬럼 또는 계산.
  • offset: 현재 행 이후 몇 행 뒤에서 값을 가져올지. 지정하지 않으면 기본값은 1.
  • default: 오프셋이 윈도우 범위를 벗어날 때 반환할 값. 지정하지 않으면 NULL이 반환됨.

null 처리

Pinot이 오프셋을 셀 때 null 표현식 값을 건너뛰게 하려면 LEAD 호출 뒤에 IGNORE NULLS를 사용하세요. null 값을 포함해 세려면 RESPECT NULLS를 사용하는데, 이것이 기본 동작이에요.

IGNORE NULLS가 요청한 오프셋에서 뒤쪽 null이 아닌 값을 찾지 못하면 Pinot은 선택적인 default 값을 반환하고, default가 지정되지 않았으면 NULL을 반환해요.

SELECT
    sales_date,
    sales_amount,
    LEAD(sales_amount) IGNORE NULLS OVER (ORDER BY sales_date) AS next_non_null_sales
FROM daily_sales;

예시

현재 데이터를 기반으로 다음 날 매출을 예측해요.

다음 결제 금액을 예상해 예산을 계획해요.

비용이나 수익의 잠재적 증가를 식별해요.

현재 데이터를 기반으로 다음 날 매출을 예측하기 이 예시는 LEAD 함수로 다음 날 매출을 예상하는 방법을 보여줘요.

SELECT
    sales_date,
    sales_amount,
    LEAD(sales_amount, 1) OVER (ORDER BY sales_date) AS next_day_sales
FROM
    daily_sales;

출력:

sales_date sales_amount next_day_sales
2023-02-14 200 180
2023-02-15 180 220
2023-02-16 220 NULL

예산 계획을 위한 다음 결제 금액 예상 이 쿼리는 재무 예측과 예산 편성에 도움이 되도록 각 거래의 다음 결제 금액을 가져와요.

SELECT
    transaction_id,
    payment_date,
    amount,
    LEAD(amount, 1) OVER (ORDER BY payment_date) AS next_payment_amount
FROM
    payments;

출력:

transaction_id payment_date amount next_payment_amount
416 2023-02-14 21:21:59.996577 2.99 4.99
516 2023-02-14 21:23:39.996577 4.99 4.99
239 2023-02-14 21:29:00.996577 4.99 6.99

비용이나 수익의 잠재적 증가 식별 LEAD 함수로 월간 데이터를 조사해 향후 계획을 위한 비용·수익의 잠재적 증가나 추세를 예측해요.

SELECT
    month,
    year,
    expenses,
    LEAD(expenses, 1) OVER (ORDER BY year, month) AS next_month_expenses
FROM
    financials;

출력:

month year expenses next_month_expenses
1 2023 1000 1100
2 2023 1100 1200
3 2023 1200 NULL

CTE와 함께 사용:

WITH tmp AS (
  select count(*) as num_trips,
    DaysSinceEpoch
  from airlineStats
  GROUP BY DaysSinceEpoch
)

SELECT DaysSinceEpoch,
  num_trips,
  LEAD(num_trips, 2) OVER (
    ORDER BY DaysSinceEpoch
  ) AS previous_num_trips,
  num_trips - LEAD(num_trips, 2) OVER (
    ORDER BY DaysSinceEpoch
  ) AS difference
FROM tmp;

더 알아보기 (Learn more)