BigQueryのバックアップ方法(私のメモ)


はじめに

メモ記事です。
公式ドキュメントに記載があるので、そちらを参照したほうが良いです。

TL;DR

・ BigQueryのスナップショットと復元を調査
・ スナップショットデコレータはレガシーSQLのみ(今後なくなる?)
・ テーブルスナップショット(方法1)でスケジューラを回して対応

内容

BigQuery におけるコスト最適化の ベスト プラクティスを見てバックアップしようと思いました。

記載のリンクを辿りバックアップの方法をいくつか確認できました。

方法1) テーブルスナップショットを取得してバックアップと復元

スナップショットを定期的に取得する方法。
テーブル スナップショットの概要
(結論、シビれる復旧要件はないため、これを選択しました)

CREATE SNAPSHOT TABLE
`project.snapshot_dataset.snapshot_table`
clone `project.source_dataset.source_table`

復旧方法

create table `project.restore_dataset.restore_table`
clone `project.snapshot_dataset.snapshot_table`

方法2) スナップショットデコレータによるバックアップと復元

変更履歴を7日間保持しているとのことです。

Select COUNT(*) FROM [Project_ID:Dataset.Table@-3600000]

ただし、レガシーSQLです、、、。
BigQueryのバックアップ機能(スナップショット デコレータ)を利用する方法

ですので、こんな感じのSQLで復旧できそう。

createtable.sql
create table `project.restore_dataset.restore_table`
as Select * FROM [project.snapshot_dataset.snapshot_table@-3600000]

※ レガシーのためsqlは未検証。

方法3) データエクスポートによる方法

データの障害復旧シナリオに記載のあるデータエクスポートでの対応。
めんどうくさい、、、。

まとめ

BigQueryの障害でテーブルが消えたなんて聞かないので、人的ミスから復元する方法が必要かと思っております。
ですので、定期スナップショットをとって復元する方法が良いのかなと思いました。
(ただ数時間前に戻してーーーって時にスナップショットデコレータが必要なのかな、、、)