BigQuery에서 배열 데이터는 단일 필드 안에 여러 값을 포함할 수 있는 데이터 구조입니다. 이 배열을 그대로 두면 분석에 어려움이 있을 수 있으므로, 배열의 각 요소를 분리해 행(row) 형태로 변환해야 합니다. 이때 사용하는 함수가 바로 UNNEST
입니다.
UNNEST
를 사용하면 배열 데이터를 테이블처럼 다룰 수 있어 보다 효율적인 데이터 분석이 가능합니다.
📌 UNNEST
함수의 기본 사용 방법
문법
SELECT *
FROM table_name,
UNNEST(array_column) AS alias_name
주요 포인트
UNNEST(array_column)
으로 배열 데이터를 행 단위로 변환합니다.- 변환된 데이터를 다루기 위해 **별칭(alias)**을 지정합니다.
UNNEST
는FROM
절 또는SELECT
절 내에서 사용 가능합니다.
📌 실습 예제
1. 기본 사용 예제
다음과 같은 데이터를 가진 테이블 orders
가 있다고 가정합니다:
order_id | items |
---|---|
1 | [“item1”, “item2”, “item3”] |
2 | [“item4”, “item5”] |
3 | [“item6”] |
이 테이블에서 각 주문(order_id)별로 **아이템(items)**을 행 단위로 분리하고 싶다면 다음과 같이 쿼리를 작성합니다:
SELECT
order_id,
item
FROM
orders,
UNNEST(items) AS item
결과는 아래와 같습니다:
order_id | item |
---|---|
1 | item1 |
1 | item2 |
1 | item3 |
2 | item4 |
2 | item5 |
3 | item6 |
2. UNNEST
와 다른 컬럼 조합
만약 다른 컬럼과 조합해 추가 정보를 출력하고 싶다면, 배열에서 풀린 각 요소에 다른 컬럼을 그대로 연결할 수 있습니다:
SELECT
order_id,
item,
CURRENT_DATE() AS query_date
FROM
orders,
UNNEST(items) AS item
📌 응용: 배열 데이터와 JOIN
UNNEST
를 사용해 배열 데이터를 풀어낸 후, 다른 테이블과 조인(JOIN)하여 상세 정보를 조회할 수도 있습니다.
예를 들어, orders
테이블의 아이템 ID를 products
테이블과 연결하여 각 아이템의 이름을 가져오는 경우:
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
📌 주의사항
- 배열 데이터가 비어있는 경우:
UNNEST
는 빈 배열을 무시하므로, 행이 생성되지 않습니다. 이를 방지하려면ARRAY_LENGTH
를 활용한 필터링을 고려하세요. - 중첩된
UNNEST
: 배열이 중첩된 경우(배열 안에 배열)에는 여러 번의UNNEST
를 사용해야 할 수 있습니다.
BigQuery의 UNNEST
함수는 데이터를 효율적으로 풀어내고 분석할 수 있는 강력한 도구입니다. 이 포스팅으로 배열 데이터를 다루는 법을 확실히 이해하고 실무에 활용해 보세요! 🚀
답글 남기기