dbt-clickhouse 어댑터
지원되는 기능
- 테이블 머티리얼라이즈
- 뷰 머티리얼라이즈
- 증분 머티리얼라이즈
- Microbatch 증분 머티리얼라이즈
- Materialized View 머티리얼라이즈 (
TO형식의 MATERIALIZED VIEW 사용, Experimental) - 시드
- 소스
- 문서 생성
- 테스트
- 스냅샷
- 대부분의 dbt-utils 매크로(이제 dbt-core에 포함됨)
- 임시 머티리얼라이즈
- 분산 테이블 머티리얼라이즈(Experimental)
- 분산 증분 머티리얼라이즈(Experimental)
- Contracts
- ClickHouse 전용 컬럼 구성(코덱, TTL…)
- ClickHouse 전용 테이블 설정(인덱스, 프로젝션…)
--sample 플래그를 포함하고 향후 릴리스에 대비한 모든 deprecation 경고도 수정되었습니다. Catalog 통합(예: Iceberg)은 dbt 1.10에서 도입되었지만, 아직 어댑터에서 네이티브로 지원되지는 않으며 우회 방법을 사용할 수 있습니다. 자세한 내용은 Catalog Support section을 참조하십시오.
이 어댑터는 아직 dbt Cloud 내에서 사용할 수 없지만, 곧 제공될 예정입니다. 자세한 내용은 지원팀에 문의하십시오.
dbt 개념 및 지원되는 머티리얼라이즈
dbt-clickhouse에서 지원됩니다.
- view (기본값): 모델이 데이터베이스에서 뷰로 빌드됩니다. ClickHouse에서는 view로 빌드됩니다.
- table: 모델이 데이터베이스에서 테이블로 빌드됩니다. ClickHouse에서는 table로 빌드됩니다.
- ephemeral: 모델은 데이터베이스에 직접 빌드되지 않고, 대신 이를 참조하는 모델에 CTE(공통 테이블 표현식)로 포함됩니다.
- incremental: 모델은 처음에는 테이블로 materialize되며, 이후 실행에서는 dbt가 테이블에 새 행을 삽입하고 변경된 행을 업데이트합니다.
- materialized view: 모델이 데이터베이스에서 materialized view로 빌드됩니다. ClickHouse에서는 materialized view로 빌드됩니다.
dbt-clickhouse의 실험적 기능입니다.
dbt와 ClickHouse 어댑터 설정
dbt-core 및 dbt-clickhouse 설치
pip로 설치하는 것이 좋습니다.
dbt에 ClickHouse 인스턴스의 연결 정보를 제공하십시오.
~/.dbt/profiles.yml 파일에서 clickhouse-service 프로필을 구성하고 스키마(schema), 호스트, 포트, 사용자 이름, 비밀번호 속성을 설정하십시오. 연결 구성 옵션의 전체 목록은 기능 및 구성 페이지에서 확인할 수 있습니다:
dbt 프로젝트 만들기
project_name 디렉터리에서 dbt_project.yml 파일을 수정하여 ClickHouse 서버에 연결할 프로필 이름을 지정합니다.
연결 테스트
dbt debug를 실행하여 dbt가 ClickHouse에 연결할 수 있는지 확인합니다. 응답에 Connection test: [OK connection ok]가 포함되면 연결이 성공한 것입니다.
dbt를 ClickHouse와 함께 사용하는 방법을 더 자세히 알아보려면 가이드 페이지로 이동하십시오.
모델 테스트 및 배포(CI/CD)
간단한 데이터 테스트와 단위 테스트를 활용한 CI/CD
dbt build를 실행하는 정도로도 충분합니다.
더 완전한 CI/CD 단계: 최신 데이터를 사용하고, 영향받는 모델만 테스트하기
- 테스트에 최신 데이터가 필요하지 않다면 프로덕션 데이터의 Backup을 staging 환경으로 복원할 수 있습니다.
- 테스트에 최신 데이터가 필요하다면
remoteSecure()테이블 함수와 갱신 가능 구체화 뷰를 조합해 원하는 주기로 데이터를 삽입할 수 있습니다. 또 다른 방법으로는 객체 스토리지를 중간 계층으로 사용해 프로덕션 서비스에서 데이터를 주기적으로 기록한 뒤, 객체 스토리지 테이블 함수 또는 ClickPipes(지속적인 수집용)를 사용해 staging 환경으로 가져오는 것입니다.
dbt build --select state:modified+ --state path/to/last/deploy/state.json와 같은 명령을 실행하여 프로덕션의 마지막 실행 이후 변경된 내용을 기준으로 필요한 최소한의 모델만 선택적으로 다시 빌드할 수 있습니다.
일반적인 문제 해결
연결
- 엔진은 지원되는 엔진 중 하나여야 합니다.
- 데이터베이스에 액세스할 수 있는 충분한 권한이 있어야 합니다.
- 데이터베이스의 기본 테이블 엔진을 사용하지 않는 경우, 모델 구성에서 테이블 엔진을 지정해야 합니다.
장시간 실행되는 작업 이해하기
debug로 높이십시오 — 그러면 각 쿼리에 소요된 시간이 출력됩니다. 예를 들어, dbt 명령에 --log-level debug를 추가하면 됩니다.
제한 사항
- 이 플러그인은 ClickHouse 25.3 이상에서만 지원되는 구문을 사용합니다. 이전 버전의 ClickHouse는 테스트하지 않습니다. 또한 현재는 복제된 테이블(Replicated Table)도 테스트하지 않습니다.
dbt-adapter를 동시에 실행하면 충돌이 발생할 수 있습니다. 내부적으로 동일한 작업에 같은 테이블 이름을 사용할 수 있기 때문입니다. 자세한 내용은 이슈 #420을 확인하십시오.- 현재 어댑터는 INSERT INTO SELECT를 사용하여 모델을 테이블로 머티리얼라이즈합니다. 즉, 실행을 다시 수행하면 데이터가 중복될 수 있습니다. 매우 큰 데이터셋(PB)의 경우 실행 시간이 매우 길어져 일부 모델은 사실상 사용하기 어려울 수 있습니다. 성능을 개선하려면 뷰를
materialized: materialization_view로 구현하여 ClickHouse Materialized Views를 사용하십시오. 또한 가능하면GROUP BY를 활용해 각 쿼리가 반환하는 행 수를 최소화하십시오. 소스의 행 수를 그대로 유지한 채 단순 변환만 수행하는 모델보다, 데이터를 요약하는 모델을 우선하는 것이 좋습니다. - 모델을 나타내기 위해 분산 테이블을 사용하려면 각 노드에 기반이 되는 복제된 테이블을 수동으로 생성해야 합니다. 그런 다음 그 위에 분산 테이블을 생성할 수 있습니다. 어댑터는 클러스터 생성을 관리하지 않습니다.
- dbt가 데이터베이스에 릴레이션(테이블/뷰)을 생성할 때는 일반적으로
{{ database }}.{{ schema }}.{{ table/view id }}형식으로 생성합니다. ClickHouse에는 schema 개념이 없습니다. 따라서 어댑터는{{schema}}.{{ table/view id }}를 사용하며, 여기서schema는 ClickHouse 데이터베이스를 의미합니다. - Ephemeral 모델/CTE는 ClickHouse 삽입 SQL 문에서
INSERT INTO앞에 배치하면 동작하지 않습니다. https://github.com/ClickHouse/ClickHouse/issues/30323을 참조하십시오. 이는 대부분의 모델에는 영향을 주지 않지만, 모델 정의와 기타 SQL 문에서 ephemeral 모델의 배치 위치에는 주의가 필요합니다.
Fivetran
dbt-clickhouse connector는 Fivetran transformations에서도 사용할 수 있으며, dbt를 사용해 Fivetran 플랫폼 내에서 직접 원활하게 통합 및 변환 작업을 수행할 수 있습니다.