❄️

Snowflake:COPY INTO … FROM stage と INSERT INTO … SELECT FROM stage の違い

2021/08/19に公開

結論

ステージ上のファイルをロードしたというメタデータを保持/利用するかどうかの違い。

検証

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