「更新すべきでないテーブルを誤って更新してしまった...」
開発や運用保守をやっていると1度は経験するでしょう.
こんな状況でも焦る必要はありません.
BigQueryには過去のデータにアクセスできるタイムトラベル機能があります.
今回はリカバリ作業に役立つタイムトラベルについて紹介します.
タイムトラベルとは
タイムトラベルとは過去7日間のタイムトラベル期間内であれば、どの時点のデータにもアクセスできるというBigQueryの機能です.
この機能を使えば誤って更新や削除してしまったデータも復元できます!頼もしい機能ですね.
タイムトラベル期間は2~7日で設定できます.
デフォルト7日で設定されていますが,復元の必要がないデータの場合は短く設定すると良いでしょう.
データセットにタイムトラベル期間を設定する方法
データセットレベルでタイムトラベル期間を設定するとデータセット内のすべてのテーブルに設定されます.
データセット作成画面の一番下の部分で設定ができます.
タイムトラベルの使い方
タイムトラベルして過去のデータにアクセスするときは以下のクエリを実行します.
SELECT
*
FROM
`テーブル名`
FOR SYSTEM_TIME AS OF '時間UTC'
BigQueryはテーブルにあるデータのスナップショットを保持しています.
SYSTEM_TIME とすることでこのスナップショット情報にアクセスできます.
このとき指定する時間はタイムスタンプであることに注意しましょう!
タイムスタンプは協定世界時間(UTC)を基準としているため,日本時間と比較すると9時間の時差があります.
2023-10-27 12:00:00 のUTCタイムスタンプを日本時間になおすとこのようになります.
- タイムスタンプ(UTC): 2023-10-27 12:00:00 UTC
- タイムスタンプ(Japan Standard Time):2023-10-27 21:00:00 JST
サンプルクエリ タイムスタンプを使ってデータを復元する
training_menu_index テーブルは3件のトレーニングデータが入っていました.
DELETEクエリで誤ってデータを消してしまったのでタイムトラベルを使って復元しましょう!
タイムスタンプ情報が必要なのでテーブルの作成時間を確認します.
データは作成時間と同時刻に入れたので作成時間のタイムスタンプ(UTC)を指定するとデータを復元できるでしょう.
クエリはこのようになります.
SELECT
*
FROM
`test.training_menu_index`
FOR SYSTEM TIME AS OF '2023-10-28 10:41:27 UTC'
削除したデータにアクセスできました.
3件のトレーニングメニューが表示されていますね.
本当に消したはずのデータを表示できるとは!タイムトラベルすごい...
このデータを再度テーブルに入れてあげればリカバリ完了です.
CREATE OR REPLACE TABLE `test.training_menu_index`
AS
SELECT
*
FROM
`test.training_menu_index`
FOR SYSTEM TIME AS OF '2023-10-28 10:41:27 UTC'
テーブルを元の状態に戻せました!
まとめ
今回はタイムトラベルを使って過去のデータにアクセスする方法を紹介しました.
人が作業する以上ミスは付きものでしょう.
誤って大切なデータを削除・更新してしまうこともあるかもしれません.
とても焦る状況ですが,落ち着いてタイムトラベルを使ってリカバリしましょう.
タイムトラベルを使うときは指定する時間に気をつけてください.
タイムスタンプ(UTC時間)は日本時間と9時間の時差があります.
日本時間から9時間引いた時間を指定してあげましょう.