Snowflakeのデータ保持と復旧は、Time TravelとFail-safeの2つの仕組みで構成されています。Time Travelはユーザーが過去のデータに直接アクセスできる機能で、Fail-safeはTime Travel期間終了後の最終防衛ラインとしてSnowflakeが内部的に保持するデータ保護です。
この記事では、2つの仕組みのタイムライン・エディション別の保持期間・テーブル種類ごとの違い・ストレージコストへの影響を整理します。SnowPro Core試験のDomain 6(Data Protection & Data Sharing / 配点10〜15%)で頻出するトピックです。
データの変更(UPDATE/DELETE/DROP)が発生した時点を起点として、以下のタイムラインでデータが保持されます。
データ変更発生
│
├── Time Travel期間(0〜90日)──────┐
│ ユーザーがAT/BEFORE句で │
│ 過去データに直接アクセス可能 │
│ UNDROP TABLE/SCHEMA/DATABASE │
│ で復元可能 │
│ │
├── Fail-safe期間(7日間)─────────┐
│ Snowflakeサポートによる │
│ データ復旧のみ可能 │
│ ユーザーは直接アクセス不可 │
│ │
└── データ完全消去 │
復旧不可能Enterprise Edition(Time Travel 90日)の場合、データ変更から最大97日間(90日 + 7日)のデータ保護期間があることになります。Standard Edition(Time Travel 最大1日)では最大8日間(1日 + 7日)です。
| 構文 | 用途 | 例 |
|---|---|---|
| AT(TIMESTAMP => <ts>) | 指定時点のデータを参照 | AT(TIMESTAMP => '2026-03-25 10:00:00'::TIMESTAMP) |
| AT(OFFSET => <sec>) | N秒前のデータを参照 | AT(OFFSET => -3600) で1時間前 |
| AT(STATEMENT => <id>) | 特定のクエリ実行時点のデータ | AT(STATEMENT => '8e5d0ca9-...') |
| BEFORE(STATEMENT => <id>) | 特定のクエリ実行直前のデータ | BEFORE(STATEMENT => '8e5d0ca9-...') |
Time Travel期間内であれば、DROP TABLEで削除したテーブル・スキーマ・データベースをUNDROPで復元できます。
-- テーブルの復元
UNDROP TABLE sales;
-- スキーマの復元
UNDROP SCHEMA analytics;
-- データベースの復元
UNDROP DATABASE production;同名のオブジェクトがすでに存在する場合はUNDROPが失敗するため、事前にALTER TABLE ... RENAMEで既存オブジェクトをリネームする必要があります。
| エディション | Time Travel最大期間 | Fail-safe期間 | 最大保護期間 |
|---|---|---|---|
| Standard | 0〜1日 | 7日間 | 8日間 |
| Enterprise | 0〜90日 | 7日間 | 97日間 |
| Business Critical | 0〜90日 | 7日間 | 97日間 |
| VPS(Virtual Private Snowflake) | 0〜90日 | 7日間 | 97日間 |
Standard EditionではDATA_RETENTION_TIME_IN_DAYSの最大値が1日に制限されており、90日のTime Travelを利用するにはEnterprise以上へのアップグレードが必要です。
Snowflakeには3種類のテーブル(Permanent / Transient / Temporary)があり、それぞれデータ保持の仕様が異なります。試験では3種類の違いが頻出します。
| テーブル種類 | Time Travel | Fail-safe | 用途 | ストレージコスト |
|---|---|---|---|---|
| Permanent(デフォルト) | 0〜90日(Enterprise+) | 7日間 | 本番データ・マスターテーブル | 最も高い |
| Transient | 0〜1日 | なし(0日) | ステージング・中間テーブル | 低い |
| Temporary | 0〜1日 | なし(0日) | セッション内の一時処理 | 最も低い |
Time TravelとFail-safeのデータ保持はストレージコストに直接影響します。保持期間中のデータは変更前の状態(差分データ)として保持されるため、変更が多いテーブルほどストレージコストが増加します。
| テーブル種類 | Time Travel 90日設定 | Fail-safe | ストレージコスト影響 |
|---|---|---|---|
| Permanent(10GBテーブル/日次全更新) | 最大 10GB × 90日分の差分 | 7日分の差分 | 非常に大きい |
| Transient(10GBテーブル/日次全更新) | 最大 10GB × 1日分の差分 | なし | 小さい |
| Permanent(10GBテーブル/更新なし) | 0(変更がないため差分なし) | 0 | なし |
頻繁にUPDATE/DELETEが実行されるテーブルでTime Travel 90日を設定すると、ストレージコストが大幅に増加する可能性があります。テーブルの重要度と更新頻度に応じてDATA_RETENTION_TIME_IN_DAYSを適切に設定してください。
DATA_RETENTION_TIME_IN_DAYSはアカウント・データベース・スキーマ・テーブルの各レベルで設定でき、下位レベルが上位レベルを上書きします。
-- アカウントレベル(デフォルト30日)
ALTER ACCOUNT SET DATA_RETENTION_TIME_IN_DAYS = 30;
-- ステージングスキーマ(0日 = Time Travel無効)
ALTER SCHEMA staging SET DATA_RETENTION_TIME_IN_DAYS = 0;
-- 重要テーブル(90日 = 最大保持)
ALTER TABLE master_customers SET DATA_RETENTION_TIME_IN_DAYS = 90;| テーブル分類 | 推奨Time Travel | テーブル種類 | 理由 |
|---|---|---|---|
| マスターテーブル(顧客・商品) | 30〜90日 | Permanent | 誤操作からの復元を長期間保証 |
| ファクトテーブル(売上・ログ) | 7〜30日 | Permanent | 直近の誤操作復元に対応 |
| ステージングテーブル | 0〜1日 | Transient | 再ロードで復元可能。コスト最適化 |
| 中間集計テーブル | 0〜1日 | Transient | 再計算で復元可能 |
| 分析ワークテーブル | 0日 | Temporary | セッション限定。保持不要 |
SnowPro Core - Data Protection
問題 1
Enterprise EditionのSnowflakeアカウントで、Transientテーブルのデータ保持に関する説明として正しいものはどれですか?
正解: B
TransientテーブルはEnterprise Editionであっても、Time Travel保持期間は最大1日に制限されます(Permanentテーブルのように90日には設定できません)。さらに、TransientテーブルにはFail-safe期間が存在しません(0日)。これがTransientテーブルの最大の特徴で、Permanentテーブルと比較してストレージコストを大幅に削減できます。選択肢AはPermanentテーブルの説明です。選択肢CはTime Travelを0〜1日の範囲で設定可能なため誤りです(1日も設定可能)。選択肢Dは誤りで、TransientテーブルとPermanentテーブルの保持期間は大きく異なります。
Time TravelとFail-safeの違いは何ですか?
Time Travelはユーザーが自分でAT/BEFORE句を使用して過去のデータに直接アクセス・復元できる機能です。Enterprise以上で最大90日間の保持が可能で、UNDROP TABLE/SCHEMA/DATABASEによる復元もTime Travelの範囲内で実行できます。一方、Fail-safeはTime Travel期間終了後のデータに対するSnowflake内部の安全領域です。7日間のFail-safe期間中はSnowflakeサポートチームへの問い合わせによるデータ復旧が可能ですが、ユーザーが直接アクセスすることはできません。Fail-safeの復旧には数時間〜数日かかることがあり、最後の手段として位置づけられています。
TransientテーブルにFail-safeはありますか?
いいえ、TransientテーブルにはFail-safe期間がありません(0日)。これがTransientテーブルの最大の特徴であり、Permanentテーブル(Fail-safe 7日間)と比較してストレージコストを大幅に削減できます。TransientテーブルのTime Travel保持期間はStandard Editionで0〜1日、Enterprise以上で0〜1日(最大1日に制限)です。Permanentテーブルは最大90日のTime Travelが可能ですが、TransientテーブルはTime Travelも最大1日に制限されます。ETLのステージングテーブルや中間テーブルなど、復旧不要な一時データにはTransientテーブルを使用してストレージコストを最適化しましょう。
DATA_RETENTION_TIME_IN_DAYSのデフォルト値と最大値は?
DATA_RETENTION_TIME_IN_DAYSのデフォルト値は1日で、これは全エディション共通です。最大値はエディションによって異なり、Standard Editionでは1日(変更不可)、Enterprise以上では最大90日まで設定可能です。このパラメータはアカウント・データベース・スキーマ・テーブルの各レベルで設定でき、下位レベルの設定が上位レベルを上書きします。例えばアカウントレベルで30日に設定していても、特定のステージングテーブルだけ0日に設定して保持期間を無効化できます。保持期間を長くするとストレージコストが増加するため、テーブルの重要度に応じて適切な値を設定してください。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Snowflake資格一覧|全11試験(SnowPro)の難易度・費用
Snowflake認定資格(SnowPro)全11試験の一覧・難易度・費用・出題範囲を徹底解説。...
Snowflake試験の難易度ランキング|全11資格を徹底比較
Snowflake(SnowPro)認定全11試験の難易度をランキング形式で比較。学習時間・合格に必要なスキルから分析。...
Snowflake資格の勉強方法|効率的な学習ルートと合格のコツ
Snowflake認定資格(SnowPro)に最短で合格するための勉強方法。公式リソース・学習スケジュールを徹底ガイド。...
SnowPro Core試験完全解説|出題範囲・問題例・合格戦略
SnowPro Core Certification(COF-C03)を徹底解説。出題範囲・100問の試験形式・合格ライ...
SnowPro Platform Associate完全解説|入門試験の攻略
SnowPro Associate: Platform Certification(SOL-C01)を徹底解説。最も簡単...