本サイトにはプロモーションが含まれています
以下のケースで利用可能です。
- 間違えてテーブル上書きしてしまった
- 間違えてテーブル消してしまった
- 調査で過去データを参照したいがデータ洗い替えられてわからない
タイムトラベル可能期間は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 |
+---------------+
関連リンク
本サイトにはプロモーションが含まれています