一時テーブルと仮テーブルの違い
主な違いとして、持続性とアクセスの違いです
持続性とアクセス
TEMPORARY(一時テーブル)については、セッション中のユーザーのみに対してアクセスができるので
共有することができません。
対して、TRANSIENT(仮テーブル)については、他ユーザーに対して共有することができます。
また、TEMPORARYについてはセッションが終われば削除されますが
TRANSIENTについては明示的に削除しないと残り続けます。
Fail-safe期間
こちらについては、非仮テーブルのため
どちらについてもFail-safe期間は0になります。
命名競合について
こちらについては、結論から言うと非仮テーブルと同じテーブル名にすることは可能です
ただし、セッションでは、同じスキーマ内の同じ名前の他のテーブルよりも仮テーブルが優先されることに注意してください。これにより、特に仮テーブルと非仮テーブルの両方で DDL を実行する場合、潜在的な競合と予期しない動作が発生する可能性があります。
一時テーブルはETLなどには使いたいテーブル
TRANSIENT(仮テーブル)は、セッション外でもデータが残り続けると言いました。
ETLそのもののデータはセッション中のみ欲しいので、この場合は
TEMPOLALYテーブルを使うことをお勧めします。
あとは、MERGE INTOなどで仮テーブルと本番テーブルを結合したりするのにも適しているかなと思います。
実際のSQLはこんな感じになります。
-- LIKEを使って、本番テーブルとスキーマを一致させる
CREATE OR REPLACE TEMPORARY TABLE staging_table_SNOW LIKE SNOW_TRANSACTIONS;
-- ステージングテーブルにデータをロード
COPY INTO staging_table_SNOW
FROM @snow_flake_stock_price_transactions
FILE_FORMAT=(TYPE = CSV FIELD_DELIMITER=',',SKIP_HEADER=1)
PATTERN='.*\.csv';
/* マージコマンドを使用して本番テーブルにデータを追加または更新
DATETIMEがキー列で重複がないので、一致してなければ追加する
そうすることで、同一のデータが入らなくなる。 */
MERGE INTO SNOW_TRANSACTIONS AS target
USING staging_table_SNOW AS source
ON target.DATETIME = source.DATETIME
WHEN NOT MATCHED THEN INSERT (DATETIME,OPEN,HIGH,LOW,CLOSE,VOLUME,DIVIDENDS,STOCK_SPLITS)
VALUES (source.DATETIME,source.OPEN,source.HIGH,source.LOW,source.CLOSE,source.VOLUME,source.DIVIDENDS,source.STOCK_SPLITS);
以上です。参考になれば幸いです。