쿼리타임 조회
쿼리타임 조회 (Query-time lookups)
Druid에서 데이터를 로드하지 않고도 키-값 매핑으로 차원 값을 변환하는 쿼리타임 조회(query-time lookup)에 대해 설명할게요. 조회는 쿼리에 관련된 모든 서버에 로드되어 쿼리 시간에 키를 값으로 바꾸는 데 써요.
출처: 문서
본문
쿼리타임 조회는 데이터를 로드하기 전에 드루이드에 미리 로드되는 String 키를 String 값으로 매핑하는 표입니다. 조회는 쿼리 시간에 특정 차원의 값을 변환하는 데 사용해요. 이는 `dimension로 추출(extraction) 기능을 쓰는 것과 유사하지만, 저장된 값 대신 조회 매핑을 사용해 차원 값을 변환한다는 점이 달라요.
쿼리타임 조회는 쿼리에 참여하는 모든 서버에 로드되어, 조회가 JOIN 연산 대신 단순한 키-값 매핑으로 동작하도록 해요. JOIN 연산을 피할 수 있는 경우 성능 면에서 유리해요.
쿼리타임 조회의 일반적인 사용 사례는 내부 ID를 사람이 읽을 수 있는 이름으로 바꾸거나, 코드/약어를 전체 이름으로 바꾸는 거예요.
쿼리타임 조회 구성 (Configuring query-time lookups)
쿼리타임 조회는 Coordinator에서 구성돼요. Coordinator는 조회를 유지·배포하고, 조회 구성이 바뀌면 관련 서버에 전파해요. 조회는 /druid/coordinator/v1/lookups 엔드포인트를 통해 구성돼요. (자세한 구성 절차는 운영(operations) 문서의 lookup 구성을 참고하세요.)
조회의 종류 (Lookup types)
Druid는 여러 조회 타입을 지원해요. 각 타입은 LookupExtractorFactory 구현으로 만들어져요.
- Map lookup (
map) — 구성 JSON 안에 인라인으로 정의된 정적 매핑이에요. 소규모 매핑에 적합해요. - URI lookup (
uri) — 외부 URI(로컬 또는 원격)에서 매핑을 로드해요. JSON, CSV, TSV, 자바 프로퍼티 형식을 지원해요. 변경 사항은 주기적으로 다시 로드해 반영할 수 있어요. - JDBC lookup (
jdbc) — JDBC로 외부 데이터베이스 테이블에서 매핑을 로드해요. 정기적으로 캐시를 갱신해요. - Kafka lookup (
kafka) — Kafka 토픽에서 매핑을 로드해요. 근실시간으로 조회 값을 갱신할 수 있어요.druid-lookups-cached-global과druid-kafka-extraction-namespace확장이 필요해요. - Polynomial/bounded polynomial 레인지 조회 (
poly) — 범위 매핑에 사용하는 고급 조회예요.
쿼리에서 조회 사용하기 (Using lookups in queries)
조회는 쿼리 안에서 extractionFn 또는 dimensionSpec을 통해 사용돼요. 예를 들어 native 쿼리의 LookupDimensionSpec은 조회 이름과 retainMissingValue, replaceMissingValueWith 같은 옵션을 지정할 수 있어요.
Druid SQL 에서는 LOOKUP(expr, lookupName, [replaceMissingValueWith]) 함수를 사용해 조회를 적용할 수 있어요. 예:
SELECT LOOKUP(countryISO, 'country_lookup') AS country FROM wikipedia
더 알아보기 (Learn more)
- Cached global lookups — 캐시된 전역 조회 확장 구성에 대해 알아보세요.
- Kafka extraction namespace — Kafka 기반 조회를 살펴보세요.
- DimensionSpec — 조회 적용을 위한 차원 스펙을 알아보세요.