BigQuery ClickPipe は、BigQuery から ClickHouse Cloud へデータを取り込むための、フルマネージドで耐障害性に優れた仕組みです。プライベートプレビューでは、BigQuery のデータセットを探索やプロトタイピング向けに一括で読み込めるよう、初期ロード レプリケーション方式をサポートしています。将来的には CDC もサポートされる予定です。それまでは、初期ロード完了後に BigQuery のエクスポートデータを ClickHouse Cloud に継続的に同期する方法として、Google Cloud Storage ClickPipe の利用を推奨します。
BigQuery ClickPipes は、ClickPipes UI を使用して手動でデプロイおよび管理できるほか、OpenAPI や Terraform を使用してプログラムからデプロイおよび管理することもできます。
機能
初期ロード
BigQuery ClickPipe は、BigQuery の データセット 内で選択したテーブルを、1 回のバッチ操作で ClickHouse の宛先テーブルにロードします。インジェストタスクが完了すると、ClickPipe は自動的に自動停止します。初期ロードのインジェストプロセスでは、ステージング用にユーザーが用意した Google Cloud Storage (GCS) バケットが必要です。今後は、この中間バケットは ClickPipes によって提供および管理される予定です。
CDC (変更データキャプチャ)
CDC はプライベートプレビューではサポートされていませんが、今後サポートされる予定です。それまでは、初期ロードの完了後に BigQuery のデータエクスポートを ClickHouse Cloud に継続的に同期する方法として、Google Cloud Storage ClickPipe の使用を推奨します。
データ型マッピング
| BigQuery データ型 | ClickHouse データ型 | 詳細 |
|---|---|---|
BOOL |
Bool |
|
INT64 |
Int64 |
|
FLOAT64 |
Float64 |
|
NUMERIC |
Decimal(P, S) |
精度は最大 38、スケールは最大 9。精度/スケールは保持されます。 |
BIGNUMERIC |
Decimal(P, S) |
精度は最大 76、スケールは最大 38。精度/スケールは保持されます。 |
STRING |
String |
|
BYTES |
String |
|
JSON |
String (JSON) |
|
DATE |
Date |
|
TIME |
String |
マイクロ秒精度。 |
DATETIME |
DateTime |
マイクロ秒精度。 |
TIMESTAMP |
DateTime64(6) |
マイクロ秒精度。 |
GEOGRAPHY |
String |
|
GEOMETRY |
String |
|
UUID |
String |
|
ARRAY<T> |
Array(T) |
|
ARRAY<DATE> |
Array(Date) |
|
STRUCT (RECORD) |
String |
アクセス制御
認証
サービスアカウントの認証情報
ClickPipes は、サービスアカウントキーを使用して Google Cloud プロジェクトに認証します。ClickPipes が BigQuery からデータをエクスポートし、ステージング用の GCS バケットにロードしてから ClickHouse に読み込めるように、必要最小限の権限のみを持つ専用のサービスアカウントを作成することを推奨します。

権限
BigQuery
サービス アカウントには、次の BigQuery ロールが必要です。
アクセス範囲をさらに絞り込むには、ロールがアクセスできるリソースを制限するために IAM 条件 を使用することを推奨します。たとえば、dataViewer ロールを、同期対象のテーブルを含む特定のデータセットのみに制限できます。
resource.name.startsWith("projects/<PROJECT_ID>/datasets/<DATASET_NAME>")Cloud ストレージ
サービス アカウントには、次の Cloud ストレージ ロールが必要です。
アクセス範囲をさらに絞るには、IAM 条件を使用して、ロールがアクセスできるリソースを制限することを推奨します。たとえば、objectAdmin ロールと bucketViewer ロールを、ClickPipes の同期用に作成した専用バケットのみに制限できます。
resource.name.startsWith("projects/_/buckets/<BUCKET_NAME>")