🐵

SnowflakeにおけるTEMPORARY TABLEとTRANSIENT TABLEの扱い

2023/09/23に公開

TEMPORARY TABLE(仮テーブル)

  • 非永続的な一時データ(ETLデータ、セッション固有のデータ)を保存するための一時テーブル
  • 作成されたセッション内のみに存在する
  • セッションの残りの間のみ持続する
  • これらのテーブルが不要になったら明示的に削除するというのがプラクティス
    • テーブルが作成されたセッションを明示的に終了して、追加料金が発生しないようにする

他のテーブルタイプとの潜在的な命名競合

  • 仮テーブルは指定されたデータベースとスキーマに属する

  • ただし、これら(TEMPORARY TABLE)はセッションベースであるため、同じ一意性の要件に拘束されない。

    • 同じスキーマ内に同じ名前の仮テーブルと非仮テーブルを作成できる
  • ただし、セッションでは、同じスキーマ内の同じ名前の他のテーブルよりも仮テーブルが優先されるので注意

    • 特に仮テーブルと非仮テーブルの両方でDDL(Data Definition Language)を実行する場合、潜在的な競合と予期しない動作が発生する可能性がある
      • 同じスキーマ内の既存のテーブルと同じ名前を持つ仮テーブルを作成して、既存のテーブルを事実上非表示にする
      • 同じスキーマの既存の仮テーブルと同じ名前のテーブルを作成
      • その後、テーブルのセッションで実行されるすべてのクエリおよびその他の操作は、仮テーブルにのみ影響する
CREATE TEMPORARY TABLE mytemptable (id NUMBER, creation_date DATE);

TRANSIENT TABLE(一時テーブル)

  • 明示的に削除されるまで持続し、適切な権限を持つすべてのユーザーが使用できる一時テーブル
  • 永続テーブルとの違いはFail-safe期間がないこと
  • 各セッションを超えて維持する必要がある一時的なデータ用に特別に設計されているが、永続テーブルによって提供される同じレベルのデータ保護と回復は必要ない
CREATE TRANSIENT TABLE mytranstable (id NUMBER, creation_date DATE);

参照

https://docs.snowflake.com/ja/user-guide/tables-temp-transient#temporary-tables

Discussion