데이터 유형 - 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

+ Recent posts