❄️
Snowflake:COPY INTO … FROM stage と INSERT INTO … SELECT FROM stage の違い
結論
ステージ上のファイルをロードしたというメタデータを保持/利用するかどうかの違い。
検証
COPY 1回目
COPY INTO test_table
FROM @my_s3_bucket/load/LANGDESC.txt
file_format = test_format;
結果(1回目)
load_history
を確認
copy_history()
を確認
COPY 2回目(同じCOPY文の再実行)の結果
FORCE=TRUE
オプションを付けない限り一度ロードしたファイルはロードされない。
load_history
,copy_history()
には変化なし。
別のSYNTAXでCOPY 3回目
COPY INTO test_table
FROM (SELECT $1,$2 FROM @my_s3_bucket/load/LANGDESC.txt)
file_format = test_format;
結果(3回目)
やはりコピー済みのファイルはコピーされない。
load_history
,copy_history()
には変化なし。
INSERT INTO SELECT FROM <stage>
INSERT INTO test_table
(SELECT $1,$2 FROM @my_s3_bucket/load/LANGDESC.txt
(file_format => test_format) );
結果(INSERT INTO SELECT FROM <stage>)
行は挿入される。
load_history
,copy_history()
には変化なし。
Discussion