Bigquery와 SQL 차이:unnest

데이터 분석가로 일하다 보면 BigQuery와 일반 SQL에서 데이터를 다룰 때 마주치는 주요 기능 중 하나가 중첩 배열이나 구조체를 처리하는 방법입니다. 이 글에서는 BigQuery의 UNNEST 함수와 일반 SQL에서 사용하는 LATERAL VIEW를 비교하며, 두 개념이 어떻게 동일한 작업을 수행하는지 알아보겠습니다.

1. BigQuery의 UNNEST

BigQuery는 스키마 설계에서 배열(Array)이나 구조체(Struct)를 지원합니다. 이때, 중첩된 데이터를 평평하게 펼치는 데 사용하는 함수가 바로 UNNEST입니다.

UNNEST 사용 예시

다음과 같은 중첩 배열을 가진 테이블이 있다고 가정해봅시다:

orders 테이블

user_iditems
1[“item1”, “item2”]
2[“item3”, “item4”, “item5”]

items는 배열 형태로 저장된 데이터입니다. 배열의 각 요소를 개별 행으로 변환하려면 UNNEST를 사용합니다:

SELECT
  user_id,
  item
FROM
  orders,
  UNNEST(items) AS item;

결과

user_iditem
1item1
1item2
2item3
2item4
2item5

UNNEST를 통해 각 배열 요소가 별도의 행으로 분리되었습니다.


2. 일반 SQL의 LATERAL VIEW

일반 SQL(특히 Hive와 같은 시스템)에서는 비슷한 작업을 수행하기 위해 LATERAL VIEW를 사용합니다. LATERAL VIEW는 테이블의 각 행에 대해 UDTF(User-Defined Table-Generating Function)를 적용해 데이터를 펼칠 수 있습니다.

LATERAL VIEW 사용 예시

Hive에서 동일한 데이터를 다음과 같이 처리한다고 가정합시다:

orders 테이블

user_iditems
1[“item1”, “item2”]
2[“item3”, “item4”, “item5”]

이 데이터를 LATERAL VIEW를 사용해 평평하게 펼치는 SQL은 다음과 같습니다:

SELECT
  user_id,
  item
FROM
  orders
LATERAL VIEW explode(items) AS item;

결과

user_iditem
1item1
1item2
2item3
2item4
2item5

여기서 explode 함수는 배열을 행으로 변환하는 역할을 하며, LATERAL VIEW는 각 행에 대해 이 변환을 적용합니다.


3. UNNEST와 LATERAL VIEW의 연결점

BigQuery의 UNNEST와 일반 SQL의 LATERAL VIEW는 모두 중첩된 배열 데이터를 평평하게 만드는 데 사용됩니다. 주요 차이점은 다음과 같습니다:

기능BigQuery (UNNEST)일반 SQL (LATERAL VIEW)
사용 함수UNNESTexplode
동작 방식직접 배열을 펼쳐 새로운 행 생성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는 구조는 다르지만 본질적으로 같은 목적을 가지고 있습니다. 여러분이 사용하는 데이터베이스 시스템에 따라 적합한 방식을 선택해 배열 데이터를 처리하면 됩니다. 둘 다 데이터 분석 과정에서 매우 유용하게 사용되니 익혀 두면 실무에서 큰 도움이 될 것입니다!


게시됨

카테고리

작성자

댓글

답글 남기기

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