빅쿼리에는 Array (배열) 와 Struct (구조체) 라는 개념이 있다.
이 Array 와 Struct 가 생소하게 느껴질 수 있다.
일반적으로 쿼리문의 결과는 아래 그림과 같은 행(row)과 열(column)로 이루어진 테이블(table) 형태의 결과를 갖는다.
GA4와 연결된 BigQuery 창에서 간단하게 쿼리를 해보면 쉽게 array와 struct 를 볼 수 있는데, 아래 그림과 같다.
- Array 는 위 그림에서 key에 해당되는데 하나의 셀(특정 행,열 위치)에 여러개의 값이 다시 row 처럼 배열로 들어가 있는 형태이다.
- Struct 는 key 옆에 value 라는 컬럼인데 value.string_value, value.int_value, value.float_value, value.double_value 이렇게 특정 커럼 밑에 여러개의 컬럼이 묶여 있는 형태이다.
위 그림에서 보자면 event_name 이라는 컬럼과
그 옆에 event_params 라는 컬럼이 보이는데, 이 event_params 라는 컬럼은 key 와 value 라는 두 컬럼의 Struct 로 구성되어 있다.
그리고 key는 array 형태이며, value 는 또 string_value, int_value, float_value, double_value 이렇게 4개 컬럼의 Struct 로 구성되어 있음을 알 수 있다.
정말 복잡한 형태이다.
event_params 라는 하나의 셀에 하나의 테이블이 또 들어가 있는 모습이다.
이렇게 복잡한 구조로 만든 이유는 비정형적인 데이터를 쉽게 저장할 수 있으며, 빠른 처리 속도를 낼 수 있기 때문이라고 한다.
이런 구조에서 원하는 데이터를 쿼리하는 방법은 배열을 다시 일반 테이블의 형태로 만드는...
즉, 배열이라는 곳에 갖힌 (nest) 데이터를 unnest 하는 과정이 필요하다.
이때 unnest 라는 함수를 사용한다.
아래의 쿼리문장은 특정 한 행(row)의 데이터를 unnest 를 이용하여 펼친 모습이다.
select b.key, b.value, a.*
from analytics_308890446.events_20220624 as a
cross join unnest(a.event_params) as b
where event_timestamp = 1656082473326084 and event_name = 'first_visit'
unnest의 내용을 처음 보시는 분들은 무슨 내용인지 헷갈릴 수 있는데, 아래의 그림이 설명이 도움이 될 수 있을것같다.
다음 시간에는 array를 다양하게 쿼리하는 방법에 대해서 얘기해보도록 할 예정이다.
https://walkingfox.tistory.com/170
'분석 > 데이터분석' 카테고리의 다른 글
곱의 평균 (기하평균) (0) | 2022.07.22 |
---|---|
[BigQuery] 다양한 쿼리 예제 (0) | 2022.06.26 |
[BigQuery] unixtime 을 timestamp 로 변환 (0) | 2022.06.25 |
[SQL] 데이터 UN-PIVOT 하기 (presto, athena) (0) | 2022.06.09 |
[SQL] 데이터 PIVOT 하기 (presto, athena) (0) | 2022.06.09 |