📘

Snowflake SIZE_LIMITについて

2022/10/24に公開

今回はSIZE_LIMITについてです。

SIZE_LIMITとは

ドキュメントより抜粋

特定の COPY ステートメントに対してロードされるデータの最大サイズ(バイト単位)を指定する数値(> 0)。
しきい値を超えると、 COPY 操作はファイルのロードを中止します。
このオプションは、通常、複数の COPY ステートメントを使用してファイルの共通グループをロードするために使用されます。
各ステートメントについて、次のステートメントに進む前に、指定された SIZE_LIMIT を超えるまでデータのロードが続行されます。
たとえば、ステージパス内の一連のファイルのサイズがそれぞれ10MBであるとします。
複数の COPY ステートメントが SIZE_LIMIT を 25000000 (25 MB)に設定すると、それぞれが3ファイルをロードします。
つまり、 SIZE_LIMIT のしきい値を超えると、各 COPY 操作は中断されます。
ロードするファイルがない場合を除き、 SIZE_LIMIT に指定された値に関係なく、
少なくとも1つのファイルがロードされることに注意してください。

私の理解ではバイトサイズ単位でロードする閾値を設けることができます。
そしてその閾値を超える際、次のファイルがあるならロードが停止します。
デフォルト値は無制限です。

動作確認

環境準備

DB作成

CREATE OR REPLACE DATABASE COPY_DB;

テーブル作成

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/';

ファイルの容量確認

LIST @aws_stage_copy;
name size md5 last_modified
s3://snowflakebucket-copyoption/size/Orders.csv 54600 1a1c4a47a8e8e43ecef5bf8a46ee4017 Wed, 28 Apr 2021 16:14:06 GMT
s3://snowflakebucket-copyoption/size/Orders2.csv 54598 36bcccace29563ceb1f86a62f599dba3 Wed, 28 Apr 2021 16:29:32 GMT

SIZE_LIMITを指定したCOPYコマンドを実施

2ファイルとも50KB以上なので、制限は20KBバイトとします。
20KBを超えた時点でロードが停止します。なので1つ目のファイルの読み込み中に閾値に達し、次のファイルは読み込まれないでしょう。

COPY INTO COPY_DB.PUBLIC.ORDERS
    FROM @aws_stage_copy
    file_format= (type = csv field_delimiter=',' skip_header=1)
    pattern='.*Order.*'
    SIZE_LIMIT=20000;

予想通りです。2つ目のファイルは読み込まれませんでした。

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/Orders.csv LOADED 1500 1500 1 0

以上、SIZE_LIMITの動作確認でした。

Discussion