본문으로 건너뛰기
최종 수정: 에

Lookup Join

Lookup Join은 Flink에서 디멘션 테이블 조인의 성능을 최적화할 수 있습니다. Flink JDBC Connector를 사용해 디멘션 테이블을 조인하면 다음과 같은 문제가 발생할 수 있습니다:

  • Flink JDBC Connector는 동기 쿼리 모드를 사용합니다. 업스트림 데이터(예: Kafka)에서 레코드가 전송될 때마다 Doris 디멘션 테이블을 즉시 쿼리하므로, 동시성이 높은 환경에서는 쿼리 지연 시간이 길어집니다.
  • JDBC를 통해 실행되는 쿼리는 일반적으로 레코드를 하나씩 조회하는 포인트 조회인 반면, Doris는 쿼리 효율을 높이기 위해 배치 쿼리를 권장합니다.

Flink Doris Connector에서 Lookup Join을 사용하면 다음과 같은 이점이 있습니다:

  • 업스트림 데이터를 배치 단위로 캐시하여 레코드별 쿼리로 인한 높은 지연 시간과 데이터베이스 부하를 줄입니다.
  • 조인 쿼리를 비동기로 실행하여 데이터 처리량을 높이고 Doris 쿼리 부하를 줄입니다.

예제​

디멘션 테이블에는 Lookup 쿼리가 사용하는 jdbc-url을 설정해야 합니다. lookup.cache.* 옵션으로 캐시를 활성화합니다:

CREATE TABLE fact_table (
`id` BIGINT,
`name` STRING,
`city` STRING,
`process_time` as proctime()
) WITH (
'connector' = 'kafka',
...
);

create table dim_city(
`city` STRING,
`level` INT,
`province` STRING,
`country` STRING
) WITH (
'connector' = 'doris',
'fenodes' = '127.0.0.1:8030',
'jdbc-url' = 'jdbc:mysql://127.0.0.1:9030',
'table.identifier' = 'dim.dim_city',
'username' = 'root',
'password' = '',
'lookup.cache.max-rows' = '100000',
'lookup.cache.ttl' = '300s'
);

SELECT a.id, a.name, a.city, c.province, c.country, c.level
FROM fact_table a
LEFT JOIN dim_city FOR SYSTEM_TIME AS OF a.process_time AS c
ON a.city = c.city

옵션​

키기본값필수 여부설명
lookup.cache.max-rows-1Nlookup에서 캐시하는 최대 행 수입니다. 기본값은 -1이며, 캐시가 비활성화됨을 의미합니다.
lookup.cache.ttl10sNlookup의 최대 캐시 유지 시간입니다. 기본값은 10s입니다.
lookup.max-retries1Nlookup 쿼리 실패 후 재시도 횟수입니다.
lookup.jdbc.asyncFALSEN비동기 lookup의 활성화 여부입니다. 기본값은 false입니다.
lookup.jdbc.read.batch.size128N비동기 lookup에서 쿼리당 최대 배치 크기입니다.
lookup.jdbc.read.batch.queue-size256N비동기 lookup에서 중간 버퍼 큐의 크기입니다.
lookup.jdbc.read.thread-size3N각 태스크에서 lookup에 사용하는 jdbc 스레드 수입니다.