テック

BigQuery | タイムトラベルを使用した過去データの復元

以下のケースで利用可能です。

  • 間違えてテーブル上書きしてしまった
  • 間違えてテーブル消してしまった
  • 調査で過去データを参照したいがデータ洗い替えられてわからない

タイムトラベル可能期間は7日間です。

その範囲を超えたデータは参照できません(記事時点)

使い方

指定日時のデータを参照するにはFOR SYSTEM_TIME AS OF句を利用します。

以下のように指定します。

SELECT
  *
FROM
  `dataset.table`
  FOR SYSTEM_TIME AS OF TIMESTAMP('2022-09-23 14:00:00', 'Asia/Tokyo');

ただし、タイムトラベル期間を過ぎている場合、以下のようなエラーメッセージが表示されます。

Invalid time travel timestamp 1663304400000 for table project:dataset.table@1663304400000. Cannot read before 1663376504268

また、テーブルが削除されている場合もクエリはエラーになります。

Not found: Table project:dataset.table was not found in location US

削除されたテーブルにアクセスするには bq コマンドを使います。

記事時点ではSQLで実行できないようです。

以下のように指定します。

$ bq cp ${dataset}.${table}@${UNIXタイム(ミリ秒)} ${dataset}.${restored_table}
# 例:bq cp mydataset.table1@1624046611000 mydataset.table1_restored

この場合、切り戻したい日時の指定はUNIXタイム(ミリ秒)になります。

以下で取得できます。

$ bq query --use_legacy_sql=false "SELECT UNIX_MILLIS(TIMESTAMP('2022-09-24 14:00:00', 'Asia/Tokyo'))"
+---------------+
|      f0_      |
+---------------+
| 1663995600000 |
+---------------+

関連リンク

ビッグデータ分析