メインコンテンツへスキップ
メインコンテンツへスキップ

Dataflow BigQuery から ClickHouse へのテンプレート

BigQuery から ClickHouse への Dataflow テンプレートは、BigQuery テーブルから ClickHouse テーブルへデータをバッチで取り込むパイプラインです。 このテンプレートは、テーブル全体を読み取ることも、指定された SQL クエリを使用して特定のレコードに絞り込むこともできます。

パイプラインの要件

  • ソース BigQuery テーブルが存在している必要があります。
  • ターゲット ClickHouse テーブルが存在している必要があります。
  • ClickHouse ホストが Dataflow ワーカーマシンからアクセス可能である必要があります。

テンプレートパラメータ



Parameter NameParameter DescriptionRequiredNotes
jdbcUrljdbc:clickhouse://<host>:<port>/<schema> 形式の ClickHouse JDBC URL。ユーザー名とパスワードは JDBC オプションとして追加しないでください。その他の JDBC オプションは JDBC URL の末尾に追加できます。ClickHouse Cloud ユーザーは、jdbcUrlssl=true&sslmode=NONE を追加してください。
clickHouseUsername認証に使用する ClickHouse のユーザー名。
clickHousePassword認証に使用する ClickHouse のパスワード。
clickHouseTableデータの挿入先となる ClickHouse テーブル。
maxInsertBlockSize挿入用のブロック作成を制御する場合の、挿入時の最大ブロックサイズ(ClickHouseIO オプション)。ClickHouseIO オプション。
insertDistributedSyncこの設定が有効な場合、分散テーブルへの INSERT クエリは、データがクラスタ内のすべてのノードへ送信されるまで待機します(ClickHouseIO オプション)。ClickHouseIO オプション。
insertQuorumレプリケートされたテーブルに対する INSERT クエリで、指定された数のレプリカへの書き込み完了を待機し、データの追加を直列化します。0 の場合は無効。ClickHouseIO オプション。この設定はデフォルトのサーバー設定では無効になっています。
insertDeduplicateレプリケートされたテーブルに対する INSERT クエリで、挿入ブロックの重複排除を実行することを指定します。ClickHouseIO オプション。
maxRetries1 回の挿入あたりの最大リトライ回数。ClickHouseIO オプション。
InputTableSpec読み取り元の BigQuery テーブル。inputTableSpec または query のいずれか一方を指定します。両方が設定されている場合は、query パラメータが優先されます。例: <BIGQUERY_PROJECT>:<DATASET_NAME>.<INPUT_TABLE>BigQuery Storage Read API を使用して BigQuery ストレージから直接データを読み取ります。Storage Read API の制限事項 に注意してください。
outputDeadletterTable出力テーブルへの書き込みに失敗したメッセージ用の BigQuery テーブル。テーブルが存在しない場合は、パイプライン実行中に作成されます。指定しない場合、<outputTableSpec>_error_records が使用されます。例: <PROJECT_ID>:<DATASET_NAME>.<DEADLETTER_TABLE>
queryBigQuery からデータを読み取るために使用する SQL クエリ。BigQuery データセットが Dataflow ジョブとは別のプロジェクトにある場合は、SQL クエリ内で完全なデータセット名を指定します(例: <PROJECT_ID>.<DATASET_NAME>.<TABLE_NAME>)。useLegacySql が true の場合を除き、デフォルトでは GoogleSQL が使用されます。inputTableSpec または query のいずれか一方を必ず指定してください。両方のパラメータを設定した場合、テンプレートは query パラメータを使用します。例: SELECT * FROM sampledb.sample_table
useLegacySqlレガシー SQL を使用する場合は true に設定します。このパラメータは query パラメータを使用する場合にのみ適用されます。デフォルトは false
queryLocation基盤となるテーブルへの権限なしで承認済みビューから読み取る場合に必要です。例: US
queryTempDatasetクエリ結果を保存する一時テーブルを作成するために使用する既存のデータセットを指定します。例: temp_dataset
KMSEncryptionKeyクエリソースを使用して BigQuery から読み取る場合に、一時テーブルを暗号化するために使用する Cloud KMS キー。例: projects/your-project/locations/global/keyRings/your-keyring/cryptoKeys/your-key
注記

すべての ClickHouseIO パラメータのデフォルト値は、ClickHouseIO Apache Beam Connector で確認できます。

ソースおよびターゲットテーブルのスキーマ

BigQuery のデータセットを ClickHouse に効果的にロードするために、このパイプラインは次の段階からなる列推論プロセスを実行します。

  1. テンプレートは、ターゲットの ClickHouse テーブルに基づいてスキーマオブジェクトを構築します。
  2. テンプレートは BigQuery データセットを反復処理し、列名に基づいて列の対応付けを試みます。

参考文献

ただし、BigQuery データセット(テーブルまたはクエリ)の列名は、ClickHouse のターゲットテーブルと完全に一致している必要があります。

データ型のマッピング

BigQuery の型は、ClickHouse テーブル定義に基づいて変換されます。したがって、上記の表では(特定の BigQuery テーブル/クエリに対して)ClickHouse 側のテーブルで使用することを推奨するマッピングを示しています。

BigQuery 型ClickHouse 型備考
配列型配列型内側の型は、この表に記載されているサポート対象のプリミティブ型のいずれかである必要があります。
ブール型Bool 型
日付型日付型
Datetime 型Datetime 型Enum8Enum16FixedString に対しても同様に使用できます。
文字列型文字列型BigQuery では、すべての Int 型(INTSMALLINTINTEGERBIGINTTINYINTBYTEINT)は INT64 のエイリアスです。テンプレートは定義されたカラム型(Int8Int16Int32Int64)に基づいてカラムを変換するため、ClickHouse では適切な整数サイズを設定することを推奨します。
数値 - 整数型整数型BigQuery では、すべての Int 型(INTSMALLINTINTEGERBIGINTTINYINTBYTEINT)は INT64 のエイリアスです。テンプレートは定義されたカラム型(Int8Int16Int32Int64)に基づいてカラムを変換するため、ClickHouse では適切な整数サイズを設定することを推奨します。また、ClickHouse テーブルで符号なし整数型(UInt8UInt16UInt32UInt64)が使用されている場合も、テンプレートはそれらにも変換します。
数値 - 浮動小数点型浮動小数点型サポートされる ClickHouse 型:Float32 および Float64 がサポートされています。

テンプレートの実行

BigQuery から ClickHouse へのテンプレートは、Google Cloud CLI を通じて実行できます。

注記

本ドキュメント、とくに前述のセクションをよく確認し、テンプレートの構成要件と前提条件を十分に理解してください。

Google Cloud Console にサインインし、Dataflow を検索します。

  1. CREATE JOB FROM TEMPLATE ボタンを押します
    Dataflow コンソール
  2. テンプレートフォームが開いたら、ジョブ名を入力し、希望するリージョンを選択します。
    Dataflow テンプレートの初期フォーム
  3. Dataflow Template 入力欄に ClickHouse または BigQuery と入力し、BigQuery to ClickHouse テンプレートを選択します
    BigQuery to ClickHouse テンプレートの選択
  4. テンプレートを選択すると、追加の詳細を入力できるようにフォームが展開されます:
    • ClickHouse サーバーの JDBC URL(形式: jdbc:clickhouse://host:port/schema)。
    • ClickHouse のユーザー名。
    • ClickHouse のターゲットテーブル名。

注記

ClickHouse のパスワードオプションは、パスワードが設定されていないユースケース向けに省略可能としてマークされています。 パスワードを追加するには、Password for ClickHouse Endpoint オプションまでスクロールしてください。

BigQuery to ClickHouse 拡張テンプレートフォーム
  1. テンプレートパラメータ セクションで説明されているとおりに、BigQuery/ClickHouseIO 関連の設定をカスタマイズして追加してください。

ジョブの監視

Google Cloud Console の Dataflow Jobs タブ に移動し、 ジョブのステータスを監視します。進捗状況やエラーなどのジョブの詳細を確認できます。

BigQuery から ClickHouse へのジョブが実行中の Dataflow コンソール

トラブルシューティング

メモリ制限(合計)超過エラー(コード 241)

このエラーは、大きなバッチのデータを処理している際に ClickHouse のメモリが不足した場合に発生します。これを解決するには、次の対応を行います。

  • インスタンスのリソースを増やす: データ処理負荷に対応できるよう、より多くのメモリを持つ大きなインスタンスに ClickHouse サーバーをアップグレードします。
  • バッチサイズを減らす: Dataflow ジョブ設定でバッチサイズを調整し、より小さなデータチャンクを ClickHouse に送信することで、バッチごとのメモリ消費を抑えます。これらの変更により、データインジェスト時のリソース使用をバランスさせることができます。

テンプレートのソースコード

このテンプレートのソースコードは、ClickHouseの DataflowTemplates フォーク先リポジトリで公開されています。