💬
Snowflake FORCEについて
COPYオプションFORCEについて動作確認していきたいと思います。
FORCEとは
ドキュメントより抜粋
FORCE = TRUE | FALSE
定義:以前にロードされたかどうか、ロード後に変更があったかどうかに関係なく、
すべてのファイルをロードするよう指定するブール値。
このオプションはファイルを再ロードし、
テーブル内のデータを複製する可能性があることに注意します。
デフォルト:FALSE
Trueにするとデータが複製される可能性があるみたいですね。
とりあえず動作確認していきましょう!
動作確認
準備
CREATE OR REPLACE TABLE COPY_DB.PUBLIC.ORDERS (
ORDER_ID VARCHAR(30),
AMOUNT VARCHAR(30),
PROFIT INT,
QUANTITY INT,
CATEGORY VARCHAR(30),
SUBCATEGORY VARCHAR(30));
CREATE OR REPLACE STAGE COPY_DB.PUBLIC.aws_stage_copy
url='s3://snowflakebucket-copyoption/size/';
普通にCOPYしてデータをロードします
COPY INTO COPY_DB.PUBLIC.ORDERS
FROM @aws_stage_copy
file_format= (type = csv field_delimiter=',' skip_header=1)
pattern='.*Order.*'
file | status | rows_parsed | rows_loaded | error_limit | errors_seen | first_error | first_error_line | first_error_character | first_error_column_name |
---|---|---|---|---|---|---|---|---|---|
s3://snowflakebucket-copyoption/size/Orders2.csv | LOADED | 1500 | 1500 | 1 | 0 | ||||
s3://snowflakebucket-copyoption/size/Orders.csv | LOADED | 1500 | 1500 | 1 | 0 |
再度もう一度同じCOPYコマンドを実行します。
すでに一度ロードしているので、コピーはされません。
Copy executed with 0 files processed.
行数をカウント
select count(*) from orders;
Row | COUNT(*) |
---|---|
1 | 3000 |
FORCEを使ってロードする
COPY INTO COPY_DB.PUBLIC.ORDERS
FROM @aws_stage_copy
file_format= (type = csv field_delimiter=',' skip_header=1)
pattern='.*Order.*'
FORCE = TRUE;
行数をカウント
select count(*) from orders;
Row | COUNT(*) |
---|---|
1 | 6000 |
FORCEを使ったことにより、重複が出ていることが分かります。
以上で簡単なFORCEの動作確認を行いました。
Discussion