はじめに
BigQueryには"タイムトラベル"という便利な機能があり、過去のデータを一定期間遡って参照できます。データの誤更新や削除が発生した場合でも、過去の状態を簡単に復元できるため、データ管理の柔軟性が向上します
タイムトラベルとは?
BigQueryでは、テーブルの過去のスナップショットを最大7日間保持し、過去のデータにアクセスできます。これはBigQueryのストレージシステムによるもので、削除や上書きが発生しても、一定期間であれば復元が可能です。
タイムトラベルの主な用途
- 誤って削除・更新したデータの復元
- 過去のデータ状態を分析する
- データの変更履歴を確認する
タイムトラベルの基本的な使い方
過去のデータを取得する
過去のデータを参照するには、FOR SYSTEM_TIME AS OFを利用します。
SELECT *
FROM `your_project.your_dataset.your_table`
FOR SYSTEM_TIME AS OF TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY);
このクエリは、1日前のデータを取得します。INTERVALの値を変更することで、異なる時間のデータを取得可能です。
タイムトラベルを活用したデータ復元
誤ってデータを削除した場合、削除前のデータを復元できます。
例: 誤ってデータを削除した場合
DELETE FROM `your_project.your_dataset.your_table`
WHERE id = 123;
この場合、削除前のデータを復元するには、以下の手順を実施します。
- 削除前のデータを取得する
SELECT * FROM `your_project.your_dataset.your_table` FOR SYSTEM_TIME AS OF TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR) WHERE id = 123;
- 削除前のデータを元のテーブルに挿入する
INSERT INTO `your_project.your_dataset.your_table` SELECT * FROM `your_project.your_dataset.your_table` FOR SYSTEM_TIME AS OF TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR) WHERE id = 123;
これで、削除したデータを復元できます。
タイムトラベルの制約
タイムトラベルには以下の制約があります。
- 最大7日前までしか遡れない
- パーティションテーブルの場合、パーティションが削除されるとデータも消える
- コストが発生する(タイムトラベルによるクエリも通常のクエリと同様に課金される)
まとめ
BigQueryのタイムトラベル機能を使うことで、誤ったデータ操作を修正し、過去のデータを参照することができます。