ClickHouse 설정
ClickHouse 설정
dbt-clickhouse 어댑터에서 모델을 view, table, incremental로 materialize하는 방법을 다루는 페이지예요. ClickHouse 특유의 engine, order_by, partition_by, unique_key 같은 설정을 모델에 지정해서 생성되는 테이블을 세밀하게 제어할 수 있어요.
출처: 문서
본문
View materialization
dbt 모델은 ClickHouse view로 생성할 수 있는데, 다음 문법으로 구성해요.
Project YAML 파일
dbt_project.yml
models:
<resource-path>:
+materialized: view
SQL 파일 config
models/<model_name>.sql
{{ config(materialized = "view") }}
Table materialization
dbt 모델은 ClickHouse table로 생성할 수 있는데, 다음 문법으로 구성해요.
Project YAML 파일
dbt_project.yml
models:
<resource-path>:
+materialized: table
+order_by: [ <column-name>, ... ]
+engine: <engine-type>
+partition_by: [ <column-name>, ... ]
SQL 파일 config
models/<model_name>.sql
{{ config(
materialized = "table",
engine = "<engine-type>",
order_by = [ "<column-name>", ... ],
partition_by = [ "<column-name>", ... ],
...
]
) }}
Table configuration
| Option | 설명 | 필수 여부? |
|---|---|---|
materialized |
모델이 ClickHouse에 어떻게 materialize되는지를 나타내요. table 모델을 만들려면 table이어야 해요. |
필수 |
engine |
테이블을 만들 때 사용할 테이블 엔진이에요. 아래의 지원 엔진 목록을 참고하세요. | 선택 (기본값: MergeTree()) |
order_by |
컬럼 이름 또는 임의 표현식의 튜플이에요. 데이터를 더 빠르게 찾는 데 도움이 되는 작은 희소 인덱스를 만들 수 있어요. | 선택 (기본값: tuple()) |
partition_by |
파티션은 특정 기준에 따라 테이블의 레코드를 논리적으로 결합한 것이에요. 파티션 키는 테이블 컬럼의 어떤 표현식이든 될 수 있어요. | 선택 |
전체 구성 옵션 목록은 ClickHouse documentation을 참고하세요.
Incremental materialization
Table 모델은 매번 dbt 실행마다 재구성돼요. 결과 집합이 크거나 변환이 복잡하면 이는 비현실적이고 매우 비쌀 수 있어요. 이 문제를 해결하고 빌드 시간을 줄이기 위해, dbt 모델을 incremental ClickHouse 테이블로 생성할 수 있어요. 구성은 다음 문법을 사용해요.
Project 파일
dbt_project.yml
models:
<resource-path>:
+materialized: incremental
+order_by: [ <column-name>, ... ]
+engine: <engine-type>
+partition_by: [ <column-name>, ... ]
+unique_key: [ <column-name>, ... ]
+inserts_only: [ True|False ]
SQL 파일 config
models/<model_name>.sql
{{ config(
materialized = "incremental",
engine = "<engine-type>",
order_by = [ "<column-name>", ... ],
partition_by = [ "<column-name>", ... ],
unique_key = [ "<column-name>", ... ],
inserts_only = [ True|False ],
...
]
) }}
Incremental table configuration
| Option | 설명 | 필수 여부? |
|---|---|---|
materialized |
모델이 ClickHouse에 어떻게 materialize되는지를 나타내요. table 모델을 만들려면 table이어야 해요. |
필수 |
unique_key |
행을 고유하게 식별하는 컬럼 이름의 튜플이에요. 유니크 제약 조건에 대한 자세한 내용은 여기를 참고하세요. | 필수. 제공하지 않으면 수정된 행이 incremental 테이블에 두 번 추가돼요. |
engine |
테이블을 만들 때 사용할 테이블 엔진이에요. 아래의 지원 엔진 목록을 참고하세요. | 선택 (기본값: MergeTree()) |
order_by |
컬럼 이름 또는 임의 표현식의 튜플이에요. 데이터를 더 빠르게 찾는 데 도움이 되는 작은 희소 인덱스를 만들 수 있어요. | 선택 (기본값: tuple()) |
partition_by |
파티션은 특정 기준에 따라 테이블의 레코드를 논리적으로 결합한 것이에요. 파티션 키는 테이블 컬럼의 어떤 표현식이든 될 수 있어요. | 선택 |
inserts_only |
(비권장, append materialization 전략 참고) True면 중간 테이블을 만들지 않고 타깃 incremental 테이블에 직접 incremental 업데이트를 삽입해요. |
선택 (기본값: False) |
incremental_strategy |
incremental materialization에 사용할 전략이에요. delete+insert, append, insert_overwrite(실험적)를 지원해요. 전략에 대한 추가 정보는 여기를 참고하세요. |
선택 (기본값: 'default') |
incremental_predicates |
delete+insert materialization에 적용할 incremental predicate 절이에요. |
선택 |
전체 구성 옵션 목록은 ClickHouse documentation을 참고하세요.
Snapshot
dbt snapshot은 가변(mutable) 모델의 변경 사항을 시간에 따라 기록할 수 있게 해줘요. 이를 통해 모델의 이전 상태를 "과거로 돌아가" 볼 수 있는 시점(point-in-time) 쿼리가 가능해져요. 이 기능은 ClickHouse 커넥터에서 지원되며 다음 문법으로 구성돼요.
(dbt v1.9 이상 적용)
snapshots/<model_name>.sql
{{
config(
schema = "<schema-name>",
unique_key = "<column-name>",
strategy = "<strategy>",
updated_at = "<updated-at-column-name>",
)
}}
구성에 대한 자세한 내용은 snapshot configs 참조 페이지를 확인하세요.
더 알아보기 (Learn more)
dbt-clickhouse어댑터는 테스트, snapshot, 헬퍼 매크로 등 대부분의 dbt 네이티브 기능을 지원해요. 지원되는 기능과 모범 사례의 전체 개요는 ClickHouse documentation을 참고하세요.- incremental 모델 유니크 키에 대한 자세한 설명은 incremental-models 문서를 참고하세요.