dltをClickHouseに接続する
dlt は、様々な乱雑なデータソースから、よく構造化されたライブデータセットにデータをロードするためにPythonスクリプトに追加できるオープンソースライブラリです。
ClickHouseでdltをインストール
dlt
ライブラリをClickHouse依存関係とともにインストールする方法:
セットアップガイド
1. dltプロジェクトの初期化
以下のように、新しいdlt
プロジェクトを初期化します:
このコマンドは、ソースとしてチェスを、宛先として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接続を受け入れるようにClickHouseサーバーが構成されていることを確認してください。例えば、http_port = 8443
を設定した場合、ClickHouseはポート8443でHTTPリクエストを待っている必要があります。外部ステージングを使用している場合は、clickhouse-connectが使用されないため、http_port
パラメータを省略できます。
clickhouse-driver
ライブラリが使用するのと似たデータベース接続文字列を渡すことができます。上記の認証情報は次のようになります:
書き込みの方法
すべての書き込み方法がサポートされています。
dltライブラリの書き込み方法は、データを宛先にどのように書き込むかを定義します。書き込み方法には次の3種類があります:
Replace: この方法は、リソースからのデータで宛先のデータを置き換えます。すべてのクラスとオブジェクトを削除し、データをロードする前にスキーマを再作成します。詳細についてはこちらをご覧ください。
Merge: この書き込み方法は、リソースのデータと宛先のデータをマージします。merge
方法では、リソースのprimary_key
を指定する必要があります。詳細についてはこちらをご覧ください。
Append: これはデフォルトの方法です。データは、宛先の既存データに追加され、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でない populatedなテーブルにカラムを追加することを許可しています。Clickhouse
は、floatまたはdoubleデータ型を使用している場合、特定の条件下で丸めエラーを生成する可能性があります。丸めエラーが許容できない場合は、decimalデータ型を使用してください。例えば、jsonl
にて12.7001の値をdouble列にロードすると、予測可能な丸めエラーが発生します。
サポートされているカラムヒント
ClickHouseは次のカラムヒントをサポートしています:
primary_key
- カラムを主キーの一部としてマークします。複数のカラムがこのヒントを持つことで、複合主キーを作成できます。
テーブルエンジン
デフォルトでは、ClickHouseではReplicatedMergeTree
テーブルエンジンを使用してテーブルが作成されます。clickhouseアダプタを使用して、代替のテーブルエンジンを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テーブル関数によって自動的に処理され、dltが内部で使用します。
clickhouseのGCSテーブル関数は、ハッシュベースのメッセージ認証コード(HMAC)キーを使用した認証のみをサポートしています。これを有効にするために、GCSはAmazon S3 APIをエミュレートするS3互換モードを提供しています。ClickHouseは、これを利用してGCSバケットにS3統合を通じてアクセスします。
dltでHMAC認証を使用したGCSステージングを設定するには:
-
Google Cloudガイドに従って、GCSサービスアカウントのHMACキーを作成します。
-
dltプロジェクトのClickHouse宛先設定で、HMACキーとともに
client_email
、project_id
、private_key
を設定しますconfig.toml
に:
注意:HMACキーbashgcp_access_key_id
とgcp_secret_access_key
に加え、サービスアカウントのclient_email
、project_id
、private_key
を[destination.filesystem.credentials]
の下に提供する必要があります。これは、GCSステージングサポートが一時的な回避策として実装されており、まだ最適化されていないためです。
dltはこれらの認証情報をClickHouseに渡し、認証とGCSアクセスを処理させます。
将来的にClickHouse dlt宛先のGCSステージングのセットアップを簡素化し改善するための作業が進行中です。適切なGCSステージングサポートは、以下のGitHub課題で追跡されています:
Dbtサポート
dbtとの統合は、dbt-clickhouseを介して一般的にサポートされています。
dlt
状態の同期
この宛先は、dlt状態の同期を完全にサポートしています。