mediba Advent カレンダー 21日目 ということで、左海からは「BigQuery データセット レプリケーションを利用してBigQueryデータセットのロケーションを変更する」お話についてです。
はじめに
最近アサインされた案件にて、外部のGCPプロジェクトにあるBigQueryのGA4データセットを弊社管理のGCPに連携するには、弊社管理のGCP内のGA4データセットのロケーションを連携元に揃える必要がありました。
ゆえに、BigQueryのデータセットのロケーション変更を行うため、データセット レプリケーションを試してみることにしました。
他にCopy tables across regionsで、移行先のデータセット配下に移行元のテーブルをコピーする方法もありましたが、時間と手間がかかるためデータセット レプリケーションを選びました。
データセット レプリケーションは2023/12/17時点でプレビュー版であるため、商用環境での利用にはご注意ください。
BigQuery データセット レプリケーションとは
データセット レプリケーションとは既存のデータセットとは異なるリージョンで、データセットのレプリカ(複製)を作成する機能になります。
以下の図の場合、US
リージョンのanalytics_123
というデータセット(プライマリ レプリカ)のレプリカ(セカンダリ レプリカ)がasia-northeast1
リージョンとして作成されています。
セカンダリレプリカには、プライマリレプリカのデータが非同期的に複製され続けます。
BigQuery データセットのロケーション変更
では、実際に以下の手順でUS
マルチリージョンのデータセットhoge
をasia-northeast1
リージョンに移行します。
-
asia-northeast1
リージョンとしてレプリカを作成する - セカンダリレプリカをプライマリレプリカに昇格させる
- レプリカを削除する
レプリカを作成する
データセット名hoge
のレプリカhoge_tokyo
をasia-northeast1
リージョンとして作成するため、以下のクエリを実行します。
ALTER SCHEMA hoge
ADD REPLICA `hoge_tokyo`
OPTIONS(location='asia-northeast1');
以下のクエリを実行すれば、レプリカが作成されたか/後述のセカンダリレプリカがプライマリレプリカに昇格したかクエリの実行結果で確認することができます。
SELECT
*
FROM
`region-us`.INFORMATION_SCHEMA.SCHEMATA_REPLICAS;
セカンダリレプリカをプライマリレプリカに昇格させる
以下クエリで、作成したレプリカhoge_tokyo
をプライマリレプリカに昇格させることでasia-northeast1
がプライマリリージョンとなり、ロケーション変更が完了します。
この時、US
マルチリージョンのレプリカはセカンダリレプリカに降格し、セカンダリリージョンとなります。
ALTER SCHEMA hoge SET OPTIONS(primary_replica = 'hoge_tokyo')
上記クエリ実行時に、以下のエラーが表示されるのですが、クエリの設定でジョブのロケーションをセカンダリ リージョン(asia-northeast1
)に明示的に設定する必要があるようです。
The primary replica can only be assigned from the replica region: asia-northeast1.
添付画像の通り、無事にデータのロケーションがUS
からasia-northeast1
に変更されました。
参考までに、GA4データセットのロケーションを変更する際は、セカンダリレプリカを昇格させた後にGA4プロパティ側で、既存のBQエクスポートを削除し、新たに移行先のリージョンとしてBQエクスポートを開始する必要があります。
レプリカを削除する
最後に、不要なレプリカ(US
マルチリージョン)を削除します。
ALTER SCHEMA hoge
DROP REPLICA IF EXISTS us;
この手順は必須ではないのですが、GCPの費用レポートで以下の費用が計上されていたのでコスト削減のためにも不要なレプリカは削除した方がよいでしょう。
Replication Networking Traffic for Google Cloud Cross Region/Inter Region between NorthAmerica and Asia
おわりに
データセット レプリケーションを試してみたのですが、SQLを数回実行するだけでロケーションを変更できるのはかなり便利でした。
ただ、懸念としてロケーション変更前のデータセットに対して、BigQueryやLooke Studioで以下の機能を利用している場合には、機能ごとにも移行先のロケーションとして再登録、再接続が必要です。※あくまで一部です。
- BigQuery
- スケジュールクエリ
- BigQuery Editionのスロットの予約
- Looker Studio
- Looker Studioのデータソース(BigQueryテーブル/カスタムクエリ)
対応を忘れてしまうと、スケジュールクエリが停止したり、Looker Studioでグラフが閲覧できなくなったりするので、注意しておきたいです。
どなたかの参考になれば、幸いです。