AIは利用せず完全に人の手で記載しています。
はじめに
100GBを超える大量のデータを扱う機会があり、BigQueryからデータ加工を行いSpannerに保存する際の知見を残そうと思います。
Dataflowは自前で利用することも可能ですが、テンプレートを利用します。
細かい設定方法は割愛し、全体の概要を解説します。
Dataflowとは、データ分析のために必要なデータを抽出・加工し、指定した環境へ出力するETL(抽出・変換・読み込み)の役割を担うサービスです。
処理フロー

Step1: BigQueryからavroファイルを作成してGCSに置く
Step2: GCSからDataflowを使ってSpannerに移行する
という流れで大量のデータをSpannerに移行します。
Step1: BigQueryからavroファイルを作成してGCSに置く
Avroファイルとは、データの構造(型情報)を一緒に持ち運べる、高速・軽量なデータファイルです。大量データを扱うデータ基盤や分散処理の世界では標準的に使われています。バイナリファイルなので人間が読みにくいものではあります。
Avroファイルの特徴
・CSVだと「001」や「1」の判別ができずに型崩れする可能性がありますが、型崩れが起きない
・ファイルが小さく処理が高速にできる
・並列処理が可能(ファイルの中身を細かく分散できる)
BigQuery特有の構文「EXPORT DATA」を使用し、BigQuery内でのデータ加工(集計・変換)と
Cloud Storage(GCS)へのファイル出力を一度に行います。
-- ▼ 出力設定:GCSの保存先やファイル形式を指定します
EXPORT DATA OPTIONS(
-- 出力先のGCSパス。
-- BigQueryが並列処理で複数ファイルを出力するため、末尾に「*」を付ける必要があります。
-- (例:data_000000000000.avro として自動連番が付与されます)
uri='gs://XXXXX/data_*.avro',
-- 出力フォーマットを、後続のDataflowで扱いやすいAvro形式に指定
format='AVRO',
-- ファイルを圧縮してサイズを小さくし、転送・読み込みを高速化
compression='SNAPPY',
-- 再実行時に同じ名前のファイルがあれば上書きする(検証時に便利な設定)
overwrite=true
) AS
-- ▼ データ抽出・変換ロジック:Spannerのテーブル定義に合わせてデータを加工します
SELECT ~~
-- データの取得元テーブル(BigQuery)
FROM `XXXXX`;
Step2: GCSからDataflowを使ってSpannerに移行する

DataflowAPIを有効化して利用できるようにします。
実際の設定は難しくないですが、DataflowはGCSコンソールの設定のDtaflowテンプレートに「Avro Files on Cloud Storage to Cloud Spanner」があります。これによってGCSに置いたavroファイルを移行できます。
気を付けないといけないところはVPCが必要になるところです。
Dataflowは一時的な仮想サーバー(Compute Engine) が自動で立ち上がってデータ処理を行います。仮想サーバーを立ち上げる際の土地としてVPCが必要になります。
構築時のネットワークの環境によってはVPCをプロジェクトに立てるのか共通VPCを利用するのかは選択が必要かと思います。
最後に
簡単にですがBigQueryからSpannerにDataflowを使って移行する概要を記載しました。DataflowはBigueryに書き込むことなどデータ移行の際はよく使われるサービスだと思います。


