Snowflake中COPY INTO解析字符串数组至ARRAY列报错如何解决?
问题:Snowflake导入CSV到ARRAY列时JSON解析错误
我的Snowflake表中有一个声明为ARRAY数据类型的列,尝试通过COPY INTO从CSV导入数据时遇到错误。某行该列的值为["A","B"],但返回错误:
Error parsing JSON: "[""A"",""B""]"
我在Snowflake控制台测试CHECK_JSON函数时得到不一致结果:
CALL CHECK_JSON('["A", "B"]'); -- 返回null(表示JSON格式有效) CALL CHECK_JSON("[\"\"A\"\",\"\"B\"\"]"); -- 返回错误
请问应如何格式化数据来解决此错误?
解决方法
1. 修正CSV源文件的转义格式
错误信息里的[\"\"A\"\",\"\"B\"\"]说明CSV中的JSON数组被重复转义了——CSV默认会把字段内的双引号转义为两个双引号,这会破坏JSON的格式。你需要确保CSV中该列的原始值是未被额外转义的标准JSON数组,即直接写入["A","B"],不要给JSON里的双引号加额外转义。
2. 调整COPY INTO的文件格式参数
如果无法修改CSV源文件,可以通过定义正确的文件格式来适配:
-- 创建适配JSON数组的CSV文件格式 CREATE OR REPLACE FILE_FORMAT array_csv_format TYPE = CSV FIELD_OPTIONALLY_ENCLOSED_BY = '"' -- 仅当字段包含分隔符时用双引号包裹 ESCAPE = '\\' -- 指定反斜杠为转义字符,避免CSV的双引号转义规则干扰JSON TRIM_SPACE = TRUE; -- 使用该格式执行导入 COPY INTO your_target_table FROM @your_stage_location FILE_FORMAT = array_csv_format;
3. 显式解析字符串为ARRAY类型
如果CSV中的值已经是被错误转义的字符串,可以在导入时用PARSE_JSON函数显式转换:
COPY INTO your_target_table(id, target_array_column) SELECT $1, -- 对应其他列 PARSE_JSON($2) -- 将第二列的字符串解析为ARRAY FROM @your_stage_location FILE_FORMAT = (TYPE = CSV);
内容的提问来源于stack exchange,提问作者Woody1193
相关产品推荐
相关产品推荐

