2022.02.28 コラム
【テックコラム】テーブルスナップショットでBigQuery の喪失データを復元してみる
● はじめに
こんにちは!DataCurrent のジョージです。
データ分析プラットフォームとして定番の BigQuery は便利な一方で、オペレーションミスやプログラムの不具合等でデータの破損や喪失が起きてしまうリスクもあったりします。
そうしたことが起きないよう、様々なリスクを低減することが大事なのはもちろんですが、予め復旧できるよう備えておくこともまた大事だと思います。
ということで本日は、BigQueryのデータが破損や喪失してしまった時に復旧するための方法の1つとして、2021年10月にGA(Generally Available)になった機能「テーブルスナップショット」をご紹介します。
● テーブルスナップショット とは
公式ドキュメントにわかりやすい説明があるので、引用します。
BigQuery テーブル スナップショットでは、特定の時点でのテーブルの内容(ベーステーブルと呼ばれます)が保持されます。現在のテーブルのスナップショットを保存することや、過去 7 日間の任意の時点におけるテーブルのスナップショットを作成することが可能です。
引用元:Google Cloud テーブル スナップショットの概要
ちなみに、テーブルスナップショットにはストレージ費用がかかるのですが、ベーステーブルに存在するデータにはかかりません。
ベーステーブルから削除したり変更されたデータにのみ費用がかかる点もありがたい点です。
今回は以下のシナリオで試してみたいと思います。
- テーブルスナップショットを作る
- ベーステーブル(テーブルスナップショットの元テーブル)から一部のデータを削除する
- テーブルスナップショットに削除したデータが存在していることを確認し、ベーステーブルを復元する
それでは、早速やってみましょう!
● テーブルスナップショットを作る
テーブルスナップショットの元となるテーブル(ベーステーブル)は、3つのカラムを持つテーブルに3レコード入っているシンプルなものにします。
テーブルスナップショットの作り方は コンソール、SQL、bqコマンド、API がありますが、今回はコンソールでやってみます。
- ベーステーブル(テーブルスナップショットの元テーブル)の詳細タブから「スナップショット」をクリック
- テーブルスナップショットの作成画面が立ち上がるので各項目をセット
- スナップショットを保存するプロジェクト
- スナップショットを保存するデータセット
- スナップショットテーブルの名前
- スナップショットテーブルの有効期限
- スナップショットを取る日時(過去7日間まで遡ることができます)
- 「保存」ボタンをクリック
これでスナップショットテーブルができました。
念のため、確認してみます。
ベーステーブルと同じ値が確認できました。
● ベーステーブル(テーブルスナップショットの元テーブル)から一部のデータを削除する
では、次にベーステーブルから一部のデータを削除してみます。
id 2 の 田中さん を削除し、ベーステーブルからなくなったことを確認します。
id 2 の田中さん のデータが削除されたことが確認できました。
● テーブルスナップショットに削除したデータが存在していることを確認し、復元する
最後に、テーブルスナップショットには削除した id 2 田中さんが存在している事を確認し、ベーステーブルを復元してみます。
ベーステーブルから削除された後も、テーブルスナップショットの方には田中さんが残っている事が確認できました。
それでは、ベーステーブルを復元させてみましょう。
方法は簡単で、スナップショットテーブルの「復元」から、復元先を指定するだけです。
「テーブル」にベーステーブルを指定し、「テーブルが存在する場合は上書きする」にチェックを入れると、スナップショットテーブルの内容でベーステーブルを上書きする事ができます。
今回はその方法でやってみます。
これで復元されたはずです。
それでは、最後にベーステーブルが復元された事を確認してみます。
田中さんが復活していれば成功です。
田中さんが無事に戻ってきました。復元成功です!
●さいごに
このような形で、スナップショットテーブル機能によって誤って変更や喪失してしまったテーブルを復元する事ができます。
ただ、以下の制限事項がある点に留意して利用しましょう。
・テーブル スナップショットは、ベーステーブルと同じリージョン内、同じ組織下に存在する必要があります。
・テーブル スナップショットは読み取り専用で、スナップショットから標準テーブルを作成してデータを更新しない限り、テーブル スナップショットのデータは更新できません。説明、有効期限、アクセス ポリシーなど、テーブル スナップショットのメタデータのみ更新できます。
・タイムトラベルの 7 日間制限により、7 日以内のテーブルデータのスナップショットのみ作成できます。
・ビューやマテリアライズド ビューのスナップショットは作成できません。
・テーブル スナップショットを作成する際に、既存のテーブルやテーブル スナップショットを上書きすることはできません。
・ストリーミング バッファのデータが含まれるテーブルのスナップショットを作成する場合、ストリーミング バッファのデータはテーブル スナップショットに含まれません。
引用元:Google Cloud テーブル スナップショットの概要 制限事項
少し近い機能に「タイムトラベル」というものがあるのですが、これはまたの機会にしたいと思います。
BigQueryはクエリの速さや料金の安さに注目が集まる事が多いですが、このように実際の運用において便利な機能がどんどん追加されてきており、ますます目が離せません!
また、自社に専門人材がいない、リソースが足りない等の課題をお持ちの方に、エンジニア領域の支援サービス(Data Engineer Hub)をご提供しています。
お困りごとがございましたら、是非お気軽にご相談ください。