In Silico

データ基盤

Snowflake Time Travel(タイムトラベル)とは?保持期間と復元

2026/10/28 (更新: 2026/11/3) シリーズ「Snowflake 入門」 第6回 / 全13回

シリーズSnowflake 入門全13回
  1. 第1回Snowflakeとは?仕組み・料金・使い方をわかりやすく解説
  2. 第2回Snowflakeのウェアハウスとは?サイズとクレジット・自動停止
  3. 第3回Snowflakeの料金の仕組みとは?計算・保存・転送とコスト管理
  4. 第4回Snowflake マイクロパーティションとは?プルーニングとクラスタリング
  5. 第5回Snowflake VARIANTとは?JSONを扱う半構造化データの仕組み
  6. 第6回Snowflake Time Travel(タイムトラベル)とは?保持期間と復元
  7. 第7回Snowflake レプリケーションとは?別リージョンに複製して切り替える
  8. 第8回Snowflake ロールとは?権限をロールに与えて階層で渡す仕組み
  9. 第9回Snowflake Dynamic Tablesとは?SELECTだけで結果の表を最新に保つ
  10. 第10回Snowflake データ共有とは?コピーせずに取引先と同じ表を使う
  11. 第11回Snowflake Icebergテーブルとは?同じデータを他のエンジンでも読む
  12. 第12回Snowflake Cortexとは?データを外に出さずにSQLでAIを使う
  13. 第13回Snowflake Well-Architectedとは?5つの柱で自分の判断を見直す

このシリーズの紹介へシリーズ一覧へ

  • Time Travel
  • タイムトラベル
  • Snowflake
  • 保持期間
  • UNDROP
  • Fail-safe
  • ゼロコピークローニング
  • クローン
  • AT | BEFORE
  • マイクロパーティション
  • 保存の料金
  • TRANSIENT
  • クエリ ID
  • TABLE_STORAGE_METRICS
  • Enterprise Edition
  • Backups
  • 保持ロック
  • SWAP WITH
  • Well-Architected
  • データ基盤
目次
背景・問い・要点
背景

データベースでは、表の行を誤って書き換えたり、表そのものを消したりすることがある。ふつうは、定期的に取っておいたバックアップから戻す。バックアップを取った時点より後の変更は、戻せない。

Snowflake では、変える前や消す前の表を、決めた期間だけ自動で残しておく。この機能を Time Travel という1。日本語の公式ドキュメントでも「Time Travel」と英語で書く。

問い

Snowflake の Time Travel とは何で、利用者は過去の表をいつまで、どう戻せるのか。

要点

Time Travel は、変える前や消す前の表を保持期間のあいだ残す機能である。保持期間は既定で 1 日、Enterprise Edition 以上の永続の表なら最大 90 日で、その間、利用者は過去の時点の表を読んだり写したりでき、消した表を UNDROP で戻せる。

過去の表を読めるのは、Snowflake が表のファイルを書き換えず、変更のたびに新しいファイルを足すからである。永続の表では、保持期間を過ぎた履歴は 7 日の Fail-safe に移り、そこからは Snowflake だけがその履歴を戻せる。保持期間を長くするほど、またよく書き換わる表ほど、履歴の保存の料金が増える。

モデル・例示

過去の時点を指定して、そのときの表を読む

Time Travel では、利用者が過去の時点を指定すると、その時点の表の中身を読める。表は、Snowflake の公式ドキュメントにある 2 列の tt1 を使う2。2024 年 6 月 5 日の 15 時 25 分(セッションのタイムゾーンで)に tt1 を作って 2 行を入れ、5 分後に 3 行目を入れたとする。3 行目を入れる前の 15 時 29 分を指定すると、そのときの 2 行が返る。

  1. 利用者Snowflake1. 15 時 25 分に tt1 を作り、2 行を入れる
  2. 利用者Snowflake2. 5 分後に 3 行目を入れる
  3. 利用者Snowflake3. 15 時 29 分の tt1 を読む
  4. Snowflake利用者4. 3 行目を入れる前の 2 行を返す
  5. 利用者Snowflake5. 今の tt1 を読む
  6. Snowflake利用者6. 3 行を返す

時点は、問い合わせの表の名前の後に AT で書く2。

SELECT * FROM tt1 AT(TIMESTAMP => '2024-06-05 15:29:00'::TIMESTAMP_LTZ);
+----+----+
| C1 | C2 |
|----+----|
|  1 |  2 |
|  2 |  3 |
+----+----+

過去の時点を読んでも、表の今の中身は 3 行のまま変わらない。誤って書き換えた表を戻すときも、この指定で過去の時点を選ぶ。時刻には、TIMESTAMP_LTZ のようにタイムゾーンの決まる型を付ける。::TIMESTAMP のようにタイムゾーンを持たない型で書くと、設定によっては UTC(協定世界時、Coordinated Universal Time)の時刻として読まれ、意図と違う時点を指す2。

過去を残せるのは、ファイルを書き換えないから

Snowflake の創業者らによる 2016 年の論文(データベースの国際会議 SIGMOD で発表)は、その仕組みを次のように説明している3。

今の Snowflake では、表のデータを小さく分けて持つファイルを、マイクロパーティションという。変更があると、影響を受けたマイクロパーティションが作り直され、前のものは履歴として保持期間のあいだ保たれる4。どの版の表がどのマイクロパーティションでできているかは、データとは別の管理用の記録(メタデータ)に残される5。

保持期間:既定は 1 日、最大 90 日

履歴を残す期間を、保持期間という。保持期間は既定で 1 日で、どのアカウントでも自動で有効になっている1。

保持期間は、パラメータ DATA_RETENTION_TIME_IN_DAYS で、アカウント、データベース、スキーマ、表の単位で決める6。上の単位で期間を変えると、期間を明示していない下のデータベース、スキーマ、表は、すでにあるものも新しい期間を引き継ぐ1。Snowflake は、予期しない結果になりうると注意し、とくにアカウントの単位で期間を 0 にすることは勧めていない1。

アカウントに MIN_DATA_RETENTION_TIME_IN_DAYS を決めておくと、表ごとの値がそれより短くても、長いほうが使われる1。利用者が表の保持期間を 0 日にしても、アカウントで決めた最低の期間は保たれる。

期間を数え始めるのは、表を作ったときではなく、そのデータが変わったり消されたりしたときである1。期間を延ばすと、いま Time Travel にある履歴も長く保たれる。ただし、すでに Fail-safe に移った履歴は戻らない1。

データベースを消すと、その中の表に別の保持期間を決めていても、表はデータベースの保持期間に従う1。表ごとの期間を守りたいなら、先に表を消してからデータベースを消す。

過去を読む、消した表を戻す、過去の時点を写す

保持期間の間は、次の三つができる1。

過去を読む(AT と BEFORE): SELECT の表の名前の後に、AT か BEFORE で時点を指定する。時点の指定は三つある2。

指定意味
TIMESTAMP日時
OFFSET今からさかのぼる秒数(-60*5 なら 5 分前)
STATEMENT文のクエリ ID

AT は、指定した時点の変更を含む。BEFORE は、指定した時点の直前を指す2。BEFORE で STATEMENT を指定したときは、文が始まる前ではなく、文が終わる直前を指す2。文が動いている間に、ほかのクエリが確定させた変更は、結果に含まれる2。

クエリ ID で指定できるのは、14 日以内に実行した文だけである。それより前の文は、その文の時刻で指定する2。保持期間の外の時点を指定すると、エラーが返る2。過去の中身は、今の表の定義(列や既定の値)で返る2。

消した表を戻す(UNDROP): UNDROP TABLE は、消した表の最も新しい版を、消したときのデータベースとスキーマに戻す7。スキーマとデータベースにも UNDROP がある1。

同じ名前の表を作り直していると、UNDROP は失敗する。今の表の名前を変えてから UNDROP すると、前の版が戻る1。同じ名前で消すことと作ることを繰り返していれば、UNDROP は、最も新しく消した版から順に戻す1。

過去の時点を写す(クローン): CREATE TABLE … CLONE に AT か BEFORE を付けると、過去の時点の表の写しを作れる。データベースやスキーマごとでも作れる8。

Snowflake の Well-Architected Framework は、誤った UPDATE や DELETE のようなデータの論理的な破損に対して、Time Travel を「最初の、最も速い守り」と位置付けている9。戻し方を手順書にして、定期的に試しておくよう勧めている9。同じ文書は、誤ってデータを変えた文のクエリ ID をクエリの履歴から探し、その文の直前の時点を BEFORE で読んで、正しいデータを表へ入れ直す手順も示している9。

CREATE TABLE … CLONE と ALTER TABLE … SWAP WITH を組み合わせる次の戻し方は、Snowflake のドキュメントに手順としては載っていない。誤った文の直前の時点のクローンを作り、中身を確かめてから、元の表と名前を入れ替える。

-- 誤った UPDATE の直前の表を写す。COPY GRANTS で元の表の権限も写す
CREATE TABLE my_table_restored CLONE my_table
  BEFORE (STATEMENT => '<誤った UPDATE のクエリ ID>')
  COPY GRANTS;
-- 中身を確かめてから、二つの表の名前を入れ替える
ALTER TABLE my_table SWAP WITH my_table_restored;

CLONE の後に AT か BEFORE、その後に COPY GRANTS を書く10。SWAP WITH は、二つの表の名前を一つのトランザクションで入れ替える11。

入れ替えた後の表は、元の表とは別の表なので、次の点が変わる。

Fail-safe:保持期間の後の 7 日は、Snowflake だけが戻せる

永続の表では、保持期間を過ぎた履歴は Fail-safe に移る1。消すまで残る TRANSIENT の表と、セッションが終わると消える TEMPORARY の表には Fail-safe がない13。Fail-safe の期間は 7 日で、変えられない14。

Snowflake の Well-Architected Framework も、Fail-safe はふだんの戻し方に組み込まず、最後の守りとして扱うよう勧めている9。

保存の料金:履歴も料金の対象になる

Time Travel と Fail-safe の履歴は、保存の料金の対象になる15。履歴は、今の表、Time Travel、Fail-safe の順に移り、Fail-safe を出るまで料金がかかる4。行を足すだけの表でも、INSERT や COPY で読み込むと、小さなマイクロパーティションをまとめ直す処理で古いものが消され、その分が Time Travel と Fail-safe の料金の対象になる4。

よく書き換わる表では、履歴が今の表よりずっと大きくなることがある4。Snowflake のドキュメントは、極端な例として、200 GB の表のすべての行を 1 日に 20 回書き換える場合を示している。今の表 200 GB に対して、Time Travel が 4 TB、Fail-safe が 28 TB で、合わせて 32.2 TB になる4。

それでも Snowflake は、ほとんどの場合は永続の表にして、Time Travel と Fail-safe で守るのがよいとしている。保存の料金は安く、よく書き換わる表の多くは、保存するデータ全体のうち小さい割合だからである4。保存するデータが大きくなりすぎる表に限って、保持期間 0 日の TRANSIENT の表にし、定期的に永続の表へ写す方法を挙げている。1 日 1 回写すなら、合わせて 2 TB になる4。

表の種類ごとの期間は、次のとおりである13。

表の種類Time Travel と Fail-safe
永続(PERMANENT)Time Travel は 0〜90 日(Standard Edition は 0 か 1 日)、Fail-safe は 7 日
TRANSIENTTime Travel は 0 か 1 日、Fail-safe なし。消すまで続く
TEMPORARYTime Travel は 0 か 1 日、Fail-safe なし。セッションが終わると消える

TRANSIENT の表の履歴は、保持期間を過ぎると Snowflake にも戻せない。Snowflake は、TRANSIENT の表は Snowflake の外で作り直せるデータにだけ使い、ファクトテーブルのように長く使う表は常に永続にするよう書いている15。使う期間が 1 日に満たない ETL(Extract-Transform-Load、抽出・変換・読み込み)の作業用の表は、TRANSIENT にしてよいとしている15。ただし、消えたデータを読み込み直す時間や、そのあいだ業務が止まる時間を考えると、Fail-safe の料金を払っても永続の表のほうがよいこともあるとしている15。

どの表がどれだけ履歴を持っているかは、TABLE_STORAGE_METRICS で見られる16。

列意味
ACTIVE_BYTES今の表の大きさ
TIME_TRAVEL_BYTESTime Travel の履歴
FAILSAFE_BYTESFail-safe の履歴
RETAINED_FOR_CLONE_BYTES消したが、クローンかバックアップが参照しているので保たれている分

数字が更新されるまでに、1〜2 時間かかることがある16。FAILSAFE_BYTES を ACTIVE_BYTES で割った比が大きい表が、よく書き換わる表である4。

ゼロコピークローニング:ファイルの記録だけを写す

Snowflake では、ファイルを写さずに表やスキーマ、データベースの写しを作ることを、ゼロコピークローニングという8。

論文によれば、クローンは元の表のメタデータを写すだけである。作った直後は、二つの表が同じファイルを参照し、その後はそれぞれ別に変えられる3。今のドキュメントでも、クローンは書き込みができ、元の表とは独立している8。

クローンに引き継がれないものもある812。

データベースやスキーマのクローンに入るタスクは、止まった状態で作られる12。ただし、時刻(TIMESTAMP)で過去の時点を指定したクローンには、データベースやスキーマの中のタスクは入らない8。クローンを作るのは速いが、大きな表では一瞬ではない12。

もっと長く、消せない形で残すなら

Time Travel と Fail-safe は短い期間の守りで、規則によってはもっと長く、変えられない形で残す必要がある9。Snowflake では、そのための機能を Backups という。2025 年 8 月にプレビューとして出て(当時の名前は WORM snapshots。WORM は Write Once, Read Many の略で、一度書いたら変えられないことを指す)、2025 年 12 月に一般提供になった17。

Snowflake の Well-Architected Framework は、別のリージョンへの複製は、リージョンの障害には要るが、人の誤りやデータの破損への備えの代わりにはならないとしている9。同じ文書は、複製に加えて、重要なデータベースのゼロコピークローンを定期的に自動で作るか、変えられないバックアップを Snapshots(いまの Backups)で定期的に作るよう勧めている9。

出典18件
  1. Snowflake「Understanding & using Time Travel | Snowflake Documentation」日付なし、2026年10月27日取得. https://docs.snowflake.com/en/user-guide/data-time-travel — 保持期間、継承、UNDROP と同じ名前の表。日本語版の題は「Time Travelの理解と使用」。 ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10 ↩11 ↩12 ↩13 ↩14 ↩15 ↩16 ↩17 ↩18

  2. Snowflake「AT | BEFORE | Snowflake Documentation」日付なし、2026年10月27日取得. https://docs.snowflake.com/en/sql-reference/constructs/at-before — 時点を指定したクエリの例と結果、14 日の制限。 ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10

  3. Benoit Dageville ほか「The Snowflake Elastic Data Warehouse」SIGMOD 2016、2016年6月、2026年10月27日取得. https://info.snowflake.net/rs/252-RFO-227/images/Snowflake_SIGMOD.pdf — 3.3.2 節と 4.4 節、書き換えないファイル、Time Travel とクローン。 ↩ ↩2

  4. Snowflake「Data storage considerations | Snowflake Documentation」日付なし、2026年10月27日取得. https://docs.snowflake.com/en/user-guide/tables-storage-considerations — よく書き換わる表の例と、クローンの保存。 ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9

  5. Ashish Motivala「How FoundationDB Powers Snowflake Metadata Forward」Snowflake Blog、2018年4月19日、2026年10月27日取得. https://www.snowflake.com/en/blog/how-foundationdb-powers-snowflake-metadata-forward/ — Snowflake の公式ブログ。筆者は、上の SIGMOD 2016 の論文の共著者の一人。 ↩

  6. Snowflake「Parameters | Snowflake Documentation」日付なし、2026年10月27日取得. https://docs.snowflake.com/en/sql-reference/parameters — DATA_RETENTION_TIME_IN_DAYS。 ↩

  7. Snowflake「UNDROP TABLE | Snowflake Documentation」日付なし、2026年10月27日取得. https://docs.snowflake.com/en/sql-reference/sql/undrop-table ↩

  8. Snowflake「CREATE <object> … CLONE | Snowflake Documentation」日付なし、2026年10月27日取得. https://docs.snowflake.com/en/sql-reference/sql/create-clone — 日本語版は「ゼロコピークローン」。 ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8

  9. Snowflake「Reliability」Snowflake Well-Architected Framework、2026年6月17日更新、2026年10月27日取得. https://www.snowflake.com/en/developers/guides/well-architected-framework-reliability/ — Time Travel、Fail-safe、手順書の勧め、誤った文を戻す手順。 ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7

  10. Snowflake「CREATE TABLE | Snowflake Documentation」日付なし、2026年10月27日取得. https://docs.snowflake.com/en/sql-reference/sql/create-table — CLONE の構文。 ↩

  11. Snowflake「ALTER TABLE | Snowflake Documentation」日付なし、2026年10月27日取得. https://docs.snowflake.com/en/sql-reference/sql/alter-table ↩

  12. Snowflake「Cloning considerations | Snowflake Documentation」日付なし、2026年10月27日取得. https://docs.snowflake.com/en/user-guide/object-clone ↩ ↩2 ↩3 ↩4 ↩5

  13. Snowflake「Working with Temporary and Transient Tables | Snowflake Documentation」日付なし、2026年10月27日取得. https://docs.snowflake.com/en/user-guide/tables-temp-transient ↩ ↩2

  14. Snowflake「Understanding and viewing Fail-safe | Snowflake Documentation」日付なし、2026年10月27日取得. https://docs.snowflake.com/en/user-guide/data-failsafe — ベストエフォート、サポートへの依頼、数時間から数日。 ↩ ↩2 ↩3 ↩4

  15. Snowflake「Storage costs for Time Travel and Fail-safe | Snowflake Documentation」日付なし、2026年10月27日取得. https://docs.snowflake.com/en/user-guide/data-cdp-storage-costs — 日本語版は TRANSIENT と TEMPORARY の訳語がページによって違うので、英語の名前で探すとよい。 ↩ ↩2 ↩3 ↩4

  16. Snowflake「TABLE_STORAGE_METRICS view | Snowflake Documentation」日付なし、2026年10月27日取得. https://docs.snowflake.com/en/sql-reference/info-schema/table_storage_metrics ↩ ↩2 ↩3

  17. Snowflake「Dec 10, 2025: General availability of WORM backups | Snowflake Documentation」2025年12月10日、2026年10月27日取得. https://docs.snowflake.com/en/release-notes/2025/other/2025-12-10-worm-backups — プレビューは 2025 年 8 月 18 日のリリースノート。 ↩

  18. Snowflake「Backups for disaster recovery and immutable storage | Snowflake Documentation」日付なし、2026年10月27日取得. https://docs.snowflake.com/en/user-guide/backups — 日本語版の題は「障害復旧向けのバックアップと不変ストレージ」。 ↩ ↩2 ↩3 ↩4 ↩5

この記事はAIを使用して執筆されました。内容には誤りが含まれる可能性があります。事実や数字の出典は脚注から確かめられます。