【BigQuery Preview】異なるリージョン間のコピー Cross Region Copy

2023.03.15

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

まえおき

Google Cloudのデータエンジニアをしています、はんざわです。
自分はBigQueryの検証を行う時に一般公開データセットを利用することが多いのですが、そのほとんどがUSやEUの特定のロケーションに保存されています。これらのデータセットを東京リージョンで扱いたいケースがありました。
そこで利用したBigQuery Data Transfer ServiceのCross Region Copyを今回は紹介したいと思います。

https://cloud.google.com/bigquery/docs/copying-datasets?hl=ja

やりたいこと

東京リージョンのデータセットを作成

## 東京リージョンのデータセット作成
bq --location=asia-northeast1 mk \
     --dataset \
     hanzawa-yuya:samples_dataset

一般公開データセットをコピーしてみる

bq cp bigquery-public-data:samples.github_nested hanzawa-yuya:sample_datasets.github_nested

BigQuery error in cp operation: Not found: Dataset hanzawa-yuya:sample_datasets
If the error provided does not help solve your issue, please run the command again with the `--apilog=stderr flag`.

このように異なるリージョンにコピーしようとするとデータセットが見つかりませんとエラーを吐いてしまいます。
これは大阪リージョンから東京リージョンにコピーするような場合も同様のエラーが発生してしまいます。

BigQuery Data Transfer Service

BigQuery Data Transfer Serviceは様々なデータソースからデータの読み込みを行うことができます。
現在対応しているデータソースは以下のURLに記載されています。

https://cloud.google.com/bigquery/docs/dts-introduction?hl=ja#supported_data_sources

この中で今回のケースようなリージョンを超えたテーブルのコピーはデータセットコピーにあたります。
2023年3月時点でデータセットコピーはプレビューのサービスになります。

https://cloud.google.com/bigquery/docs/copying-datasets?hl=ja

さっそく触ってみる

BigQueryの管理コンソール画面からデータ転送を選択します。

次のような画面に移動し、転送を作成を選択します。

次に転送のジョブを作成するために必要な情報を入力していきます。

ソースにDataset Copyを選択し、ジョブの名前と転送元のテーブル情報と転送先のデータセットの3つを入力します。

ジョブが作成されました。しばらくすると転送ジョブが完了します。ジョブの進行状況はログで確認できます。

無事に転送されました。

注意点

  1. 転送ジョブは実行後、デフォルトで24時間毎にスケジュールされます。必要なければジョブは削除しましょう。
  2. 制限がいくつかあります。特に転送するテーブルが多い場合は気をつけましょう。

まとめ

今回はBigQuery Data Transfer ServiceのCross Region Copyを紹介しました。
従来の方法だと移動させたいリージョンのGCSを作成 → そのGCSにエクスポート → 外部テーブルとして読み込むことでテーブルの移動が可能でした。この方法に比べると非常に簡単で大量のテーブルを転送できると思います。
もちろん従来の方法でしかできないこと(範囲を縛ったり)もあるので上手く使い分けていきましょう。