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

BigQuery から ClickHouse へのデータのロード

このガイドは ClickHouse Cloud とセルフマネージド ClickHouse v23.5+ に対応しています。

このガイドでは、BigQuery から ClickHouse へのデータ移行方法を説明します。

まず、テーブルを Google のオブジェクトストレージ (GCS) にエクスポートし、そのデータを ClickHouse Cloud にインポートします。これらの手順は、BigQuery から ClickHouse にエクスポートしたい各テーブルごとに繰り返す必要があります。

ClickHouse へのデータエクスポートにかかる時間はどれくらいですか?

BigQuery から ClickHouse へのデータエクスポートは、データセットのサイズに依存します。比較として、今回のガイドを使用して 4TB の公開 Ethereum データセット を BigQuery から ClickHouse にエクスポートするのに約1時間かかります。

テーブル行数エクスポートされたファイルデータサイズBigQuery エクスポートスロット時間ClickHouse インポート
blocks16,569,4897314.53GB23秒37分15.4秒
transactions1,864,514,4145169957GB1分38秒1日 8時間18分5秒
traces6,325,819,30617,9852.896TB5分46秒5日 19時間34分55秒
contracts57,225,83735045.35GB16秒1時間51分39.4秒
合計82.6 億23,5773.982TB8分3秒> 6日 5時間53分45秒

1. テーブルデータを GCS にエクスポートする

このステップでは、BigQuery SQL ワークスペース を利用して SQL コマンドを実行します。以下に、BigQuery テーブル mytable を GCS バケットにエクスポートする方法を示します。EXPORT DATA ステートメントを使用します。

上記のクエリでは、BigQuery テーブルを Parquet データフォーマット にエクスポートします。また、uri パラメータに * 文字が含まれています。これにより、エクスポートが 1GB を超えた場合に出力が複数のファイルにシャードされ、数値が増加するサフィックスが付きます。

このアプローチにはいくつかの利点があります。

  • Google では、GCS に対して最大 50TB を毎日無料でエクスポートすることができます。ユーザーは GCS ストレージのみに支払います。
  • エクスポートは自動的に複数のファイルを生成し、各ファイルを最大 1GB のテーブルデータに制限します。これは ClickHouse にとって有益で、インポートを並列化することを可能にします。
  • Parquet は列指向フォーマットであり、本質的に圧縮されているため、BigQuery のエクスポートおよび ClickHouse のクエリ用のより良い相互運用フォーマットを提供します。

2. GCS から ClickHouse にデータをインポートする

エクスポートが完了すると、このデータを ClickHouse テーブルにインポートできます。ClickHouse SQL コンソール または clickhouse-client を使用して以下のコマンドを実行できます。

まず、ClickHouse にテーブルを 作成する 必要があります。

テーブルを作成した後、クラスター内に複数の ClickHouse レプリカがある場合は、エクスポートを高速化するために設定 parallel_distributed_insert_select を有効にします。ClickHouse ノードが1つだけの場合は、このステップをスキップできます。

最後に、INSERT INTO SELECT コマンド を使用して、GCS から ClickHouse テーブルにデータを挿入できます。このコマンドは、SELECT クエリの結果に基づいてテーブルにデータを挿入します。

挿入するデータを取得するために、GCS バケットからデータを取得するために s3Cluster 関数 を使用できます。これは、GCS が Amazon S3 と相互運用可能であるためです。ClickHouse ノードが1つだけの場合は、s3Cluster 関数の代わりに s3 テーブル関数 を使用できます。

上記のクエリで使用される ACCESS_IDSECRET は、GCS バケットに関連付けられた HMAC キー です。

注記
Nullable カラムをエクスポートする際は ifNull を使用

上記のクエリでは、some_text カラムに対して ifNull 関数 を使用して、デフォルト値で ClickHouse テーブルにデータを挿入しています。また、ClickHouse でカラムを Nullable にすることもできますが、パフォーマンスに悪影響を与える可能性があるためお勧めできません。

また、SET input_format_null_as_default=1 を実行すると、指定されたデフォルト値がある場合、欠落しているまたは NULL の値がそれぞれのカラムのデフォルト値に置き換えられます。

3. データエクスポートの成功をテストする

データが正しく挿入されたかをテストするには、新しいテーブルで単純に SELECT クエリを実行します。

さらに BigQuery テーブルをエクスポートするには、上記の手順を各追加のテーブルに対して再実行してください。

さらなる情報とサポート

このガイドに加えて、ClickHouse を使用して BigQuery の速度を向上させ、増分インポートを処理する方法を示すブログ投稿を読むこともお勧めします。

BigQuery から ClickHouse にデータを転送する際に問題がある場合は、[email protected] までお気軽にお問い合わせください。