Snowflake COPY INTO加载大文件:能否突破16MB默认限制?
关于Snowflake加载Azure Blob中大文件的限制问题
首先澄清一个关键误解:Snowflake的COPY INTO在**加载数据(从外部存储到Snowflake)时,并没有默认的16MB文件大小限制,它原生支持加载GB甚至TB级的大文件。你提到的16MB默认限制是针对卸载数据(Snowflake导出到外部存储)**的MAX_FILE_SIZE参数,加载场景下该参数不适用。
如果你的大文件加载出现报错,大概率是单条记录(而非整个文件)的大小超过了默认限制,可通过以下方式调整:
针对JSON文件:
默认情况下,Snowflake限制单条JSON记录的最大大小为16MB。如果你的JSON文件中存在超大单条记录,可以在定义文件格式时调整MAX_RECORD_SIZE参数,最大值可设为167772160字节(160MB)。
示例SQL:CREATE OR REPLACE FILE FORMAT my_json_format TYPE = JSON MAX_RECORD_SIZE = 167772160; -- 调整为160MB若你的JSON是数组格式且外层数组包裹多条记录,确保
STRIP_OUTER_ARRAY = TRUE(默认值)即可,此时Snowflake会拆分数组加载单条记录,不会触发单条记录大小限制。针对CSV文件:
若CSV中存在超大字段导致单条记录超出16MB限制,同样可以在CSV文件格式中设置MAX_RECORD_SIZE参数调整上限:CREATE OR REPLACE FILE FORMAT my_csv_format TYPE = CSV FIELD_OPTIONALLY_ENCLOSED_BY = '"' MAX_RECORD_SIZE = 167772160;
如果只是担心大文件的加载效率,无需手动拆分——Snowflake会自动并行处理大文件,后台将其拆分为多个微批次加载,不影响性能。
内容的提问来源于stack exchange,提问作者MBH
相关产品推荐
相关产品推荐

