概要
Google Cloudの資格の一つである、「Professional Data Engineer」の勉強メモとしてまとめようと思っています。
今回はBigQueryのバックアップについてまとめてみました。
お願い
勉強中ですので、内容が間違っている可能性があります。
その際はご指摘いただければ幸いです。
更新履歴
- 2024.02.14 新規作成
バックアップ方法
タイムトラベル機能
2-7日間(デフォルトは7日)で指定した期間のうちの変更分を保持していますので、任意の時に戻せるような機能が標準で備わっています。
リージョン障害には対応できませんが、7日以内でのデータ修正などには利用可能です。
また、誤ってデータを削除し、タイムトラベルで指定した期間が過ぎた場合はフェールセーフ機能によって7日間は保持されるそうです。
テーブルスナップショット
ある特定の地点のデータを残したい場合に利用します。
VMのスナップショットみたいな感じで、データ更新する前やパイプライン処理を保守した際、念のため取っておくという使い方になるかなと思います。
スナップショットはタイムトラベルの期間を過ぎてもに残るので、例えば14日前のデータ更新が間違っていたことが分かった場合に戻すことができたりします。
ただ、スナップショットはCopy on Writeなので料金が発生しませんが、元のテーブルでデータの変更が発生すると料金が発生します。
※追加では発生しないようです。
更新の仕方によっては想定以上の料金が発生するため、更新頻度が低いデータについて使用するのがよさそうです。
また、テーブルクローンもありますが、こちらはどちらかというとサンドボックス的な使い方になると思われますので、割愛します。
データセットのコピー
注意
2024.02.12時点でまだpre-GAです。
データセットのコピーは、単純に別のデータセットにデータをコピーするだけとなります。同一リージョンでも、別リージョンでも可能です。
このコピーにはBigQuery Data Transfer Service が使用されていますので、データバックアップを特定の周期で取得することが可能です。別リージョンにコピーしておくと、リージョン障害時の事業継続も可能になります。
ただ、このデータコピーはフルコピーなので料金は倍かかります。
GCS(Google Cloud Storage)へのExport
BigQueryの各テーブルデータをGoogle Cloud StorageへExportすることが可能です。
Exportするファイルの種類も様々ありますので、毎日のデータをバックアップする際に利用できます。
ただし、ExportするGCSを配置するリージョンはBigQueryと同じリージョンにしていないと、復旧の際に戻せなくなります。
毎日のデータをバックアップするのに一番適しているやり方だと思われます。
どんな問題が出そうか
注意
実際の問題を見ていないので、調べた内容から私が勝手に問題にできそうなものを書いています。
問題を出す上でキーワードになりそうと思ったのは以下です。
- 7日以内
7日以内のデータを変更時に戻したいときどうするかという問題でタイムトラベルを選択させるというのが問題にしやすそうだなと思います。
ただし、テーブルを削除してしまっているなどあればタイムトラベルは使えないので、この2つを条件に出して問題が作れそうだなと思います。 - 8日以降(例:9日前とか2週間前とか)
- データ更新頻度
- コスト
- リージョン障害
上記の4つを元に問題を出せそうな気がします。
例1)
更新頻度低いデータに対して、2日後に作業で更新が発生する。
次回更新されるのが10日後の時、作業で実施した更新が原因だった場合元に戻したい。
2日後の作業でコストを最も小さくしつつバックアップを取得する方法はなにかという問題で、スナップショットを選ばせるという問題ができます。
例2)
更新頻度が低いデータに対して、3日後に作業で更新が発生する。
次回更新されるのが13日後の時、作業で実施した更新が原因だった場合元に戻したい。また、作業後にリージョン障害が発生した際にも別リージョンでデータを参照できるようにしたい。
3日後の作業でバックアップをどのように取得する方法は何かといった問題で、テーブルクローンを選ばせるという問題ができます。
例3)
更新頻度が高いデータ(毎日1回更新)に対して、7日間を過ぎてから更新前のデータを見たい場面が発生する。
この時、コストを最も小さくしつつバックアップをどのように取得する方法はなにかといった問題で、GCSへのExportを選ばせるという問題ができます。