テックブログ

Dataflowを使ってBigQueryからSpannerにデータを移行する

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に書き込むことなどデータ移行の際はよく使われるサービスだと思います。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です