メインコンテンツまでスキップ
メインコンテンツまでスキップ

Dataflow BigQuery to ClickHouse テンプレート

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

パイプライン要件

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

テンプレートパラメータ



パラメータ名パラメータの説明必須備考
jdbcUrlClickHouse JDBC URL の形式 jdbc:clickhouse://<host>:<port>/<schema>ユーザー名とパスワードを JDBC オプションとして追加しないでください。他の JDBC オプションは JDBC URL の末尾に追加できます。ClickHouse Cloud ユーザーの場合、jdbcUrlssl=true&sslmode=NONE を追加してください。
clickHouseUsername認証に使用する ClickHouse のユーザー名。
clickHousePassword認証に使用する ClickHouse のパスワード。
clickHouseTableデータを挿入する対象の ClickHouse テーブル名。
maxInsertBlockSize挿入用の最大ブロックサイズ。ブロックの作成を制御する場合(ClickHouseIO オプション)。ClickHouseIO オプション。
insertDistributedSync設定が有効な場合、分散クエリはデータがクラスター内のすべてのノードに送信されるのを待ちます。(ClickHouseIO オプション)。ClickHouseIO オプション。
insertQuorumレプリケートされたテーブルの INSERT クエリのため、指定された数のレプリカに書き込みが待機し、データの追加を線形化します。 0 - 無効。ClickHouseIO オプション。この設定はデフォルトのサーバー設定では無効です。
insertDeduplicateレプリケートされたテーブルの INSERT クエリのため、挿入ブロックの重複排除を実施することを指定します。ClickHouseIO オプション。
maxRetries挿入毎の最大リトライ回数。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>。デフォルトでは GoogleSQL ですが、useLegacySql が true の場合を除きます。inputTableSpec または query のいずれかを指定する必要があります。両方のパラメータを設定すると、テンプレートは query パラメータを使用します。例: SELECT * FROM sampledb.sample_table
useLegacySqlLegacy 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 テーブル定義に基づいて変換されます。したがって、上記の表にはあなたのターゲット ClickHouse テーブルで持つべき推奨マッピングがリストされています(特定の BigQuery テーブル/クエリに対して):

BigQuery タイプClickHouse タイプ備考
Array タイプArray タイプ内側のタイプは、この表にリストされているサポートされているプリミティブデータタイプの一つである必要があります。
Boolean タイプBool タイプ
Date タイプDate タイプ
Datetime タイプDatetime タイプEnum8Enum16 及び FixedString でも動作します。
String タイプString タイプBigQuery では、すべての Int タイプ(INTSMALLINTINTEGERBIGINTTINYINTBYTEINT)が INT64 のエイリアスです。テンプレートは定義されたカラムタイプ(Int8Int16Int32Int64)に基づいてカラムを変換するため、ClickHouse で適切な整数サイズを設定することをお勧めします。
Numeric - Integer TypesInteger TypesBigQuery では、すべての Int タイプ(INTSMALLINTINTEGERBIGINTTINYINTBYTEINT)が INT64 のエイリアスです。テンプレートは定義されたカラムタイプ(Int8Int16Int32Int64)に基づいてカラムを変換するため、ClickHouse で適切な整数サイズを設定することをお勧めします。未割り当ての Int タイプが ClickHouse テーブルで使用される場合も変換されます(UInt8UInt16UInt32UInt64)。
Numeric - Float TypesFloat Typesサポートされている ClickHouse タイプ: Float32 および Float64

テンプレートの実行

BigQuery to ClickHouse テンプレートは Google Cloud CLI による実行が可能です。

注記

この文書を確認し、特に上記のセクションを確認して、テンプレートの設定要件と前提条件を完全に理解してください。

gcloud CLI のインストールと構成

  • まだインストールしていない場合は gcloud CLI をインストールします。
  • このガイド の「始める前に」セクションに従って、DataFlow テンプレートを実行するために必要な構成、設定、および権限を設定します。

コマンドの実行

gcloud dataflow flex-template run コマンドを使用して、Flex テンプレートを使用する Dataflow ジョブを実行します。

以下はコマンドの例です:

コマンドの詳細

  • ジョブ名: run キーワードに続くテキストがユニークなジョブ名です。
  • テンプレートファイル: --template-file-gcs-location で指定された JSON ファイルは、テンプレートの構造と受け入れ可能なパラメータに関する詳細を定義します。言及されたファイルパスは公開されており、すぐに使用可能です。
  • パラメータ: パラメータはカンマで区切られます。文字列ベースのパラメータの場合、値を二重引用符で囲みます。

期待される応答

コマンドを実行すると、以下のような応答が表示されるはずです:

ジョブの監視

Google Cloud Console の Dataflow Jobs タブ にアクセスして、ジョブの状態を監視します。進捗やエラーを含むジョブの詳細を確認できます:

DataFlow running job

トラブルシューティング

コード: 241. DB::Exception: メモリ制限 (合計) 超過

このエラーは、ClickHouse が大きなデータバッチを処理する際にメモリ不足になると発生します。この問題を解決するには:

  • インスタンスリソースを増やす: より大きなインスタンスに ClickHouse サーバーをアップグレードして、データ処理の負荷に対処します。
  • バッチサイズを減少させる: Dataflow ジョブの設定でバッチサイズを調整し、ClickHouse に送信するデータのサイズを小さくし、バッチ毎のメモリ消費を減らします。 これらの変更は、データの取り込み中のリソース使用のバランスを取るのに役立つかもしれません。

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

テンプレートのソースコードは、ClickHouse の DataflowTemplates フォークで入手できます。