데이터 처리/SQL

[빅쿼리(BigQuery)] STRUCT, ARRAY 그리고 UNNEST 함수

yourhm 2025. 9. 22. 17:34

STRUCT

방법 1. 소괄호만 이용하여 작성하기

단, 소괄호만 쓸 때는 세부 필드명을 지정할 수 없다. 필드명을 지정하려면 아래에 있는 방법 2 처럼 STRUCT를 꼭 붙이자.

-- 가능
SELECT ('bread', 100) AS pid_1 
     , ('fruit', 50) AS pid_2
     
-- 불가능
-- SELECT ('bread' AS category, 100 AS price) AS pid_1 
--      , ('fruit' AS category, 50 AS price) AS pid_2

 

방법 2. STRUCT 이용하여 작성하기

2-1. AS로 '세부 필드명'만 지정하기

SELECT STRUCT('bread' AS category, 100 AS price) AS pid_1 
     , STRUCT('fruit' AS category, 50 AS price) AS pid_2
     , STRUCT('furniture' AS category, 700 AS price) AS pid_3

 

 

 

2-2. <> 안에 '타입'과 '세부 필드명' 모두 지정하기

SELECT STRUCT<category STRING, price INT64>('bread', 100) AS pid_1
     , STRUCT<category STRING, price INT64>('fruit', 50) AS pid_2
     , STRUCT<category STRING, price INT64>('furniture', 700) AS pid_3

 

 

 

ARRAY

방법 1. 대괄호만 이용하여 작성하기

SELECT ['pencil', 'eraser', 'sticker'] AS school_supplies

 

 

ARRAY 안에 STRUCT 넣기 (STRUCT in ARRAY)

SELECT [STRUCT('bread' AS column_name, 100 AS price)
         , ('fruit', 50)
         , ('furniture', 700)
       ] AS product

 

 

UNNEST로 ARRAY 분리하기

- 기본적으로 UNNEST는 배열을 “테이블”로 바꾸는 연산자이므로 FROM 절에서 사용할 수 있다. 

- 주로 FROM의 JOIN(특히 CROSS/LEFT/INNER)과 함께 쓰는 형태가 많이 사용된다.

- 따라서 SELECT 구문에서 바로 사용할 수는 없다.

- 단, UNNEST를 WHERE + IN 연산자와 함께 사용할 수 있는데, 예외적으로 FROM 밖에서 쓸 수 있는 경우다.

 

 

위에서 만든 STRUCT in ARRAY 쿼리를 UNNEST 로 한 행씩 분리해보자.

SELECT *
FROM UNNEST([STRUCT('bread' AS column_name, 100 AS price)
         , ('fruit', 50)
         , ('furniture', 700)
       ])