데이터 유형 - Struct
- 구조체(딕셔너리) 형식의 컬럼
- 하나의 컬럼, 하나의 행 안에 다수 컬럼을 가지는 정보를 담을 수 있다.
# Struct 만드는 방법
SELECT (1, 2) AS struct_col
SELECT STRUCT(1, 2) AS struct_col
SELECT STRUCT<INT64, INT64>(1, 2) AS struct_col
SELECT STRUCT(1 AS col_1, 2 AS col_2) AS struct_col
SELECT STRUCT<col_1 INT64, col_2 INT64>(1, 2) AS struct_col
행 | struct_col.col_1 | struct_col.col_2 |
1 | 1 | 2 |
# Struct 데이터 조회 방법
WITH data AS (
SELECT
STRUCT<col_1 INT64, col_2 INT64>(1, 2) AS struct_col
)
SELECT
struct_col.col_1,
struct_col.col_2
FROM
data
데이터 유형 - Array
- 배열 형식의 컬럼
- 하나의 컬럼, 하나의 행 안에 다수 행을 가지는 정보를 담을 수 있다.
# Array 만드는 방법
SELECT [1, 2] AS array_col
SELECT ARRAY[1, 2] AS array_col
SELECT ARRAY<INT64>[1, 2] AS array_col
행 | array_col |
1 | 1 |
2 |
# Array 데이터 조회 방법 (컬럼으로 선택)
WITH data AS (
SELECT ARRAY<INT64>[1, 2] AS array_col
)
SELECT
array_col[offset(0)] AS col_1,
array_col[ordinal(2)] AS col_2
FROM
data
행 | col_1 | col_2 |
1 | 1 | 2 |
- 배열 내 접근
- 배열의 N번째 값을 가져오고 싶은 경우 OFFSET, ORDINAL을 사용할 수 있다
- OFFSET: 0부터 시작
- ORDINAL: 1부터 시작
- 존재하지 않는 N을 지정하면 에러가 발생하는데, 이럴 경우 SAFE_를 앞에 붙여주면 (SAFE_OFFSET, SAFE_ORDINAL) 에러가 발생하지 않고 NULL이 return된다
# Array 데이터 조회 방법 (행으로 나눠 선택)
WITH data AS (
SELECT
'a' AS string_col,
ARRAY<INT64>[1, 2] AS array_col
)
SELECT
string_col,
array_item
FROM
data,
UNNEST(array_col) AS array_item
행 | string_col | array_item |
1 | a | 1 |
2 | a | 2 |
실습 - Array 안에 Struct 가 들어간 경우
빅쿼리에서 중첩 필드를 볼 때마다 다음과 같은 방법으로 직접 쿼리를 해봐도 동작하지 않는다.
SELECT
items.item_id
FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_20210131`
WHERE
event_name = 'add_to_cart'
어떤 방식으로든 병합하거나 집계하지 않고는 중첩 필드에 액세스 할 수 없다.
SELECT
item_id
FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_20210131`
,unnest(items)
WHERE
event_name = 'add_to_cart'
--ARRAY_AGG는 임의의 값을 가져와서 배열로 변환한다. 즉, UNNEST와 반대로 사용할 수 있다--
SELECT
(select array_agg(item_id) from unnest(items)) item_id
FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_20210131`
WHERE
event_name = 'add_to_cart'
SELECT
date(timestamp_micros(event_timestamp)) date,
item.item_id,
item.item_name,
count(distinct user_pseudo_id) user_count
FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_20210131`,
unnest(items) as item
WHERE
event_name = 'add_to_cart'
GROUP BY 1, 2, 3
'gcp' 카테고리의 다른 글
BigQuery 데이터 사이언스 (0) | 2022.12.08 |
---|---|
BigQuery 추가 기능 (0) | 2022.12.07 |
BigQuery 스크립팅 (0) | 2022.12.07 |
BigQuery 테이블 (0) | 2022.12.07 |
BigQuery 집계 함수 (0) | 2022.12.06 |