반응형
AWS Athena에서 데이터를 보다보면 column의 type이 구매 array<struct<상품명:string,단계:string>> 이런식으로 되어 있는 경우가 있는데 이것은 한개의 컬럼에 여러 데이터가 중첩되어 있는 구조입니다. 간단한 생각해보면 아래 표와 같이 구매 컬럼 하나에 상품명과 단계가 같이 묶어서 저장되어 있는 형태라고 생각하면 이해가 편할 것 같습니다.
user_id | 구매 | |
상품명 | 단계 | |
A | 가방 | 구매완료 |
상의 | 장바구니 | |
B | 상의 | 구매완료 |
하의 | 장바구니 |
이런 구조에서 단계나 상품명 기준으로 user_id를 count를 하려면 중첩된 데이터를 행단위로 펼쳐줘야 하는데 이렇게 하는 방법은 크게 2가지 정도가 있는 것 같습니다.
-- CROSS JOIN을 사용하는 방법
SELECT product.상품명, product.상태, COUNT(*) FROM tmp
CROSS JOIN UNNEST(구매) AS t(product)
GROUP BY 1,2
-- FROM 에 UNNEST(ARRAY Column을 넣는 방법)
SELECT product.상품명, product.상태, COUNT(*) FROM tmp, UNNEST(구매) AS t(product)
GROUP BY 1,2
현재로써는 두개의 차이점은 잘 모르는 부분이라 추후에 검색이나 스스로 알게되면 수정 업데이트 하려고 합니다.
반응형
'Study > SQL' 카테고리의 다른 글
[Athena(Presto)] String to Timestamp, Date 변경방법(UTC to KST 변경방법 포함) (0) | 2022.12.26 |
---|---|
[BigQuery] UTC를 KST로 변경하는 법(UTC to KST) (0) | 2022.04.23 |
댓글