profiles.yml の設定
profiles.yml ファイルにプロファイルを追加する必要があります。ClickHouse のプロファイルは、次の構文に従います。
スキーマとデータベース
database.schema.table は、ClickHouse では schema がサポートされていないため、互換性がありません。
そのため、schema.table という簡略化した形式を使用します。ここでの schema は ClickHouse のデータベースを指します。default データベースの使用は推奨されません。
SET ステートメントに関する警告
quote_columns の設定
dbt_project.yml で quote_columns の値を明示的に設定してください。詳細は、quote_columns のドキュメントを参照してください。
ClickHouse クラスターについて
cluster設定を指定すること。- 特に
threadsを複数使用している場合は、書き込み後の読み取り整合性を確保すること。
クラスター設定
cluster 設定を使用すると、dbt-clickhouse を ClickHouse クラスターに対して実行できます。プロファイル で cluster が設定されている場合、Replicated エンジンを使用するものを除き、デフォルトですべてのモデルが ON CLUSTER 句付きで作成されます。これには以下が含まれます。
- database の作成
- View マテリアライズ
- table および incremental マテリアライズ
- Distributed マテリアライズ
ON CLUSTER 句は使用されません。これらは内部的にレプリケーションを管理するよう設計されているためです。
特定のモデルでクラスターベースの作成を無効にするには、disable_on_cluster config を追加します。
cluster 設定の影響を受けません (model は
接続先ノードにのみ作成されます) 。
互換性
model が cluster 設定なしで作成されている場合、dbt-clickhouse はこの状況を検出し、この model に対しては 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— ClickHouse のテーブルエンジンを指定するために、モデル設定のengineプロパティを使用します。dbt-clickhouse では、デフォルトでMergeTreeエンジンが使用されます。partition_cols— ClickHouse のパーティションキーを指定するために、モデル設定のpartition_byプロパティを使用します。デフォルトでは パーティションキーは設定されません。order_cols— ClickHouse の ORDER BY/ソートキーを指定するために、order_byモデル設定を使用します。指定しない場合、 ClickHouse は空の tuple() を使用し、テーブルはソートされませんprimary_key_clause— ClickHouse の主キーを指定するために、モデル設定のprimary_keyプロパティを使用します。デフォルト では主キーが設定され、ClickHouse は ORDER BY 句を主キーとして使用します。on_cluster_clause— 一部の dbt 操作にON CLUSTER句を追加するために、プロファイルのclusterプロパティを使用します: 分散マテリアライズ、ビューの作成、データベースの作成。ttl_config— ClickHouse テーブルの 有効期限 (TTL) 式を指定するために、モデル設定のttlプロパティを使用します。デフォルトでは 有効期限 (TTL) は 設定されません。
s3Source ヘルパーマクロ
s3source マクロは、ClickHouse の S3 table
function を使って S3 から ClickHouse のデータを直接選択する処理を簡単にします。これは、
名前付きの設定辞書から S3 table function のパラメーターを
埋めることで動作します (辞書名は
s3 で終わっている必要があります) 。このマクロは
まず profile の vars から辞書を探し、次に model configuration を確認します。辞書には、
S3 table function のパラメーターを設定するための、以下の
キーを任意に含めることができます。
このマクロの使用例については、
S3 test file
を参照してください。
クロスデータベース マクロのサポート
dbt Core に含まれているクロスデータベース マクロの大半をサポートしていますが、以下は例外です。
split_partSQL 関数は、ClickHouse では splitByChar 関数を使って実装されています。この関数では、「分割」の区切り文字に定数文字列を使用する必要があるため、このマクロで使用するdelimeterパラメータは、カラム名ではなく文字列として解釈されます- 同様に、ClickHouse の
replaceSQL 関数では、old_charsおよびnew_charsパラメータに定数文字列が必要なため、このマクロを呼び出す際、これらのパラメータはカラム名ではなく文字列として解釈されます。
カタログ対応
dbt カタログインテグレーションの状況
ClickHouse のカタログサポート
experimental ですが、比較的新しいバージョンの ClickHouse を使用していれば、すでに利用できます。
- Iceberg テーブルエンジン と Iceberg テーブル関数 を使用すると、オブジェクトストレージ (S3、Azure Blob Storage、Google Cloud Storage) に保存されている Iceberg テーブルを ClickHouse でクエリできます。
- さらに、ClickHouse は DataLakeCatalog データベースエンジン を提供しており、AWS Glue Catalog、Databricks Unity Catalog、Hive Metastore、REST Catalog などの外部データカタログへの接続を可能にします。これにより、データを複製することなく、外部カタログ上のオープンテーブルフォーマットのデータ (Iceberg、Delta Lake) を直接クエリできます。
Iceberg とカタログを扱う際の回避策
source 機能を使うことで、dbt プロジェクト内からこれらのテーブルを参照できます。たとえば、REST カタログ 内のテーブルにアクセスしたい場合は、次のようにします。
- 外部カタログを参照するデータベースを作成します。
- dbtでカタログデータベースとそのテーブルをソースとして定義する: テーブルはすでにClickHouseで利用可能である必要があることに注意してください
- dbtモデルでカタログテーブルを使用する:
回避策に関する注記
- ネイティブな dbt カタログインテグレーションを待たずに、さまざまな外部テーブルタイプや外部カタログにすぐアクセスできます。
- ネイティブなカタログサポートが利用可能になった際に、シームレスに移行できます。
- 手動セットアップ: Iceberg テーブルとカタログデータベースは、dbt から参照できるようにする前に、ClickHouse で手動で作成しておく必要があります。
- カタログレベルの DDL なし: dbt は、外部カタログ内での Iceberg テーブルの作成や削除といったカタログレベルの操作を管理できません。そのため、現時点では dbt コネクタからそれらを作成することはできません。Iceberg() エンジンを使ったテーブル作成は、将来的に追加される可能性があります。
- 書き込み操作: 現在、Iceberg/Data Catalog テーブルへの書き込みは制限されています。利用可能なオプションについては、ClickHouse のドキュメントを確認してください。