BigQueryのタイムトラベルやスナップショットでデータを復元する

gcp

BigQuery にはタイムトラベル機能があり、デフォルトで過去 7 日間までの任意の時点のデータに次のようにしてアクセスできる。

SELECT * 
FROM `sambaiztest.test_dataset.test_table` 
FOR SYSTEM_TIME AS OF "2024-11-22 22:41:00+09:00"

これによりレコードを上書きしてしまったり削除してしまった場合もデータを復元することができる。

また、スナップショットを保存し、上書きして復元することもできる。7 日より前のバックアップを、差分のみが保存されるためストレージ費用を抑えて取っておくことができる。

CREATE SNAPSHOT TABLE `sambaiztest.test_dataset.test_table`
CLONE `sambaiztest.test_dataset.test_table_snapshot` 

SELECT *
FROM sambaiztest.test_dataset.INFORMATION_SCHEMA.TABLE_SNAPSHOTS
WHERE base_table_name = 'test_table'

CREATE OR REPLACE TABLE `sambaiztest.test_dataset.test_table` 
CLONE `sambaiztest.test_dataset.test_table_snapshot` 

テーブル自体が削除されている場合でも、bq cp コマンドで時間を指定して復元できる

$ bq cp test_dataset.test_table@-3600000 test_dataset.test_table_restored

参考

【GCP】BigQuery でタイムトラベルしてみる