Trino

[Trino] 서로 다른 카탈로그 내 테이블 쿼리하기

비번변경 2024. 12. 31. 14:10

개요

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

확인해보니 잘 결과가 나온 것을 볼 수 있다.