Snowflakeは「Continuous Data Protection(CDP)」という包括的なデータ保護の仕組みを持ち、 Time Travel → Fail-safe → データ暗号化の多層防御でデータを保護しています。 本記事では、CDPの全体像とFail-safeの仕組み、Time Travelとの明確な違い、 テーブルタイプ別の保護期間の違いを比較表つきで解説します。
CDPはSnowflakeのデータ保護フレームワークで、以下の3つの要素で構成されます。
CDPのタイムライン:
← データ変更時点 ──────────────────────────────→ 時間経過
[即時] [Time Travel期間] [Fail-safe期間]
│ │ │
│ ユーザー自身で復旧可能 Snowflakeサポート
│ - UNDROP のみ復旧可能
│ - SELECT ... AT/BEFORE (ベストエフォート)
│ - CREATE ... CLONE ... AT/BEFORE
│ │ │
│ 1〜90日(設定次第) 7日間(固定)
├──────────────────┤──────────────────────┤
│
保護期間終了 → データ完全削除| 比較項目 | Time Travel | Fail-safe |
|---|---|---|
| 制御主体 | ユーザー(セルフサービス) | Snowflake(サポート経由) |
| 保護期間 | 0〜90日(DATA_RETENTION_TIME_IN_DAYSで設定) | 7日間(固定・変更不可) |
| 復旧方法 | UNDROP / SELECT ... AT|BEFORE / CLONE ... AT|BEFORE | Snowflakeサポートへの依頼 |
| 復旧の保証 | 保証される(期間内なら確実に復旧可能) | ベストエフォート(保証なし) |
| 開始タイミング | データ変更直後から | Time Travel期間終了後から |
| ストレージ費用 | 変更前データの保持分だけ課金 | 変更前データの保持分だけ課金 |
| 対象テーブルタイプ | Permanent / Transient / Temporary | Permanentのみ |
| 設定パラメータ | DATA_RETENTION_TIME_IN_DAYS | なし(自動適用) |
テーブルタイプによってTime TravelとFail-safeの適用期間が異なります。コスト最適化とデータ保護のバランスを取る上で、適切なテーブルタイプの選択が重要です。
| テーブルタイプ | Time Travel(最大) | Fail-safe | 合計最大保護期間 | 主な用途 |
|---|---|---|---|---|
| Permanent(Standard Edition) | 1日 | 7日 | 8日 | 本番データ |
| Permanent(Enterprise Edition+) | 90日 | 7日 | 97日 | 本番データ |
| Transient | 1日 | 0日 | 1日 | ステージング・中間処理 |
| Temporary | 1日 | 0日 | 1日 | セッション内一時処理 |
-- Permanentテーブル(デフォルト)
CREATE TABLE production_data (
id NUMBER,
data VARIANT
);
-- Time Travel: 最大90日(Enterprise+)、Fail-safe: 7日
-- Transientテーブル
CREATE TRANSIENT TABLE staging_data (
id NUMBER,
raw_json VARIANT
);
-- Time Travel: 最大1日、Fail-safe: なし
-- Temporaryテーブル
CREATE TEMPORARY TABLE session_temp (
key STRING,
value STRING
);
-- Time Travel: 最大1日、Fail-safe: なし
-- セッション終了時に自動削除
-- Time Travel保持期間の設定
ALTER TABLE production_data
SET DATA_RETENTION_TIME_IN_DAYS = 90;
-- テーブルの保持期間を確認
SHOW TABLES LIKE 'production_data';
-- → retention_time カラムで確認Time TravelとFail-safeは変更前のデータ(古いマイクロパーティション)を保持するため、追加のストレージ費用が発生します。
ストレージ消費の内訳:
[アクティブストレージ] ← 現在のテーブルデータ
+
[Time Travelストレージ] ← 変更前のマイクロパーティション(設定期間分)
+
[Fail-safeストレージ] ← Time Travel期間後のデータ(7日分)
=
[合計ストレージ費用]
※ 頻繁にUPDATE/DELETEされるテーブルほどTime Travel/Fail-safeのストレージが大きくなる
※ INSERT ONLYのテーブルでは追加ストレージはほとんど発生しない-- ストレージ使用状況の確認
SELECT
TABLE_NAME,
ACTIVE_BYTES / (1024*1024*1024) AS active_gb,
TIME_TRAVEL_BYTES / (1024*1024*1024) AS time_travel_gb,
FAILSAFE_BYTES / (1024*1024*1024) AS failsafe_gb,
(ACTIVE_BYTES + TIME_TRAVEL_BYTES + FAILSAFE_BYTES) / (1024*1024*1024) AS total_gb
FROM SNOWFLAKE.ACCOUNT_USAGE.TABLE_STORAGE_METRICS
WHERE TABLE_CATALOG = 'MY_DB'
ORDER BY total_gb DESC
LIMIT 20;-- 過去の時点のデータを参照(AT句)
SELECT * FROM sales
AT(TIMESTAMP => '2026-03-20 10:00:00'::TIMESTAMP);
-- 指定時間前のデータを参照(OFFSET)
SELECT * FROM sales
AT(OFFSET => -3600); -- 1時間前
-- 特定のステートメント実行前のデータを参照(BEFORE句)
SELECT * FROM sales
BEFORE(STATEMENT => '01b2c3d4-0001-a234-0000-00000000beef');
-- ドロップしたテーブルの復元
UNDROP TABLE deleted_sales;
-- 過去時点のクローンを作成
CREATE TABLE sales_backup CLONE sales
AT(TIMESTAMP => '2026-03-20 10:00:00'::TIMESTAMP);UNDROPはTime Travel期間内でのみ有効です。同名のテーブルが既に存在する場合はUNDROPは失敗します。
CDPの第3の柱として、SnowflakeはすべてのデータをAES-256で自動暗号化します。
| 暗号化レベル | 説明 | エディション |
|---|---|---|
| 保管時暗号化(At Rest) | ストレージ上のデータをAES-256で暗号化 | 全エディション |
| 転送時暗号化(In Transit) | TLS 1.2によるネットワーク暗号化 | 全エディション |
| 階層的鍵管理 | ルートキー→アカウントキー→テーブルキーの階層 | 全エディション |
| 定期的なキーローテーション | Snowflakeが自動で鍵をローテーション | 全エディション |
| Tri-Secret Secure(顧客管理鍵) | 顧客のKMS鍵とSnowflake鍵を組み合わせ | Business Critical |
Fail-safe / CDP
問題 1
Enterprise Editionで作成したTransientテーブルのTime TravelとFail-safeに関する正しい記述はどれか?
正解: C
Transientテーブルはエディションに関係なくTime Travelが最大1日、Fail-safeは0日(適用なし)です。Enterprise Edition以上でTime Travelを最大90日に設定できるのはPermanent(永続)テーブルのみです。Transientテーブルの合計保護期間は最大1日です。
Fail-safeのデータにユーザーが直接アクセスすることはできますか?
いいえ。Fail-safeのデータにはユーザーが直接アクセスすることはできません。Fail-safeはSnowflakeが管理する災害復旧用の保護層であり、データの復旧が必要な場合はSnowflakeサポートに連絡してリカバリを依頼する必要があります。ユーザーが自分でUNDROPやAT/BEFOREで取得できるのはTime Travel期間内のデータのみです。
Fail-safeのストレージ費用を削減する方法はありますか?
Fail-safe自体の期間(7日間)を変更することはできません。ストレージコストを削減するにはテーブルタイプの選択が重要です。Transientテーブルは0日のFail-safe、Temporaryテーブルも0日のFail-safeとなるため、ステージング用や中間処理用のテーブルにはこれらのテーブルタイプを使用することで、Fail-safeのストレージ費用を抑えられます。
Time TravelとFail-safeの期間を合計した保護期間は最大何日ですか?
Permanent(永続)テーブルでEnterprise Edition以上の場合、Time Travel最大90日+Fail-safe 7日で合計最大97日間の保護が可能です。Standard EditionではTime Travelは最大1日のため、合計最大8日間です。なお、Transientテーブルは最大Time Travel 1日+Fail-safe 0日=1日、Temporaryテーブルは最大Time Travel 1日+Fail-safe 0日=1日ですが、セッション終了時にテーブル自体が削除されます。
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)を徹底解説。最も簡単...