7月3日Snowflake故障后,CSV导入JSON解析报错求助
CSV导入Snowflake出现JSON解析错误(7月3日故障后突发)
问题背景
25条从S3桶导入CSV到Snowflake的数据管道,已稳定运行3年,但7月3日Snowflake故障后,开始出现JSON解析错误,无法正常导入。
错误信息
Error parsing JSON: 0xB10xBB_0xA0_id0xA0667bcf7b2aec09997408c3890xA0activeɠapplications0xAD0x820xB10xA0custom0xB1M0xA0applicationjnaccoffurltx��application File 'file_name_and_path.csv.gz', line 2, character 0 Row 1, column "DATA"["SRC":3] If you would like to continue loading when an error is encountered, use other values such as 'SKIP_FILE' or 'CONTINUE' for the ON_ERROR option. For more information on loading options, please run 'info loading_data' in a SQL client.
使用的COPY INTO命令
COPY INTO MY_TABLE FROM 's3://<stage>' FILE_FORMAT = ( TYPE = CSV FIELD_DELIMITER = ',' NULL_IF = ('\\N') FIELD_OPTIONALLY_ENCLOSED_BY = '"' SKIP_HEADER = 1 ERROR_ON_COLUMN_COUNT_MISMATCH = TRUE COMPRESSION = GZIP ) credentials=(aws_key_id='***************' aws_secret_key='************************')
已尝试的操作
- 验证CSV文件的内容和结构完整性
- 确认S3桶及文件路径正确
- 确认AWS凭证有效且具备必要权限
- 查阅Snowflake文档,确认COPY INTO语法及文件格式选项无变更
- 尝试使用
ON_ERROR='SKIP_FILE'和ON_ERROR='CONTINUE'参数绕过错误,但问题依旧
期望结果
CSV文件能像7月3日故障前一样成功导入Snowflake表,数据按指定文件格式正确加载,无JSON解析错误。
可能的解决方向
1. 检查目标表字段类型是否变更
错误提示指向column "DATA"["SRC":3],确认该字段是否被意外修改为JSON类型。如果CSV对应列的内容并非合法JSON,而表字段类型为JSON,会直接触发解析错误。
2. 指定文件编码解决乱码问题
错误信息中的乱码(如0xB10xBB、ɠ)提示编码不匹配,在文件格式中明确指定编码(比如UTF8,或文件实际使用的编码):
FILE_FORMAT = ( TYPE = CSV FIELD_DELIMITER = ',' NULL_IF = ('\\N') FIELD_OPTIONALLY_ENCLOSED_BY = '"' SKIP_HEADER = 1 ERROR_ON_COLUMN_COUNT_MISMATCH = TRUE COMPRESSION = GZIP ENCODING = 'UTF8' -- 替换为文件实际编码 )
3. 验证单条数据的JSON合法性
提取报错行的DATA字段原始内容,用Snowflake函数测试是否能正常解析:
SELECT TRY_PARSE_JSON('<该字段原始内容>');
如果返回NULL,说明内容本身不是合法JSON,需要检查数据生成端是否在故障后输出了异常格式的数据。
4. 排查文件格式的隐性变更
如果使用命名文件格式而非内联定义,确认命名格式未被修改;内联格式则检查Snowflake是否在故障后调整了默认参数(比如解析逻辑的隐性更新)。
5. 用VALIDATION_MODE获取详细错误
在COPY命令中添加验证模式,获取更精准的错误行和内容:
COPY INTO MY_TABLE FROM 's3://<stage>' FILE_FORMAT = ( TYPE = CSV FIELD_DELIMITER = ',' NULL_IF = ('\\N') FIELD_OPTIONALLY_ENCLOSED_BY = '"' SKIP_HEADER = 1 ERROR_ON_COLUMN_COUNT_MISMATCH = TRUE COMPRESSION = GZIP ) credentials=(aws_key_id='***************' aws_secret_key='************************') VALIDATION_MODE = 'RETURN_ERRORS';
内容的提问来源于stack exchange,提问作者mict0
相关产品推荐
相关产品推荐

