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 インポート |
|---|---|---|---|---|---|---|
| blocks | 16,569,489 | 73 | 14.53GB | 23 secs | 37 min | 15.4 secs |
| transactions | 1,864,514,414 | 5169 | 957GB | 1 min 38 sec | 1 day 8hrs | 18 mins 5 secs |
| traces | 6,325,819,306 | 17,985 | 2.896TB | 5 min 46 sec | 5 days 19 hr | 34 mins 55 secs |
| contracts | 57,225,837 | 350 | 45.35GB | 16 sec | 1 hr 51 min | 39.4 secs |
| 合計 | 8.26 billion | 23,577 | 3.982TB | 8 min 3 sec | > 6 days 5 hrs | 53 mins 45 secs |
テーブルデータを GCS にエクスポート
この手順では、BigQuery SQL workspace を使用して SQL コマンドを実行します。以下では、EXPORT DATA 文を使用して、mytable という名前の BigQuery テーブルを GCS バケットにエクスポートします。
上記のクエリでは、BigQuery テーブルを Parquet データ形式 にエクスポートしています。また、uri パラメータに * 文字を含めています。これにより、エクスポートが 1GB のデータを超える場合、出力が数値的に増加するサフィックスを持つ複数のファイルに分割されることが保証されます。
このアプローチには以下の利点があります。
- Google では、1 日あたり最大 50TB までのデータを無料で GCS にエクスポートできます。GCS のストレージ料金のみが課金対象になります。
- エクスポートは自動的に複数のファイルを生成し、各ファイルのテーブルデータを最大 1GB に制限します。これによりインポート処理を並列実行できるため、ClickHouse にとって効率的です。
- Parquet はカラム指向フォーマットであり、本質的に圧縮されているため、BigQuery からのエクスポートや ClickHouse によるクエリ実行が高速で、データ交換フォーマットとしてより優れています。
GCS から ClickHouse へのデータインポート
エクスポートが完了したら、このデータを ClickHouse のテーブルにインポートできます。以下のコマンドを実行するには、ClickHouse SQL console か clickhouse-client を使用できます。
まず ClickHouse でテーブルを作成しておく必要があります。
テーブルを作成したら、クラスタ内に複数の ClickHouse レプリカがある場合は、エクスポート処理を高速化するために parallel_distributed_insert_select 設定を有効にしてください。ClickHouse ノードが 1 つだけの場合は、この手順はスキップして構いません。
最後に、INSERT INTO SELECT コマンド を使用して、GCS から ClickHouse テーブルにデータを挿入します。このコマンドは、SELECT クエリの結果に基づいてテーブルにデータを挿入します。
INSERT するデータを取得するには、s3Cluster 関数 を使用して GCS バケットからデータを読み取ります。GCS は Amazon S3 と相互運用可能なため、これが利用できます。ClickHouse ノードが 1 台だけの場合は、s3Cluster 関数の代わりに s3 テーブル関数 を使用できます。
上記のクエリで使用されている ACCESS_ID と SECRET は、GCS バケットに関連付けられた HMAC キー です。
データエクスポートの成功テスト
データが正しく挿入されたかどうかをテストするには、新しいテーブルに対して SELECT クエリを実行してください。
追加の BigQuery テーブルをエクスポートするには、テーブルごとに上記の手順を繰り返してください。
参考資料とサポート
このガイドに加えて、ClickHouse を使って BigQuery を高速化する方法と、インクリメンタルインポートを処理する方法 を解説したブログ記事もあわせてご覧いただくことをおすすめします。
BigQuery から ClickHouse へのデータ転送に問題が発生した場合は、support@clickhouse.com までお気軽にお問い合わせください。