본문 바로가기

Study/SQL

[TIL]계속 헷갈리는 Array와 Struct(feat.BigQuery)

목차
1. ARRAY
2. STRUCT
3. ARRAY와 STRUCT 관계
4. UNNEST

1. ARRAY

✅Array(배열)

  • 자료형 중 하나
  • 같은 타입의 여러 값을 하나의 컬럼에 저장할 수 있는 자료형
  • [1, 3, 5, 6]
  • 저장 용량 효율적

 

✅생성하기

  • [] 사용
  • ARRAY<자료형>[데이터]
  • 배열 생성 함수
  • ARRAY_AGG 함수 : 여러 결과를 마지막에 배열로 저장하고 싶은 경우

 

✅ARRAY(배열)의 데이터 접근하기

  • SAFE_OFFSET/OFFSET : 0부터 시작
  • ORDINAL : 1부터 시작
  • 단, 배열의 길이보다 큰 값 지정하면 오류 발생 : 방지위해 'SAFE_' 항상 추가 

2. STRUCT

✅STRUCT(구조체)

  • 자료형 중 하나
  • 서로 다른 타입의 여러 값을 하나의 컬럼에 저장할 수 있는 자료형
=> Array는 파이썬의 list 형태, STRUCT는 파이썬의 dict 형태
=> Array는 메뉴판의 메뉴명들, STRUCT는 주소록(이름, 전화번호, 이메일 주소 등 자료형이 모두 다름)

✅생성하기

  • () 사용
  • STRUCT<자료형>(데이터)

 

✅STRUCT 접근하기

  • STRUCT의 이름.key

3. ARRAY, STRUCT 관계

  • ARRAY 안에 STRUCT가 저장되고 STRUCT 안에 ARRAY가 저장될 수 있음(2*2 -> 4가지 경우 모두 가능)
  • 유연하게 데이터를 저장할 수 있음(중첩 구조)

4. UNNEST

✅UNNEST를 사용해 중첩된 데이터 구조 풀기(평면화, Flatten)

  • 배열을 직접적으로 접근해 사용하는 것보다, 독립적인 행으로 풀어서(평면화) 사용
  • ARRAY의 요소를 독립적인 행으로 펼칠 때 UNNEST 사용
  • 장바구니(배열)에 있는 과일(배열 값)을 모두 다 꺼내는 것 = UNNEST
 SELECT 
    col1, unnset_col2, col3
  FROM example_data
    CROSS JOIN UNNEST(col2) AS unnset_col2

 

👉참고링크

https://zzsza.github.io/gcp/2020/04/12/bigquery-unnest-array-struct/

 

BigQuery UNNEST, ARRAY, STRUCT 사용 방법

BigQuery Unnest, Array, Struct 사용 방법에 대해 작성한 글입니다 목차 들어가며 BigQuery ARRAY BigQuery STRUCT BigQuery UNNEST 응용 정리

zzsza.github.io

https://datarian.io/blog/flattening-data-with-google-bigquery-unnest

 

Google BigQuery (2) UNNEST의 필요성과 사용법

Google BigQuery는 왜 이렇게 특이한 문법을 요구하는 데이터를 만들었을까요.

datarian.io