📘
Snowflake SIZE_LIMITについて
今回は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