Profile.yml 구성
profiles.yml 파일에 프로필을 추가해야 합니다. ClickHouse 프로필은 다음 구문을 따릅니다.
스키마와 데이터베이스
database.schema.table은 ClickHouse와 호환되지 않습니다. ClickHouse는 schema를 지원하지 않기 때문입니다.
따라서 schema.table과 같은 단순화된 방식을 사용하며, 여기서 schema는 ClickHouse 데이터베이스를 의미합니다. default 데이터베이스 사용은 권장되지 않습니다.
SET 문 경고
quote_columns 설정
dbt_project.yml에서 quote_columns 값을 명시적으로 설정하세요. 자세한 내용은 quote_columns 문서를 확인하세요.
ClickHouse 클러스터 정보
cluster설정 지정- 특히
threads를 2개 이상 사용하는 경우 쓰기 후 읽기 일관성 보장
클러스터 설정
cluster 설정을 사용하면 dbt-clickhouse를 ClickHouse 클러스터에서 실행할 수 있습니다. 프로필에 cluster가 설정되어 있으면, 기본적으로 모든 모델이 ON CLUSTER 절을 포함해 생성됩니다. 단, Replicated 엔진을 사용하는 경우는 예외입니다. 여기에는 다음이 포함됩니다.
- 데이터베이스 생성
- 뷰 머티리얼라이제이션
- 테이블 및 증분 머티리얼라이제이션
- 분산 머티리얼라이제이션
ON CLUSTER 절을 포함하지 않습니다.
특정 모델에서 클러스터 기반 생성을 사용하지 않으려면 disable_on_cluster config를 추가하십시오:
cluster 설정의 영향을 받지 않습니다 (모델은
연결된 노드에만 생성됩니다).
호환성
모델이 cluster 설정 없이 생성된 경우, dbt-clickhouse는 이 상황을 감지하고 해당 모델에 대해서는 on cluster 절 없이 모든 DDL/DML을
실행합니다.
쓰기 후 읽기 일관성
- ClickHouse Cloud 클러스터를 사용하는 경우, 프로필의
custom_settings속성에select_sequential_consistency: 1만 설정하면 됩니다. 이 설정에 대한 자세한 내용은 여기에서 확인할 수 있습니다. - 자체 호스팅 클러스터를 사용하는 경우, 모든 dbt 요청이 동일한 ClickHouse 레플리카로 전송되도록 하십시오. 상단에 로드 밸런서가 있다면, 항상 동일한 레플리카에 연결될 수 있도록
replica aware routing/sticky sessions메커니즘을 사용해 보십시오. ClickHouse Cloud 이외의 클러스터에서select_sequential_consistency = 1설정을 추가하는 것은 권장되지 않습니다.
ClickHouse 추가 매크로
모델 머티리얼라이즈 유틸리티 매크로
engine_clause—engine모델 구성 속성을 사용해 ClickHouse 테이블 엔진을 지정합니다. dbt-clickhouse는 기본적으로MergeTree엔진을 사용합니다.partition_cols—partition_by모델 구성 속성을 사용해 ClickHouse 파티션 키를 지정합니다. 기본적으로는 파티션 키가 지정되지 않습니다.order_cols—order_by모델 구성을 사용해 ClickHouse ORDER BY/정렬 키를 지정합니다. 지정하지 않으면 ClickHouse는 빈 tuple()을 사용하며 테이블은 정렬되지 않은 상태가 됩니다.primary_key_clause—primary_key모델 구성 속성을 사용해 ClickHouse 프라이머리 키를 지정합니다. 기본적으로 프라이머리 키가 설정되며, ClickHouse는 ORDER BY 절을 프라이머리 키로 사용합니다.on_cluster_clause—clusterprofile 속성을 사용해 특정 dbt 작업에ON CLUSTER절을 추가합니다: 분산 머티리얼라이제이션, 뷰 생성, 데이터베이스 생성.ttl_config—ttl모델 구성 속성을 사용해 ClickHouse 테이블 TTL 표현식을 지정합니다. 기본적으로 TTL은 지정되지 않습니다.
s3Source 헬퍼 매크로
s3source 매크로는 ClickHouse S3 테이블
함수를 사용해 S3에서 ClickHouse 데이터를 직접 조회하는 과정을 간소화합니다. 이 매크로는
이름이 지정된 구성 딕셔너리의 값을 사용해 S3 테이블 함수의 매개변수를
채워 넣는 방식으로 동작합니다(딕셔너리 이름은 반드시
s3로 끝나야 합니다). 이 매크로는
먼저 프로필 vars에서 딕셔너리를 찾고, 그다음 모델 구성에서 찾습니다. 딕셔너리에는
S3 테이블 함수의 매개변수를 채우는 데 사용되는 다음
키를 포함할 수 있습니다:
이 매크로의 사용 예시는
S3 test file을
참조하십시오.
교차 데이터베이스 매크로 지원
dbt Core에 포함된 교차 데이터베이스 매크로 대부분을 지원하지만, 다음과 같은 예외가 있습니다:
- ClickHouse에서
split_partSQL 함수는 splitByChar 함수를 사용해 구현됩니다. 이 함수는 “split” 구분자로 상수 문자열을 사용해야 하므로, 이 매크로에 사용되는delimeter매개변수는 컬럼 이름이 아니라 문자열로 해석됩니다. - 마찬가지로, ClickHouse의
replaceSQL 함수는old_chars및new_chars매개변수에 상수 문자열이 필요하므로, 이 매크로를 호출할 때 해당 매개변수는 컬럼 이름이 아니라 문자열로 해석됩니다.
카탈로그 지원
dbt 카탈로그 통합 상태
ClickHouse 카탈로그 지원
experimental 상태이지만, 최신 ClickHouse 버전을 사용하면 이미 활용할 수 있습니다.
- Iceberg 테이블 엔진과 iceberg 테이블 함수를 사용하면 객체 스토리지(S3, Azure Blob Storage, Google Cloud Storage)에 저장된 Iceberg 테이블에 대해 쿼리할 수 있습니다.
- 또한 ClickHouse는 DataLakeCatalog 데이터베이스 엔진을 제공하며, 이를 통해 AWS Glue Catalog, Databricks Unity Catalog, Hive Metastore, REST 카탈로그를 포함한 외부 데이터 카탈로그에 연결할 수 있습니다. 이를 통해 데이터를 중복 저장하지 않고도 외부 카탈로그의 오픈 테이블 포맷 데이터(Iceberg, Delta Lake)를 직접 쿼리할 수 있습니다.
Iceberg 및 카탈로그 사용을 위한 우회 방법
source 기능을 활용하면 dbt 프로젝트에서 이러한 테이블을 참조할 수 있습니다. 예를 들어, REST 카탈로그의 테이블에 접근하려면 다음과 같이 하십시오:
- 외부 카탈로그를 가리키는 데이터베이스를 생성합니다:
- dbt에서 카탈로그 데이터베이스와 해당 테이블을 소스로 정의합니다: 이때 테이블은 ClickHouse에 이미 존재해야 합니다.
- dbt 모델에서 카탈로그 테이블을 사용하세요:
우회 방법 관련 참고 사항
- 네이티브 dbt 카탈로그 통합을 기다리지 않아도 다양한 external table 타입과 external 카탈로그에 즉시 액세스할 수 있습니다.
- 네이티브 카탈로그 지원이 제공되면 원활하게 마이그레이션할 수 있습니다.
- 수동 설정: Iceberg 테이블과 카탈로그 데이터베이스는 dbt에서 참조하기 전에 ClickHouse에서 수동으로 생성해야 합니다.
- 카탈로그 수준 DDL 없음: dbt는 external 카탈로그에서 Iceberg 테이블을 생성하거나 삭제하는 등의 카탈로그 수준 작업을 관리할 수 없습니다. 따라서 현재는 dbt connector를 통해 이를 생성할 수 없습니다. Iceberg() 엔진으로 테이블을 생성하는 기능은 향후 추가될 수 있습니다.
- 쓰기 작업: 현재 Iceberg/Data Catalog 테이블에 대한 쓰기 작업은 제한적입니다. 사용 가능한 옵션을 확인하려면 ClickHouse 문서를 참조하십시오.