仮テーブルと一時テーブルの使用¶
テーブルを作成する際のデフォルトのテーブルタイプである永続テーブルに加えて、Snowflakeは、一時テーブルまたは一時テーブルの定義をサポートしています。これらのタイプのテーブルは、長期間維持する必要のないデータ(つまり、一時データ)を保存するのに特に役立ちます。
このトピックの内容:
仮テーブル¶
Snowflakeは、非永続的な一時データ(例: ETL データ、セッション固有のデータ)を保存するための一時テーブルの作成をサポートしています。仮テーブルは、作成されたセッション内のみに存在し、セッションの残りの間のみ持続します。そのため、他のユーザーまたはセッションには表示されません。セッションが終了すると、テーブルに保存されたデータはシステムから完全に消去されるため、テーブルを作成したユーザーまたはSnowflakeのいずれによっても回復できません。
注釈
テーブルに加えて、Snowflakeは特定のその他のデータベースオブジェクトを一時(例えば、ステージ)として作成することをサポートしています。これらのオブジェクトは同じセマンティクスに従います(つまり、セッションベースであり、セッションの残りの間のみ持続します)。
仮テーブルのデータストレージの使用¶
仮テーブルが存在する間、テーブルに保存されたデータは、Snowflakeがアカウントに請求する全体的なストレージ料金に寄与します。特に24時間より長い期間維持するセッションで大きな仮テーブルを作成する場合、予期しないストレージ変更を防ぐために、Snowflakeはこれらのテーブルが不要になったら明示的に削除することをお勧めします。テーブルが作成されたセッションを明示的に終了して、追加料金が発生しないようにすることもできます。
詳細については、 テーブルタイプの比較 (このトピック内)をご参照ください。
他のテーブルタイプとの潜在的な命名競合¶
他の種類のテーブル(一時および永続)と同様に、仮テーブルは指定されたデータベースとスキーマに属します。ただし、これらはセッションベースであるため、同じ一意性の要件に拘束されません。これは、同じスキーマ内に同じ名前の仮テーブルと非仮テーブルを作成できることを意味します。
ただし、セッションでは、同じスキーマ内の同じ名前の他のテーブルよりも仮テーブルが優先されることに注意してください。これにより、特に仮テーブルと非仮テーブルの両方で DDL を実行する場合、潜在的な競合と予期しない動作が発生する可能性があります。例:
同じスキーマ内の既存のテーブルと同じ名前を持つ仮テーブルを作成して、既存のテーブルを事実上非表示にすることができます。
同じスキーマの既存の仮テーブルと同じ名前のテーブルを作成できます。ただし、新しく作成されたテーブルは仮テーブルによって非表示になります。
その後、テーブルのセッションで実行されるすべてのクエリおよびその他の操作は、仮テーブルにのみ影響します。
重要
この動作は、セッションでテーブルを削除し、Time Travelを使用してテーブルを復元する場合に特に注意する必要があります。 CREATE OR REPLACE を使用してテーブルを作成するときにこの動作に注意することも重要です。これは、テーブル(存在する場合)を本質的に削除し、指定された定義で新しいテーブルを作成するためです。
仮テーブルの作成¶
仮テーブルを作成するには、 CREATE TABLE で TEMPORARY キーワード(または TEMP の略語)を指定するだけです。
仮テーブルを作成する場合は、オブジェクトが作成されたスキーマに対する CREATE TABLE 権限は必要 ありません。
例:
CREATE TEMPORARY TABLE mytemptable (id NUMBER, creation_date DATE);
注釈
作成後、仮テーブルは他のテーブルタイプに変換できません。
一時テーブル¶
Snowflakeは、明示的に削除されるまで持続し、適切な権限を持つすべてのユーザーが使用できる一時テーブルの作成をサポートしています。一時テーブルは永続テーブルに似ていますが、主な違いはFail-safe期間がないことです。結果として、一時テーブルは、仮テーブルとは対照的に各セッションを超えて維持する必要がある一時的なデータ用に特別に設計されていますが、永続テーブルによって提供される同じレベルのデータ保護と回復は必要ありません。
一時テーブルのデータストレージの使用¶
永続テーブルと同様に、一時テーブルは、Snowflakeがアカウントに請求する全体的なストレージ料金に寄与します。ただし、一時テーブルはFail-safeを利用しないため、Fail-safeコスト(つまり、Fail-safeディザスタリカバリに必要なデータの維持に関連するコスト)はありません。
詳細については、 テーブルタイプの比較 (このトピック内)をご参照ください。
永続テーブルのクローンとして作成される一時テーブル¶
永続テーブルのクローンとして一時テーブルを作成すると、Snowflakeは ゼロコピークローン を作成します。つまり、一時テーブルが作成されると、元の永続テーブルの既存の マイクロパーティション をすべて共有するため、データストレージは使用しません。クローン内で行が追加、削除、更新されると、クローン(この場合は一時テーブル)だけに属する新しいマイクロパーティションが生成されます。
永続テーブルが削除されると、7日間のFail-safeに入ります。Fail-safeバイトには ストレージコスト がかかります。永続テーブルのクローンとして一時テーブルが作成された場合、永続テーブルが削除されてから、そのすべてのバイトがFail-safeに入るまでの時間が遅れる可能性があります。一時テーブルのクローンが削除されたときに、永続テーブルとマイクロパーティションを共有している場合、それらの共有バイトは一時テーブルが削除されたときにのみFail-safeに入ります。
一時データベースとスキーマ¶
Snowflakeは、一時データベースとスキーマの作成もサポートしています。一時スキーマで作成されたすべてのテーブル、および一時データベースで作成されたすべてのスキーマは、定義上、一時的です。
一時テーブル、スキーマ、またはデータベースの作成¶
一時テーブル、スキーマ、データベースを作成するには、オブジェクトの作成時に TRANSIENT キーワードを指定するだけです:
例えば、一時テーブルを作成するには:
CREATE TRANSIENT TABLE mytranstable (id NUMBER, creation_date DATE);
注釈
作成後、一時テーブルは他のテーブルタイプに変換できません。
テーブルタイプの比較¶
次の表は、特にTime TravelとFail-safeへの影響に関して、3つのテーブルタイプの違いをまとめたものです:
型 |
持続性 |
クローニング(ソースタイプ => ターゲットタイプ) |
Time Travel 保持 期間 (日数) |
Fail-safe 期間 (日数) |
---|---|---|---|---|
仮 |
セッションの残り |
仮 => 仮 . . 仮 => 一時的 |
0または1(デフォルトは1) |
0 |
一時的 |
明示的に削除されるまで |
一時的 => 仮 . . 一時的 => 一時的 |
0または1(デフォルトは1) |
0 |
永続的(Standard Edition) |
明示的に削除されるまで |
永続的 => 仮 . . 永続的 => 一時的 . . 永続的 => 永続的 |
0または1(デフォルトは1) |
7 |
永続的(Enterprise Edition以降) |
明示的に削除されるまで |
永続的 => 仮 . . 永続的 => 一時的 . . 永続的 => 永続的 |
0~90(デフォルトは構成可能) |
7 |
Time Travelの注意点¶
テーブルのTime Travel保持期間は、テーブルの作成時またはその後いつでも指定できます。保持期間内に、すべてのTime Travel操作をテーブル内のデータ(例: クエリ)およびテーブル自体(例: クローンおよび復元)に対して実行できます。
永続テーブルのTime Travel保持期間が0に設定されている場合は、テーブルがドロップされるとすぐにFail-safe期間に入ります。
仮テーブルのTime Travel保持期間は1日です。ただし、仮テーブルは(テーブルが作成された)セッションが終了するとパージされるため、実際の保持期間は24時間 または セッションの残りのいずれか短い方になります。
長時間実行されるTime Travelクエリは、クエリが完了するまで、仮テーブルと一時テーブルのパージを遅らせます。
Fail-safeの注意点¶
Fail-safe期間は、どのテーブルタイプにも設定できません。
一時テーブルと仮テーブルには、Fail-safe期間は ありません 。その結果、Time Travelの保持期間を超えて追加のデータストレージ料金は発生しません。
重要
一時テーブルにはFail-safe期間がないため、一時データの保存に使用される非常に大きなテーブルのコストを管理するための適切なオプションを提供します。ただし、これらのテーブルのデータは、Time Travelの保持期間が経過すると回復できません。
例えば、1日後に一時テーブルが削除または失われるシステム障害が発生した場合、データはユーザーまたはSnowflakeによって回復できません。そのため、障害から保護する必要がないデータまたはSnowflakeの外部で再構築できるデータには、一時テーブル のみ を使用することをお勧めします。
詳細については、 データストレージに関する考慮事項 をご参照ください。