cross join unnest 쉬운 예제 / 나열된 데이터 1개를 전체 행으로 나타내기
Data Analyst

빅데이터 관련 자료/[SQL] Basic

cross join unnest 쉬운 예제 / 나열된 데이터 1개를 전체 행으로 나타내기

carpe08 2024. 1. 14. 18:22
320x100
320x100

AWS Athena 에서 

아래와 같이 콤마(Comma)로 구분되어 한 행에 3개의 데이터가 나열되어 있다고 가정하자.

fruit
사과, 수박, 참외

한 행에 있는 데이터를 아래와 같이 3개의 행으로 나타내고 싶은 경우 어떻게 하면 될까?

fruit
사과
수박
참외

 

Cross JOIN : 카티션 곱(CARTESIAN PRODUCT)

한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인시키는 기능입니다.

상호 조인 결과의 전체 행 개수는 두 테이블의 각 행 의 개수를 곱한 수만큼 됩니다.

 

우선 아래와 같이 split 함수를 쓰게 되면 

WITH t AS (
    SELECT '사과,수박,참외' AS fruit
)
SELECT split(t.fruit, ',')

Array 형식으로 결과값이 나온다.

[사과, 수박, 참외]

 

 

끝으로 cross Join unnest 를 사용하게 되어 아래와 같은 최종 코드로 마무리 한다.

WITH t AS (
    SELECT '사과,수박,참외' AS fruit
)
SELECT value
FROM t
CROSS JOIN UNNEST(split(t.fruit, ',')) as x(value)

결과값

320x100
320x100