Skip to main content
merge 테이블 함수를 사용하면 여러 테이블을 병렬로 쿼리할 수 있습니다. 이 함수는 임시 Merge 테이블을 생성한 다음, 각 테이블의 컬럼을 합치고 공통 타입을 추론하여 이 테이블의 구조를 결정합니다.

테이블 설정

Jeff Sackmann’s tennis dataset을 활용해 이 함수를 사용하는 방법을 살펴보겠습니다. 1960년대까지 거슬러 올라가는 경기 데이터가 담긴 CSV 파일을 처리하되, 각 10년 단위로 스키마를 조금씩 다르게 만들겠습니다. 또한 1990년대 데이터에는 추가 컬럼 몇 개를 더하겠습니다. 가져오기 SQL 문은 아래와 같습니다:

여러 테이블의 스키마

다음 쿼리를 실행하면 각 테이블의 컬럼과 타입을 나란히 표시할 수 있어 차이점을 더 쉽게 확인할 수 있습니다.
차이점을 살펴보겠습니다:
  • 1970년대 데이터에서는 winner_seed의 유형이 Nullable(String)에서 Nullable(UInt8)로, score는 String에서 Array(String)로 변경됩니다.
  • 1980년대 데이터에서는 winner_seed와 loser_seed가 Nullable(UInt8)에서 Nullable(UInt16)로 변경됩니다.
  • 1990년대 데이터에서는 surface가 String에서 Enum('Hard', 'Grass', 'Clay', 'Carpet')로 변경되고, walkover와 retirement 컬럼이 추가됩니다.

merge를 사용해 여러 테이블 쿼리하기

John McEnroe가 1번 시드를 받은 선수를 상대로 이긴 경기를 찾는 쿼리를 작성해 보겠습니다:
다음으로, McEnroe가 3번 시드 이하였던 경기만 찾도록 해당 일치 항목을 필터링해 보겠습니다. 여러 테이블에서 winner_seed에 사용하는 타입이 서로 다르기 때문에 조금 더 까다롭습니다:
각 행에서 winner_seed의 유형을 확인하기 위해 variantType 함수를 사용한 다음, 실제 값을 추출하기 위해 variantElement 함수를 사용합니다. 유형이 String이면 숫자로 CAST한 다음 비교합니다. 쿼리 실행 결과는 아래와 같습니다.

merge를 사용할 때 행은 어느 테이블에서 가져옵니까?

행이 어느 테이블에서 가져오는지 확인하려면 어떻게 해야 할까요? 다음 쿼리와 같이 _table 가상 컬럼을 사용하면 됩니다:
또한 이 가상 컬럼을 쿼리의 일부로 사용하여 walkover 컬럼 값의 개수를 셀 수 있습니다:
walkover 컬럼은 atp_matches_1990s를 제외한 모든 항목에서 NULL인 것을 확인할 수 있습니다. walkover 컬럼이 NULL인 경우 score 컬럼에 문자열 W/O가 들어 있는지 확인하도록 쿼리를 수정해야 합니다:
score의 기본 유형이 Array(String)이면 배열을 순회하며 W/O를 찾아야 하고, 유형이 String이면 문자열에서 W/O를 바로 찾으면 됩니다.
마지막 수정일 2026년 6월 10일