【BigQuery】データが消えたときはタイムトラベルで復元しよう!使い方を紹介

BigQuery_タイムトラベル_使い方 クラウドプラットフォーム

「更新すべきでないテーブルを誤って更新してしまった...」
開発や運用保守をやっていると1度は経験するでしょう.

こんな状況でも焦る必要はありません.
BigQueryには過去のデータにアクセスできるタイムトラベル機能があります.

今回はリカバリ作業に役立つタイムトラベルについて紹介します.

タイムトラベルとは

タイムトラベルとは過去7日間のタイムトラベル期間内であれば、どの時点のデータにもアクセスできるというBigQueryの機能です.

タイムトラベルとフェイルセーフによるデータの保持  |  BigQuery  |  Google Cloud
タイムトラベルとフェイルセーフがテーブルの履歴データを保持する方法について説明します。また、行レベルのアクセス ポリシーが適用された場合にタイムトラベルを使用するために必要となるアクセス権について説明します。

この機能を使えば誤って更新や削除してしまったデータも復元できます!頼もしい機能ですね.

タイムトラベル期間は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時間引いた時間を指定してあげましょう.