BigQuery의 UNNEST 함수란?

BigQuery에서 배열 데이터는 단일 필드 안에 여러 값을 포함할 수 있는 데이터 구조입니다. 이 배열을 그대로 두면 분석에 어려움이 있을 수 있으므로, 배열의 각 요소를 분리해 행(row) 형태로 변환해야 합니다. 이때 사용하는 함수가 바로 UNNEST 입니다.

UNNEST를 사용하면 배열 데이터를 테이블처럼 다룰 수 있어 보다 효율적인 데이터 분석이 가능합니다.


📌 UNNEST 함수의 기본 사용 방법

문법

SELECT *
FROM table_name,
UNNEST(array_column) AS alias_name

주요 포인트

  1. UNNEST(array_column)으로 배열 데이터를 행 단위로 변환합니다.
  2. 변환된 데이터를 다루기 위해 **별칭(alias)**을 지정합니다.
  3. UNNESTFROM 절 또는 SELECT 절 내에서 사용 가능합니다.

📌 실습 예제

1. 기본 사용 예제

다음과 같은 데이터를 가진 테이블 orders가 있다고 가정합니다:

order_iditems
1[“item1”, “item2”, “item3”]
2[“item4”, “item5”]
3[“item6”]

이 테이블에서 각 주문(order_id)별로 **아이템(items)**을 행 단위로 분리하고 싶다면 다음과 같이 쿼리를 작성합니다:

SELECT 
  order_id,
  item
FROM 
  orders,
  UNNEST(items) AS item

결과는 아래와 같습니다:

order_iditem
1item1
1item2
1item3
2item4
2item5
3item6

2. UNNEST와 다른 컬럼 조합

만약 다른 컬럼과 조합해 추가 정보를 출력하고 싶다면, 배열에서 풀린 각 요소에 다른 컬럼을 그대로 연결할 수 있습니다:

SELECT
  order_id,
  item,
  CURRENT_DATE() AS query_date
FROM
  orders,
  UNNEST(items) AS item

📌 응용: 배열 데이터와 JOIN

UNNEST를 사용해 배열 데이터를 풀어낸 후, 다른 테이블과 조인(JOIN)하여 상세 정보를 조회할 수도 있습니다.

예를 들어, orders 테이블의 아이템 IDproducts 테이블과 연결하여 각 아이템의 이름을 가져오는 경우:

SELECT
  o.order_id,
  p.product_name
FROM
  orders AS o,
  UNNEST(o.items) AS item_id
JOIN
  products AS p
ON
  item_id = p.product_id

📌 주의사항

  1. 배열 데이터가 비어있는 경우: UNNEST는 빈 배열을 무시하므로, 행이 생성되지 않습니다. 이를 방지하려면 ARRAY_LENGTH를 활용한 필터링을 고려하세요.
  2. 중첩된 UNNEST: 배열이 중첩된 경우(배열 안에 배열)에는 여러 번의 UNNEST를 사용해야 할 수 있습니다.

BigQuery의 UNNEST 함수는 데이터를 효율적으로 풀어내고 분석할 수 있는 강력한 도구입니다. 이 포스팅으로 배열 데이터를 다루는 법을 확실히 이해하고 실무에 활용해 보세요! 🚀


게시됨

카테고리

작성자

댓글

답글 남기기

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