【BigQuery】タイムトラベルできない?具体例から使えない理由と確認ポイントを紹介

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

前回タイムトラベルの使い方について紹介しました.
タイムトラベルを使うと過去のデータにアクセスできます.

たとえテーブルからデータが削除されていてもアクセスできるのでリカバリに大変役立ちますね.

そんな便利なタイムトラベルですがいくつか使用上の注意点がありました.

今回はタイムトラベルが使えないケースを紹介します.

タイムトラベルの使い方

タイムトラベルして過去のデータにアクセスするときは SYSTEM_TIME とタイムスタンプを使います.

SELECT
  *
FROM
  `テーブル名`
FOR SYSTEM_TIME AS OF '時間UTC'

図1はタイムトラベルを使って過去のデータを表示しています.

test.training_menu_index というテーブルを見るとデータが入っていないことが分かります.

過去にはデータがあったため,確実にデータがあった時間である 13:00:00 UTC(日本時間 22:00:00)を指定しデータを一覧表示しました.

図1 タイムトラベルで過去のデータを表示する|クリックして拡大できます

このようにテーブルからデータが消えていても,データが入っていた時間帯さえ分かればデータを再取得できると分かりました.

タイムトラベルが使えないケース

便利なタイムトラベルですが使えないケースもあるので紹介します.
いくつかありますが今回は遭遇確率が高い2つのケースに絞ります.

1. アクセスする対象がVIEWの場合

VIEWはタイムトラベルできないので注意しましょう.

test.training_menu_indexのデータと全く同じデータを持つ VIEW を作成しました.

VIEWに格納しているデータを確認する|クリックして拡大できます

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

テーブルの作成時間を確認する|クリックして拡大できます

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

VIEWはタイムトラベルできない|クリックして拡大できます

タイムトラベルできない原因はVIEWにあります.
VIEWはデータを格納しているわけではありません.クエリ結果を仮想的に表示しているだけです.

タイムトラベルはテーブルが持つスナップショットがあることで過去のデータにアクセスできます.VIEW自体はデータを保存・変更していないためスナップショットを持っておらずタイムトラベルが使えません.

2. すでにテーブルが削除されている場合

BigQueryからテーブルが削除されているとタイムトラベルできないので注意しましょう.

test.training_menu_index は日本時間 22:57:00 に作成されました.
そのため UTC時間 13:57:00 を指定するとその時点のデータを確認できます.

テーブルの作成時間を確認する|クリックして拡大できます

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

UTC 13:57:00を指定してレコードを確認する|クリックして拡大できます

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

対象のテーブルを削除する|クリックして拡大できます

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

テーブルを削除するとタイムトラベルできない|クリックして拡大できます

タイムトラベルはテーブルのスナップショットから過去のデータを表示します.

テーブルを削除するとそのスナップショットも消えてしまうのでタイムトラベルできない理由ですね

まとめ

今回はタイムトラベルが使えないケースを2つ紹介しました.

  1. タイムトラベルの対象がVIEWの場合
  2. タイムトラベルの対象テーブルがすでにBigQueryから削除されている場合

これらの場合はタイムトラベルできないので気を付けましょう.

タイムトラベルは非常に便利な機能です.
これのおかげでたとえデータを消してしまってもすぐに復元できるからです.

ただ場合によってタイムトラベルできないこともあるので過信はいけませんね.