dltをClickHouseに接続する
dltは、さまざまなデータソースからデータを整然としたライブデータセットにロードするためにPythonスクリプトに追加できるオープンソースライブラリです。
ClickHouseと共にdltをインストールする
ClickHouseの依存関係を持つdlt
ライブラリをインストールするには:
セットアップガイド
1. dltプロジェクトを初期化する
新しいdlt
プロジェクトを初期化するには、以下のコマンドを使用します:
このコマンドは、chessをソースとして、ClickHouseを宛先としてパイプラインを初期化します。
上記のコマンドは、.dlt/secrets.toml
やClickHouse用の要件ファイルなど、いくつかのファイルやディレクトリを生成します。要件ファイルに指定された必要な依存関係は、以下のコマンドを実行することでインストールできます:
または、pip install dlt[clickhouse]
を使用して、dlt
ライブラリとClickHouseを宛先として使用するための必要な依存関係をインストールします。
2. ClickHouseデータベースのセットアップ
ClickHouseにデータをロードするには、ClickHouseデータベースを作成する必要があります。以下は、行うべきおおまかな手順です:
-
既存のClickHouseデータベースを使用するか、新しいデータベースを作成できます。
-
新しいデータベースを作成するには、
clickhouse-client
コマンドラインツールまたは好みのSQLクライアントを使用してClickHouseサーバーに接続します。 -
新しいデータベース、ユーザーを作成し、必要な権限を付与するために、以下のSQLコマンドを実行します:
3. 認証情報を追加する
次に、.dlt/secrets.toml
ファイルにClickHouseの認証情報を設定します。以下のように設定してください:
HTTP_PORT
http_port
パラメータは、ClickHouseサーバーのHTTPインターフェースに接続する際に使用するポート番号を指定します。これは、ネイティブTCPプロトコルに使用されるデフォルトポート9000とは異なります。
外部ステージングを使用しない場合(すなわち、パイプラインでステージングパラメータを設定しない場合)は、http_port
を設定する必要があります。これは、組み込みのClickHouseローカルストレージステージングが、HTTPを介してClickHouseと通信するclickhouse contentライブラリを使用しているためです。
http_port
で指定されたポートでHTTP接続を受け入れるようにClickHouseサーバーが設定されていることを確認してください。たとえば、http_port = 8443
を設定した場合、ClickHouseはポート8443でHTTPリクエストをリッスンしている必要があります。外部ステージングを使用している場合は、clickhouse-connectが使用されないため、http_port
パラメータを省略できます。
データベース接続文字列は、clickhouse-driver
ライブラリで使用されるものに似た形式で渡すことができます。上記の認証情報は次のようになります:
書き込みディスポジション
すべての書き込みディスポジションがサポートされています。
dltライブラリの書き込みディスポジションは、データを宛先に書き込む方法を定義します。書き込みディスポジションには3つのタイプがあります:
置換: このディスポジションは、リソースからのデータで宛先のデータを置き換えます。すべてのクラスとオブジェクトが削除され、データをロードする前にスキーマが再作成されます。詳細についてはこちらをご覧ください。
マージ: この書き込みディスポジションは、リソースのデータと宛先のデータをマージします。merge
ディスポジションの場合、リソースのprimary_key
を指定する必要があります。詳細についてはこちらをご覧ください。
追加: これはデフォルトのディスポジションです。宛先の既存データにデータを追加し、primary_key
フィールドは無視されます。
データのロード
データは、データソースに応じた最も効率的な方法を使用してClickHouseにロードされます:
- ローカルファイルの場合、
clickhouse-connect
ライブラリを使用して、INSERT
コマンドでファイルをClickHouseテーブルに直接ロードします。 S3
、Google Cloud Storage
、またはAzure Blob Storage
のようなリモートストレージのファイルに対しては、ClickHouseテーブル関数(s3、gcs、およびazureBlobStorageなど)を使用してファイルを読み込み、データをテーブルに挿入します。
データセット
Clickhouse
は、1つのデータベース内で複数のデータセットをサポートしていませんが、dlt
はさまざまな理由からデータセットに依存しています。Clickhouse
がdlt
と連携するようにするために、Clickhouse
データベース内のdlt
によって生成されたテーブルの名前には、データセット名が接頭辞として追加され、設定可能なdataset_table_separator
で区切られます。さらに、データを含まない特別なセンチネルテーブルが作成され、dlt
がClickhouse宛先にすでに存在する仮想データセットを認識できるようになります。
サポートされているファイル形式
clickhouse
宛先には、デフォルトのSQL宛先からのいくつかの特定の逸脱があります:
Clickhouse
には実験的なobject
データ型がありますが、それは少し予測不可能であることがわかったため、dltのClickhouse宛先は複雑なデータ型をテキストカラムにロードします。この機能が必要な場合は、Slackコミュニティにお問い合わせいただければ、追加を検討します。Clickhouse
はtime
データ型をサポートしていません。時間はtext
カラムにロードされます。Clickhouse
はbinary
データ型をサポートしていません。その代わりに、バイナリデータはtext
カラムにロードされます。jsonl
からロードする際、バイナリデータはbase64文字列になり、parquet
からロードする際、binary
オブジェクトはtext
に変換されます。Clickhouse
は、NULLでない列を含んだテーブルに新しいカラムを追加することを許可します。Clickhouse
は、floatまたはdoubleデータ型を使用する際に特定の条件で丸め誤差を生じる可能性があります。丸め誤差を許容できない場合は、decimalデータ型を使用してください。たとえば、jsonl形式のローダーファイルを使用してdoubleカラムに値12.7001をロードすると、予測可能に丸め誤差が発生します。
サポートされているカラムヒント
ClickHouseは、以下のカラムヒントをサポートしています:
primary_key
- カラムを主キーの一部としてマークします。複数のカラムがこのヒントを持つことにより、複合主キーを作成できます。
テーブルエンジン
デフォルトでは、テーブルはClickHouseのReplicatedMergeTree
テーブルエンジンを使用して作成されます。クリックハウスアダプタでtable_engine_type
を使用して代替のテーブルエンジンを指定できます:
サポートされている値は次のとおりです:
merge_tree
-MergeTree
エンジンを使用してテーブルを作成しますreplicated_merge_tree
(デフォルト) -ReplicatedMergeTree
エンジンを使用してテーブルを作成します
ステージングサポート
ClickHouseは、Amazon S3、Google Cloud Storage、およびAzure Blob Storageをファイルステージング先としてサポートしています。
dlt
はParquetまたはjsonlファイルをステージング場所にアップロードし、ClickHouseテーブル関数を使用してステージされたファイルからデータを直接ロードします。
ステージング先の認証情報を構成する方法については、ファイルシステムのドキュメントを参照してください:
ステージングを有効にしたパイプラインを実行するには:
Google Cloud Storageをステージングエリアとして使用
dltは、ClickHouseにデータをロードする際にGoogle Cloud Storage (GCS)をステージングエリアとして使用することをサポートしています。これはClickHouseのGCSテーブル関数によって自動的に処理されます。
ClickHouseのGCSテーブル関数は、HMAC(ハッシュベースのメッセージ認証コード)キーを使用した認証のみをサポートしています。これを有効にするために、GCSはAmazon S3 APIをエミュレートするS3互換モードを提供しています。ClickHouseはこれを利用して、S3統合を介してGCSバケットにアクセスできるようにします。
dltでHMAC認証を使用したGCSステージングを設定するには:
-
GCSサービスアカウントのHMACキーを作成するには、Google Cloudガイドに従ってください。
-
dltプロジェクトのClickHouse宛先設定の
config.toml
に、HMACキーおよびclient_email
、project_id
、private_key
をサービスアカウント用に設定します:
注意: HMACキー(gcp_access_key_id
およびgcp_secret_access_key
)に加えて、client_email
、project_id
、private_key
をサービスアカウント用に[destination.filesystem.credentials]
の下で提供する必要があります。これは、GCSステージングサポートが一時的な回避策として実装されており、まだ最適化されていないためです。
dltはこれらの認証情報をClickHouseに渡し、ClickHouseが認証およびGCSアクセスを処理します。
今後、ClickHouse dlt宛先のGCSステージング設定を簡素化し改善するための作業が進行中です。GCSステージングサポートは、これらのGitHubのイシューで追跡されています:
- ファイルシステム宛先をgcsのs3互換モードで動作させる
- Google Cloud Storageステージングエリアサポート
dbtサポート
dbtとの統合は、dbt-clickhouseを介して一般的にサポートされています。
dlt
の状態の同期
この宛先は、dlt状態の同期を完全にサポートしています。