You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Snowflake加载GeoJSON文件遇文档过大错误:原因排查与解决

解决Snowflake加载大GeoJSON时的JSON解析过大错误

问题原因

你遇到的100069 (22P02): Error parsing JSON: document is too large, max size 16777216 bytes错误,核心原因如下:

  • Snowflake默认将整个JSON文件视为单个JSON实体解析,你的GeoJSON是包含1GB数据的FeatureCollection单对象,远超Snowflake单JSON实体16MB的硬性限制。
  • 虽然单个feature仅30KB,但Snowflake在解析阶段会先读取整个文件对应的JSON对象,这一步就触发了大小限制,后续的数组拆分逻辑根本无法执行。
  • 你设置的strip_outer_array = True仅对顶层为数组的JSON文件有效,而你的GeoJSON顶层是FeatureCollection对象,该参数完全不起作用。

解决方案

方案1:预处理GeoJSON文件(推荐)

将GeoJSON中的features数组拆分为每行一个独立的JSON对象,把源文件结构从:

{"type": "FeatureCollection", "name": "myshapefileinjson", "crs": {...}, "features": [{"type": "Feature", ...}, {"type": "Feature", ...}]}

转换为:

{"type": "Feature", "properties": {"fid": 1, "string_id": "111011"}}
{"type": "Feature", "properties": {"fid": 2, "string_id": "1110114"}}

转换完成后,使用以下SQL加载即可:

COPY INTO raw.myschema.mytable
FROM @my_aws_s3_stage/my_processed_geojson.gz
FILE_FORMAT = (TYPE = JSON)

这种方式下,每个行都是一个独立的JSON实体,大小远低于16MB限制,Snowflake可以正常解析并加载。

方案2:利用Snowflake流处理能力(无需修改源文件)

如果无法修改源文件,可通过阶段文件读取+FLATTEN展开的方式处理(仅适用于文件压缩后小于16MB的情况,若压缩后仍超16MB则需用方案1):

  1. 创建临时表存储整个GeoJSON对象:
CREATE TEMP TABLE temp_geojson (data VARIANT);

COPY INTO temp_geojson
FROM @my_aws_s3_stage/myfile.geojson.gz
FILE_FORMAT = (TYPE = JSON);
  1. 从临时表中展开features数组并插入目标表:
INSERT INTO raw.myschema.mytable
SELECT value
FROM temp_geojson,
LATERAL FLATTEN(input => data:features);

故障排查步骤

  • 定位错误本质:从错误信息中的max size 16777216 bytes直接判断是单JSON实体大小超限,而非单个feature的问题。
  • 验证文件结构:确认GeoJSON顶层是FeatureCollection对象而非数组,这是导致整个文件被当作一个实体的关键。
  • 小文件测试:截取GeoJSON中的2-3个feature生成小文件,用原SQL测试,验证拆分逻辑是否可行,排除语法问题。
  • 检查格式参数:确认strip_outer_array等参数的适用场景,避免无效配置。

内容的提问来源于stack exchange,提问作者ffi23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 04:01:11