imhamburger 님의 블로그

빅쿼리(Bigquery) - APPROX_QUANTILES 본문

빅쿼리(Bigquery)

빅쿼리(Bigquery) - APPROX_QUANTILES

imhamburger 2025. 4. 3. 22:07

APPROX_QUANTILES는 BigQuery에서 분위수를 계산하는 함수로, 대량의 데이터를 효율적으로 처리하기 위해 근사치를 반환한다.

 

 

사용법

APPROX_QUANTILES(expression, number_of_quantiles)

 

  • expression: 분위수를 계산할 숫자 열(예: 가격, 매출액 등)
  • number_of_quantiles: 원하는 분위수 개수 (예: 5이면 0%, 25%, 50%, 75%, 100% 분위수 반환)

 

예시

 

 1. 매출의 분위수 계산

SELECT 
  APPROX_QUANTILES(sales, 5) AS quantiles
FROM sales_data;

 

  • sales 열의 5개 분위수(0%, 25%, 50%, 75%, 100%)를 반환

 

2. 분위수별 매출 값 개별 출력

SELECT 
  quantiles[OFFSET(0)] AS min_value,        -- 최솟값 (0% 분위수)
  quantiles[OFFSET(1)] AS first_quartile,   -- Q1 (25% 분위수)
  quantiles[OFFSET(2)] AS median,           -- Q2 (50% 분위수, 중앙값)
  quantiles[OFFSET(3)] AS third_quartile,   -- Q3 (75% 분위수)
  quantiles[OFFSET(4)] AS max_value         -- 최댓값 (100% 분위수)
FROM (
  SELECT APPROX_QUANTILES(sales, 5) AS quantiles
  FROM sales_data
);
  • OFFSET(n)을 사용해 특정 분위수 값을 가져올 수 있음

 

특징

  • 근사값 반환 → 정확한 분위수가 아닌 대략적인 값이지만 속도가 빠름
  • 대량 데이터 처리에 적합 → 메모리 사용을 줄이면서 분위수를 구할 수 있음
  • 정확한 분위수가 필요하면 PERCENTILE_CONT 사용

BigQuery에서 APPROX_QUANTILES 함수는 분위수(quantiles)를 배열 형태로 반환한다.


예를 들어, APPROX_QUANTILES(sales, 5)를 실행하면 [최솟값, Q1, Q2(중앙값), Q3, 최댓값] 이런 식의 배열이 나온다.

각 값은 배열의 인덱스 로 접근할 수 있는데, BigQuery에서 OFFSET(index) 를 사용해서 가져와야 한다.
(파이썬처럼 quantiles[1] 이렇게 못 씀)

 

 

이번에 유저별 평균 체류시간을 구한 후, 전체 평균값과 중앙값을 계산할 때 처음으로 APPROX_QUANTILES 을 썼는데 최솟값, 최대값을 구할 때도 잘 써먹을 수 있을 것 같다.