🔙
BigQueryのテーブルデータをCloud Storageにバックアップする
2024-03-26
2024-04-10
約1123字
データ基盤の運用において、データウェアハウスのデータを外部のストレージにバックアップすることは重要な業務の一つです。
などのユースケースで、有用なアプローチです。
今回、Google Cloud(GCP) のBigQueryから Google Cloud Storage(以下 GCS) にデータをバックアップする方法を紹介します。
※ BigQueryには、タイムトラベルとフェイルセーフにより削除後、最大14日間復元ができます。
bqコマンドで実行する例を記載します。
コマンドの実行者は、以下の権限が必要になります。
terraformでroleを管理している場合は、google_project_iam_member
のリソースに適宜、権限を追加してください。
以下のコマンドを実行すると、BigQueryからGCSにデータがエクスポートされます。
destination_format: parquet形式がおすすめです。csv形式ですと、ArrayなどのNest形式の変換ができず失敗することがあります。例えば、Google Analytics(GA4)のデータをBigQueryにエクスポートしている際は、ネストされているデータが含まれます。
GCSのファイル名には、アスタリスクを含めることもおすすめです。1ファイルあたりの上限が1GBですが、アスタリスクをつけると適宜分割されます。サフィックスに 000000000000
のから始まる連番が振り分けられます。
# bq extract location=asia-northeast1 \
--destination_format PARQUET \
${project}:${dataset}.${table} \
gs://${bucket}/${filename_prefix}-*.parquet
また、BigQueryテーブルのスキーマ情報もダンプしておくこともおすすめです。
# bq show --format=prettyjson \
${project}:${dataset}.${table} | jq '.schema.fields' > schema.json
# gcloud storage mv ./schema.json gs://${bucket}/
バックアップ時の権限に加え、BigQueryにデータを書く必要があるので、
の権限が必要になります。(roles/bigquery.dataEditorを付与した場合、roles/bigquery.dataViewerは無くして問題なです)
以下のコマンドを実行すると、GCSにバックアップしたデータをBigQueryにリストアできます。
bq loadする際に、スキーマ情報が必要になるので、先ほどダンプしたschema.jsonを使います。
# gcloud storage cp gs://${bucket}/schema.json .
# bq --location=asia-northeast1 load \
--source_format=PARQUET \
--replace \
${dataset}.${table} \
gs://${bucket}/${filename_prefix}-*.parquet
./schema.json
今回、コンソール上で、手軽にBigQueryデータをバックアップ/リストアする方法をまとめました。
BigQueryやGCSの操作は、Pythonクライアントを利用しても簡単に行えます。Cloud Schedulerなどを組み合わせてhttp経由でCloud Run / Cloud Functionsを実行しバックアップを定期実行するなども有用です。
©︎ 2025 - Yard