본문 바로가기

카테고리 없음

cross join(trino에서 unnest와 함께 사용하기)

반응형

데이터를 분석하다보면 table이나 dataframe에서 join을 많이하게 된다.

보통은 inner을 제일 많이 사용하고 간혹 left나 right JOIN을 자주 사용한다.

그런데 최근에 cross join은 써본적이 없어서 간단하게 정리해본다.

 

cross join은 간단히 이야기 하면

양쪽 table을 서로 조합해서 모든 경우로 확장하는 것이다.

수학적으로는 곱집합(product set, cartesian product 등)이라고 한다.



chatgpt에게 cross join 예시를 들어 달라고한 결과

 

나는 개인적으로 많이 사용하는게 trino에서 특정 colum을 explode할 떄 많이 사용한다.

array나 map으로 되어있는 column을 explode하는데 유용하다.

 

 

 

row 수를 줄이기 위해 간혹 하나의 column에 많은 데이터를 가지고 있는 경우 다음과 같이 explode해서 쓸 수 있다.

 

분산환경에서 수행하는 경우

위와 같은 케이스는 row 내부에서 cross join을 사용하면 같은 노드안에서 처리되니 이슈가 없겠지만

만약 서로 다른 row나 table끼리 cross join을 하는 경우 다른 node의 데이터끼리 cross join을 하게 되고 spark로 치면 shuffle이 꽤 많이 일어날 것이다...

한쪽 테이블이 작다면 broadcast로 처리해서 join하면 적절할 듯

 

+) 여담

이 글을 쓰다가 inner join을 할 때 join 조건을 설정하지 않으면 어떻게 될지 궁금해서 해봤는데

cross join이 수행된다. 별로 쓸모없는 이야기지만ㅋㅋㅋ당연하게 조건을 넣어서 고려해본적이 없었다.

 

아래 사이트에서 한 번 수행해보자

https://www.programiz.com/sql/online-compiler/

 

Online SQL Editor

 

www.programiz.com

SELECT *
FROM Customers
INNER JOIN Orders

 

반응형