ClickHouse で dlt をインストールする
ClickHouse の依存関係を含む dlt ライブラリをインストールするには:
セットアップガイド
1
dlt プロジェクトを初期化する
まず、次のように新しい 上記のコマンドを実行すると、または
dlt プロジェクトを初期化します。このコマンドは、ソースとして chess、宛先として ClickHouse を使用するようにパイプラインを初期化します。
.dlt/secrets.toml や ClickHouse 用の requirements ファイルなど、複数のファイルとディレクトリが生成されます。requirements ファイルに指定された必要な依存関係は、次のようにインストールできます。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 ライブラリが使用されるためです。ClickHouse サーバーが、http_port で指定したポートで HTTP 接続を受け付けるよう設定されていることを確認してください。たとえば、http_port = 8443 を設定した場合、ClickHouse は 8443 番ポートで HTTP リクエストを待ち受けている必要があります。外部 ステージング を使用している場合は、このケースでは clickhouse-connect は使用されないため、http_port パラメーターは省略できます。clickhouse-driver ライブラリで使われるものと同様のデータベース接続文字列を渡すこともできます。上記の認証情報は次のようになります。書き込みディスポジション
merge ディスポジションを使用する場合は、リソースに primary_key を指定する必要があります。詳しくはこちらをご覧ください。
Append: これはデフォルトのディスポジションです。primary_key フィールドは無視され、データは宛先内の既存データに追記されます。
データの読み込み
- ローカルファイルの場合は、
clickhouse-connectライブラリを使用して、INSERTコマンドでファイルを ClickHouse テーブルに直接読み込みます。 S3,Google Cloud Storage, またはAzure Blob Storageなどのリモートストレージ上のファイルの場合は、s3、gcs、azureBlobStorage などの ClickHouse テーブル関数を使用してファイルを読み込み、データをテーブルに挿入します。
データセット
Clickhouse は 1 つのデータベース内で複数のデータセットをサポートしていませんが、dlt はいくつかの理由からデータセットを前提としています。Clickhouse を dlt で利用できるようにするため、Clickhouse データベース内で dlt によって生成されるテーブル名には、設定可能な dataset_table_separator で区切られたデータセット名のプレフィックスが付きます。さらに、データを一切含まない特別なセンチネルテーブルが作成され、dlt はこれによって Clickhouse の宛先にどの仮想データセットがすでに存在するかを認識できます。
サポートされているファイルフォーマット
clickhouse 宛先には、デフォルトの SQL 宛先とはいくつか異なる点があります。
ClickHouseには実験的なobjectデータ型がありますが、やや予測不能な挙動をすることがあるため、dlt の clickhouse 宛先では複雑なデータ型はテキストカラムにロードされます。この機能が必要な場合は、Slack コミュニティでご相談ください。追加を検討します。ClickHouseはtimeデータ型をサポートしていません。timeはtextカラムにロードされます。ClickHouseはbinaryデータ型をサポートしていません。代わりに、バイナリデータはtextカラムにロードされます。jsonlからロードする場合、バイナリデータは base64 文字列になり、parquet からロードする場合はbinaryオブジェクトがtextに変換されます。ClickHouseでは、データがすでに入っているテーブルに対しても、NULL 不可のカラムを追加できます。ClickHouseは、float または double データ型を使用すると、特定の条件下で丸め誤差が生じることがあります。丸め誤差を許容できない場合は、decimal データ型を使用してください。たとえば、ローダーのファイルフォーマットをjsonlに設定して値 12.7001 を double カラムにロードすると、確実に丸め誤差が発生します。
サポートされているカラムヒント
primary_key- このカラムを主キーの一部としてマークします。複数のカラムにこのヒントを設定することで、複合主キーを作成できます。
テーブルエンジン
ReplicatedMergeTree テーブルエンジンで作成されます。clickhouse アダプターでは、table_engine_type を使用して別のテーブルエンジンを指定できます。
merge_tree-MergeTreeエンジンを使用してテーブルを作成しますreplicated_merge_tree(デフォルト) -ReplicatedMergeTreeエンジンを使用してテーブルを作成します
ステージングのサポート
dlt は Parquet または jsonl ファイルをステージング先にアップロードし、ClickHouse のテーブル関数を使用して、ステージングされたファイルからデータを直接読み込みます。
ステージング先の認証情報を設定する方法については、filesystem のドキュメントを参照してください。
ステージングを有効にしてパイプラインを実行するには:
Google Cloud Storage をステージング領域として使用する
- Google Cloud ガイド に従って、GCS のサービス アカウント用の HMAC キーを作成します。
-
dlt プロジェクトの
config.tomlにある ClickHouse の宛先設定で、HMAC キーに加えて、サービス アカウントのclient_email、project_id、private_keyを設定します:
bashgcp_access_key_id と gcp_secret_access_key) に加えて、[destination.filesystem.credentials] の下で、サービスアカウントの client_email、project_id、private_key も指定する必要があります。これは、GCS のステージング サポートが現在は一時的な回避策として実装されており、まだ最適化されていないためです。
dlt はこれらの認証情報を ClickHouse に渡し、ClickHouse が認証と GCS へのアクセスを処理します。
今後、ClickHouse の dlt 宛先向け GCS ステージング設定を簡素化し、改善するための作業が活発に進められています。正式な GCS ステージング サポートは、以下の GitHub issue で追跡されています。