Snowflakeタイムトラベルでテーブルの過去データを参照する方法

Snowflakeタイムトラベルでテーブルの過去データを参照する方法 Snowflake

「あの時のデータ、もう一度見たい!」を叶えるタイムトラベル

「うっかりUPDATEで値を上書きしちゃった…」「昨日の朝の集計結果ともう一度比べたい!」そんな時に大活躍するのが、Snowflakeのタイムトラベル(Time Travel)機能です。タイムトラベルとは、テーブルの過去のある時点の状態を、まるでタイムマシンのように呼び出せる仕組みのこと。バックアップを取っていなくても、保持期間内であればSELECT文だけで過去データを参照できます。

本記事では、特に「過去データをSELECTで参照する方法」にフォーカスして、AT/BEFORE句の使い方を初心者向けに解説します。タイムトラベルの全体像については Snowflakeタイムトラベル入門|過去データを一発で復元する方法 もあわせてどうぞ。

Snowflakeタイムトラベルでテーブルの過去データをSELECTで参照する仕組みを示すイメージ図

基本構文:AT句とBEFORE句

過去データを参照するには、SELECT文のFROMの直後にATまたはBEFOREを付けるだけです。

  • AT:指定した時点(その瞬間を含む)の状態を参照
  • BEFORE:指定した時点の直前の状態を参照

そして、時点の指定方法には3種類あります。

  1. OFFSET:現在から「何秒前」を指定
  2. TIMESTAMP:特定の日時を指定
  3. STATEMENT:特定のクエリID実行直前/直後を指定

3つの指定方法をSQLで試してみよう

① OFFSETで「○秒前」を参照

一番手軽なのがこれ。たとえば「5分前(=300秒前)のテーブルを見たい」場合は次のように書きます。

SELECT *
FROM sales
AT(OFFSET => -60*5);

マイナス値で「過去」を表します。直前のUPDATEミスを確認したい時にサッと使えて便利です。

② TIMESTAMPで「特定日時」を参照

「昨日の23時時点の在庫を見たい」など、明確な時刻を指定したい場合はTIMESTAMPを使います。

SELECT *
FROM sales
AT(TIMESTAMP => '2026-04-30 23:00:00'::TIMESTAMP_LTZ);

日次バッチの結果を後から検証したいケースで重宝します。

③ STATEMENTで「あのクエリの直前」を参照

「さっきのDELETE文の前に戻したい!」というときは、Query IDを指定します。Snowsightの履歴画面からコピーできます。

SELECT *
FROM sales
BEFORE(STATEMENT => '01b2c3d4-0000-abcd-0000-123456789abc');

BEFOREを使うことで、そのクエリが実行される直前のスナップショットを取得できます。

SnowsightのクエリIDを使いSTATEMENT指定でDELETE直前の過去データを参照するタイムトラベル例

こんなシーンで便利!

  • 誤更新の確認:今と過去の値をJOINして差分を比較
  • 監査・調査:特定時点のデータをそのままレポート出力
  • クローン作成:過去状態を ゼロコピークローン として複製し検証用に使う

たとえば現在と1時間前の売上を比較したい場合、こんな書き方ができます。

SELECT now.id, now.amount AS now_amount, past.amount AS past_amount
FROM sales AS now
JOIN sales AT(OFFSET => -3600) AS past
  ON now.id = past.id
WHERE now.amount <> past.amount;

注意点

  • 参照できるのは保持期間(DATA_RETENTION_TIME_IN_DAYS)内のみ。標準エディションは最大1日、Enterprise以上は最大90日まで設定可能です。
  • トランジェント・一時テーブルはリテンション期間が0または1日に制限されます。
  • テーブルがDROPされた後の参照にはUNDROPか、過去IDを使ったクローンが必要です。

まとめ

タイムトラベルは「FROM の後ろに AT/BEFORE を付けるだけ」で過去データを参照できる、Snowflakeならではの強力な機能です。OFFSET・TIMESTAMP・STATEMENTの3つの指定方法を覚えておけば、調査・監査・障害対応などあらゆる場面で慌てず対応できます。普段の SELECT文 にひと工夫加えるだけなので、ぜひ気軽に試してみてください!

参考リンク

関連記事