前回タイムトラベルの使い方について紹介しました.
タイムトラベルを使うと過去のデータにアクセスできます.
たとえテーブルからデータが削除されていてもアクセスできるのでリカバリに大変役立ちますね.
そんな便利なタイムトラベルですがいくつか使用上の注意点がありました.
今回はタイムトラベルが使えないケースを紹介します.
タイムトラベルの使い方
タイムトラベルして過去のデータにアクセスするときは SYSTEM_TIME とタイムスタンプを使います.
SELECT
*
FROM
`テーブル名`
FOR SYSTEM_TIME AS OF '時間UTC'
図1はタイムトラベルを使って過去のデータを表示しています.
test.training_menu_index というテーブルを見るとデータが入っていないことが分かります.
過去にはデータがあったため,確実にデータがあった時間である 13:00:00 UTC(日本時間 22:00:00)を指定しデータを一覧表示しました.

このようにテーブルからデータが消えていても,データが入っていた時間帯さえ分かればデータを再取得できると分かりました.
タイムトラベルが使えないケース
便利なタイムトラベルですが使えないケースもあるので紹介します.
いくつかありますが今回は遭遇確率が高い2つのケースに絞ります.
1. アクセスする対象がVIEWの場合
VIEWはタイムトラベルできないので注意しましょう.
test.training_menu_indexのデータと全く同じデータを持つ VIEW を作成しました.

このVIEWは2023年10月28日 22時55分00に作成されたので UTC13時55分 を指定すればタイムトラベルできるはずです.

UTC 13:55:00(日本時間 22:55:00)を指定しましたところエラーが表示されました.
このままではクエリが実行できません.

タイムトラベルできない原因はVIEWにあります.
VIEWはデータを格納しているわけではありません.クエリ結果を仮想的に表示しているだけです.
タイムトラベルはテーブルが持つスナップショットがあることで過去のデータにアクセスできます.VIEW自体はデータを保存・変更していないためスナップショットを持っておらずタイムトラベルが使えません.
2. すでにテーブルが削除されている場合
BigQueryからテーブルが削除されているとタイムトラベルできないので注意しましょう.
test.training_menu_index は日本時間 22:57:00 に作成されました.
そのため UTC時間 13:57:00 を指定するとその時点のデータを確認できます.

UTC 13:57:00 では3件のレコードが確認できました.

続いてテーブルを削除してからクエリを実行してみます.

テーブルを削除するとエラーが表示されました.
エラーの内容は「asia-northeast1 に test.training_menu_indexテーブルは見当たらない」というものです.すでに消しているので当然のエラーですね.

タイムトラベルはテーブルのスナップショットから過去のデータを表示します.
テーブルを削除するとそのスナップショットも消えてしまうのでタイムトラベルできない理由ですね
まとめ
今回はタイムトラベルが使えないケースを2つ紹介しました.
- タイムトラベルの対象がVIEWの場合
- タイムトラベルの対象テーブルがすでにBigQueryから削除されている場合
これらの場合はタイムトラベルできないので気を付けましょう.
タイムトラベルは非常に便利な機能です.
これのおかげでたとえデータを消してしまってもすぐに復元できるからです.
ただ場合によってタイムトラベルできないこともあるので過信はいけませんね.