Skip to content

데이터분대석

data analyst

BigQuery에서 배열 다루기: 실무 활용법

Written on 2025년 04월 28일 by seonice90

Categories: Bigquery 함수, BigQuery 환경 이해

Tags: , , , ,

1. 왜 BigQuery에서 배열을 다루는가?

BigQuery에서는 종종 **중첩된 구조(Nested Structure)**의 데이터를 다룰 때가 많습니다. 예를 들어:

  • GA4, AppsFlyer, CRM 이벤트 로그: 한 사용자 이벤트에 여러 속성(파라미터)이 배열로 담깁니다.
  • 제품 주문 정보: 한 주문에 여러 상품이 포함될 수 있습니다.
  • 설문조사 데이터: 한 응답자가 여러 선택지를 고를 수 있습니다.

이처럼 반정규화된 형태의 데이터를 효율적으로 처리하기 위해 배열을 사용합니다.


2. 배열 관련 주요 함수

함수명설명
ARRAY()배열 생성
UNNEST()배열을 테이블 형태로 펼침 (필수!)
ARRAY_LENGTH()배열의 길이 반환
ARRAY_AGG()그룹 내 값을 배열로 집계
ARRAY_TO_STRING()배열을 문자열로 변환
SAFE_OFFSET()배열 인덱스로 값 접근 (NULL-safe)
SAFE_ORDINAL()배열 순서로 값 접근 (1부터 시작, NULL-safe)
GENERATE_ARRAY()숫자 범위 배열 생성

3. 예시 데이터 생성

WITH orders AS (
  SELECT 1 AS order_id, ['Apple', 'Banana', 'Cherry'] AS products UNION ALL
  SELECT 2 AS order_id, ['Durian'] AS products UNION ALL
  SELECT 3 AS order_id, ['Elderberry', 'Fig'] AS products
)
  • order_id: 주문 번호
  • products: 주문된 상품들의 배열

4. 실전 예제 쿼리

4-1. 배열을 펼쳐서 각 상품별로 조회하기

WITH orders AS (
  SELECT 1 AS order_id, ['Apple', 'Banana', 'Cherry'] AS products UNION ALL
  SELECT 2 AS order_id, ['Durian'] AS products UNION ALL
  SELECT 3 AS order_id, ['Elderberry', 'Fig'] AS products
)
SELECT
  order_id,
  product
FROM
  orders,
  UNNEST(products) AS product

결과:

order_idproduct
1Apple
1Banana
1Cherry
2Durian
3Elderberry
3Fig

4-2. 배열의 길이 구하기

WITH orders AS (
  SELECT 1 AS order_id, ['Apple', 'Banana', 'Cherry'] AS products UNION ALL
  SELECT 2 AS order_id, ['Durian'] AS products UNION ALL
  SELECT 3 AS order_id, ['Elderberry', 'Fig'] AS products
)
SELECT
  order_id,
  ARRAY_LENGTH(products) AS product_count
FROM
  orders

결과:

order_idproduct_count
13
21
32

4-3. 특정 인덱스 값 조회하기 (첫 번째 상품)

WITH orders AS (
  SELECT 1 AS order_id, ['Apple', 'Banana', 'Cherry'] AS products UNION ALL
  SELECT 2 AS order_id, ['Durian'] AS products UNION ALL
  SELECT 3 AS order_id, ['Elderberry', 'Fig'] AS products
)
SELECT
  order_id,
  SAFE_OFFSET(products, 0) AS first_product
FROM
  orders

결과:

order_idfirst_product
1Apple
2Durian
3Elderberry

5. 실무에서의 활용 시나리오

시나리오 1: GA4 이벤트 파라미터 분석

  • 상황: GA4 이벤트 로그에는 event_params라는 배열이 있어 각 이벤트별로 다양한 파라미터가 담겨 있음.
  • 목표: 특정 이벤트에서 ‘page_location’ 파라미터 값을 가져오고 싶을 때 UNNEST()WHERE을 조합하여 활용.
SELECT
  event_name,
  param.value.string_value AS page_location
FROM
  `my_project.my_dataset.events_*`,
  UNNEST(event_params) AS param
WHERE
  event_name = 'page_view'
  AND param.key = 'page_location'

시나리오 2: 주문 데이터에서 인기 상품 집계

  • 상황: 한 주문에 여러 상품이 포함되어 있는 경우.
  • 목표: 모든 주문에서 가장 많이 팔린 상품을 집계.
WITH orders AS (
  SELECT 1 AS order_id, ['Apple', 'Banana', 'Cherry'] AS products UNION ALL
  SELECT 2 AS order_id, ['Durian'] AS products UNION ALL
  SELECT 3 AS order_id, ['Apple', 'Fig'] AS products
)
SELECT
  product,
  COUNT(*) AS sales_count
FROM
  orders,
  UNNEST(products) AS product
GROUP BY
  product
ORDER BY
  sales_count DESC

결과:

productsales_count
Apple2
Banana1
Cherry1
Durian1
Fig1

6. Focus keyphrase, slug, meta description

  • Focus keyphrase: BigQuery 배열 함수 사용법
  • slug: bigquery-array-functions
  • meta description: BigQuery에서 배열을 다루는 이유와 주요 함수 사용법을 실무 예제와 함께 상세히 설명합니다. GA4 이벤트 분석, 주문 데이터 집계 등 실제 업무에 바로 적용할 수 있는 쿼리 예제 포함.


답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Powered by WordPress