🌫️

SnowPro Core資格への道 ~Part12:TEMPORARY TABLEとTRANSIENT TABLE~

に公開

はじめに

9月のSnowflake World Tour TokyoまでにSnowPro Coreをとります!

試験を8月28日(木)に受けようと思います。あと29日。
2周目第3回、66%。前回の71%から大幅に下がってテンションも低めです。
正直お盆以降SWTに向けたイベント準備とかやることが多すぎる。
自分で完結できることは早く終わらせたくなってきているので、スピードアップしたいです(っていう言霊)

現在こちらのUdemyの問題を解いています。
Snowflake SnowPro Core Certification Practice Tests COF-C02

今日の話題は仮テーブル(TEMPORARY TABLE)と一時テーブル(TRANSIENT TABLE)、です。
日本語の公式ドキュメントには仮:TEMPORARY、一時:TRANSIENTと書いてありますが、自動翻訳などするとどちらも一時テーブルになってしまうため混乱のもとになりますね。
https://docs.snowflake.com/ja/user-guide/tables-temp-transient#potential-naming-conflicts-with-other-table-types

📖【Snowflake】TEMPORARYテーブルとTRANSIENTテーブル、どう使い分ける?違いをサクッと解説

Snowflakeでデータを扱う際、CREATE TABLEコマンドでテーブルを作成しますが、実はいくつかの種類があることをご存知ですか?特に、TEMPORARYテーブルとTRANSIENTテーブルは、似ているようでいて重要な違いがあります。

この記事では、両者の特徴と違いを明確にし、どのようなシーンでどちらを使うべきかの指針を分かりやすく解説します。

✅TEMPORARYテーブルとは?

一番の特徴は、作成されたセッション内でのみ有効であるという点です。セッションが終了すると、このテーブルは自動的にドロップ(削除)されます。

私は↓の部分が面白い!って思いました。

仮テーブルは永続テーブルと同じデータベース、スキーマ内に作成することができる。
仮テーブルを作ったら永続テーブルは事実上非表示にできちゃう!(なんと!)

📝 主な特徴

  • セッション限定の寿命: 作成したセッションが終了すると自動的に消滅します。
  • Time Travel対象外: 0日または1日の設定が可能です。ただしセッションが終了すると使えません。
  • Fail-safe対象外: ディザスタリカバリのためのFail-safe領域にも保存されません。
  • ストレージコスト: 一時的ではありますが、テーブルが存在している間のストレージコストは発生します。Time Travelも設定した場合発生します。ただしFail-safeのコストはかかりません。

どんなときに使う?

ETL/ELT処理の途中で発生する中間データを一時的に置いておきたい場合や、特定の分析のために一度だけ必要な集計結果を格納する、といった用途に最適です。

-- TEMPORARYテーブルの作成
CREATE TEMPORARY TABLE my_temp_table (
  id INT,
  data VARCHAR
);

✅ TRANSIENTテーブルとは?

TRANSIENT(つかの間の)テーブルは、TEMPORARYテーブルPERMANENTテーブルの中間のような存在です。
セッションが終了してもテーブルは残り続けますが、一部のデータ保護機能が省略されています。

📝 主な特徴

  • 永続的な存在
    セッションが終了してもテーブルは削除されません。

  • 限定的なTime Travel
    Time Travelは最大1日まで利用可能です(デフォルト設定の場合)。

  • Fail-safe対象外
    TEMPORARYテーブルと同様に、Fail-safeの対象ではありません。

  • ストレージコスト
    通常のストレージコストは発生しますが、Fail-safe分のコストは不要です。

💡 どんなときに使う?

  • 開発環境でのテストデータ
  • 定期的に洗い替えされるキャッシュデータ
  • 本番データほどの保護は不要だが、セッションをまたいで保持したいデータ

💻 SQL例

-- TRANSIENTテーブルの作成
CREATE TRANSIENT TABLE my_transient_table (
  id INT,
  data VARCHAR
);

🔍 違いを一覧で比較

項目 TEMPORARY テーブル TRANSIENT テーブル PERMANENT テーブル(参考)
永続性 セッション内のみ 永続的 永続的
Time Travel ❌ 対象外 ✅ 最大1日(デフォルト) ✅ 最大90日(設定により変更可)
Fail-safe ❌ 対象外 ❌ 対象外 ✅ 対象
ストレージコスト あり(Fail-safeなし) あり(Fail-safeなし) あり(Fail-safe込み)
クローン(ゼロコピー) ✅ 可能(同一セッション内のみ。クローンも Temporary 扱い) ✅ 可能(保持期間内なら ポイントインタイム クローン可、保持0日は「現在時点」のみ) ✅ 可能(設定した保持期間内で ポイントインタイム クローン可)

✨ まとめ

使用目的 推奨テーブル
一時的な中間処理や一時集計 TEMPORARY
開発用のテストデータ・キャッシュ TRANSIENT
本番データや重要なデータ管理 PERMANENT(通常のテーブル)
Snowflake Data Heroes

Discussion