💬

Snowflake FORCEについて

2022/10/27に公開

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