개요
Trino를 사용해서 s3, csv 등 여러 데이터 소스에 위치한 데이터에 접근하여 사용 중이다. 그런데 최근 서로 다른 데이터 소스, 즉 카탈로그에 위치한 테이블을 한꺼번에 조회해야 하는 일이 발생했다.
과연 하나의 세션에서 서로 다른 카탈로그로 연결된 데이터를 한 쿼리에 조회할 수 있는지 확인해보자.
방법
두괄식으로 결론 먼저 내리면 가능하다.
trino는 테이블을 지정할 때 다음과 같이 카탈로그에서부터의 경로를 지정할 수 있다.
SELECT *
FROM <CATALOG>.<SCHEMA>.<TABLE_NAME>;
때문에 카탈로그에서부터의 테이블 위치를 직접 지정하여 조인할 수 있다.
SELECT *
FROM <CATALOG>.<SCHEMA>.<TABLE_NAME>
JOIN <CATALOG>.<SCHEMA>.<TABLE_NAME>
;
예시
예시로 다음과 같은 두 개 테이블이 있다고 하자.
- pa_send
이 테이블을 opsrepo라는 카탈로그에서 info 스키마에 위치한다.
select country, preventive_alert
from opsrepo.info.pa_send
- diagnosis
select diagnosis_date
, preventive_alert
, count(1) AS CNT
from nocompress.s3.diagnosis
두 테이블 조인
하나의 세션에서 두 테이블에 동시에 접근하여 조인하면 다음과 같이 쿼리를 수행한다.
SELECT *
FROM (
select country, preventive_alert
from opsrepo.info.pa_send ) a
JOIN (
select diagnosis_date
, preventive_alert
, count(1) AS CNT
from nocompress.s3.diagnosis ) b
ON a.preventive_alert = b.preventive_alert
확인해보니 잘 결과가 나온 것을 볼 수 있다.