데이터 분석가로 일하다 보면 BigQuery와 일반 SQL에서 데이터를 다룰 때 마주치는 주요 기능 중 하나가 중첩 배열이나 구조체를 처리하는 방법입니다. 이 글에서는 BigQuery의 UNNEST
함수와 일반 SQL에서 사용하는 LATERAL VIEW
를 비교하며, 두 개념이 어떻게 동일한 작업을 수행하는지 알아보겠습니다.
1. BigQuery의 UNNEST
BigQuery는 스키마 설계에서 배열(Array)이나 구조체(Struct)를 지원합니다. 이때, 중첩된 데이터를 평평하게 펼치는 데 사용하는 함수가 바로 UNNEST
입니다.
UNNEST 사용 예시
다음과 같은 중첩 배열을 가진 테이블이 있다고 가정해봅시다:
orders 테이블
user_id | items |
---|---|
1 | [“item1”, “item2”] |
2 | [“item3”, “item4”, “item5”] |
items
는 배열 형태로 저장된 데이터입니다. 배열의 각 요소를 개별 행으로 변환하려면 UNNEST
를 사용합니다:
SELECT
user_id,
item
FROM
orders,
UNNEST(items) AS item;
결과
user_id | item |
1 | item1 |
1 | item2 |
2 | item3 |
2 | item4 |
2 | item5 |
UNNEST
를 통해 각 배열 요소가 별도의 행으로 분리되었습니다.
2. 일반 SQL의 LATERAL VIEW
일반 SQL(특히 Hive와 같은 시스템)에서는 비슷한 작업을 수행하기 위해 LATERAL VIEW
를 사용합니다. LATERAL VIEW
는 테이블의 각 행에 대해 UDTF(User-Defined Table-Generating Function)를 적용해 데이터를 펼칠 수 있습니다.
LATERAL VIEW 사용 예시
Hive에서 동일한 데이터를 다음과 같이 처리한다고 가정합시다:
orders 테이블
user_id | items |
1 | [“item1”, “item2”] |
2 | [“item3”, “item4”, “item5”] |
이 데이터를 LATERAL VIEW
를 사용해 평평하게 펼치는 SQL은 다음과 같습니다:
SELECT
user_id,
item
FROM
orders
LATERAL VIEW explode(items) AS item;
결과
user_id | item |
1 | item1 |
1 | item2 |
2 | item3 |
2 | item4 |
2 | item5 |
여기서 explode
함수는 배열을 행으로 변환하는 역할을 하며, LATERAL VIEW
는 각 행에 대해 이 변환을 적용합니다.
3. UNNEST와 LATERAL VIEW의 연결점
BigQuery의 UNNEST
와 일반 SQL의 LATERAL VIEW
는 모두 중첩된 배열 데이터를 평평하게 만드는 데 사용됩니다. 주요 차이점은 다음과 같습니다:
기능 | BigQuery (UNNEST) | 일반 SQL (LATERAL VIEW) |
사용 함수 | UNNEST | explode |
동작 방식 | 직접 배열을 펼쳐 새로운 행 생성 | UDTF와 함께 행을 생성 |
추가 키워드 | 없음 | LATERAL VIEW 키워드 필요 |
4. 동일한 작업 구현
다음은 동일한 데이터를 BigQuery와 일반 SQL에서 각각 처리하는 방식의 비교입니다:
BigQuery
SELECT
user_id,
item
FROM
orders,
UNNEST(items) AS item;
일반 SQL (Hive)
SELECT
user_id,
item
FROM
orders
LATERAL VIEW explode(items) AS item;
결과는 동일하게 각 배열 요소가 개별 행으로 변환됩니다.
5. 마무리
BigQuery의 UNNEST
와 일반 SQL의 LATERAL VIEW
는 구조는 다르지만 본질적으로 같은 목적을 가지고 있습니다. 여러분이 사용하는 데이터베이스 시스템에 따라 적합한 방식을 선택해 배열 데이터를 처리하면 됩니다. 둘 다 데이터 분석 과정에서 매우 유용하게 사용되니 익혀 두면 실무에서 큰 도움이 될 것입니다!
답글 남기기