배열
같은 타입의 값이 여러 개 들어 있는 자료구조
중첩 가능하다.

event_params에 해당구조체
관련 있는 값들을 하나의 덩어리로 묶은 것
key-value 쌍을 하나의 묶음으로 다룬다.
중첩 가능하다.

event_params의 key, value에 해당기존 테이블(관계형 데이터베이스)의 구조
기존 테이블의 한계
실제로는 하나의 대상에 여러 값이 동시에 연결되는 경우가 많다.
예시
기존 테이블 구조라면, 행을 늘려서 동일한 데이터를 반복 저장하거나, 정규화로 테이블을 분리한 뒤 JOIN해야 한다.
이럴 경우, 다음과 같은 단점이 존재한다.
CROSS JOIN을 사용한다.SELECT
title,
unnested_genres
FROM
advanced.array_exercises
CROSS JOIN
UNNEST(genres) AS unnested_genres

SELECT
title,
actor
FROM
advanced.array_exercises
CROSS JOIN
UNNEST(actors.actor) AS actor
Cannot access field actor on a value with type ARRAY<STRUCT<actor STRING, character STRING>> at [7:17]
ARRAY<STRUCT<...>> 구조에서 배열을 먼저 UNNEST 하지 않고, 내부 필드(actors.actor)에 바로 접근하려 해서 오류가 발생했다.
actors는 배열이고, actor, character는 배열 원소의 필드(STRUCT)이다.
수정 후 코드
SELECT
title,
a.actor,
a.character
FROM
advanced.array_exercises
CROSS JOIN
UNNEST(actors) AS a
SQL에서도 자료구조가 존재한다는 걸 오늘 처음 알았다. 하나의 이벤트에 여러 속성이 존재하는 로그 데이터 특성을 고려했을 때, 로그 데이터 분석에 많이 쓰이는 이유를 알 거 같다. 다만 아직 문법이 익숙하지 않아 꾸준히 연습해야 할 거 같다.