Snowflake通过Airflow加载JSON报错:字符串外存在无效字符'/'
问题分析与解决方案
针对你通过Airflow加载JSON到Snowflake时出现的Error parsing JSON: invalid character outside of a string: '/'报错,结合手动加载正常、同类DAG无问题的情况,可按以下步骤排查解决:
1. 验证外部Stage中的文件真实性
报错指向文件首字符为/,大概率是Stage中存储的文件与你手动上传的正确JSON不一致:
- 执行Snowflake命令查看Stage文件:
LIST @s3_data_pipeline_repo/transactions.json; - 将Stage中的文件下载到本地检查:
用文本编辑器或GET @s3_data_pipeline_repo/transactions.json file:///your/local/directory/;hexdump命令确认文件开头是否存在/或其他异常字符,同时对比本地正确文件的内容与编码。
2. 检查Airflow的文件上传逻辑(若涉及)
如果Airflow负责将JSON文件上传到S3/Stage,确认上传步骤未出现错误:
- 检查上传任务的文件路径是否正确,避免误传了其他以
/开头的错误文件 - 验证上传过程中是否存在编码转换问题,确保文件以UTF-8格式上传
3. 优化COPY语句的文件格式参数
在现有FILE_FORMAT中补充以下参数,增强容错性:
COPY INTO "STORE"."STAGING"."RAW_DATA" FROM @s3_data_pipeline_repo FILES=('transactions.json') FILE_FORMAT=( TYPE=JSON, STRIP_OUTER_ARRAY=TRUE, REPLACE_INVALID_CHARACTERS=TRUE, TRIM_SPACE=TRUE, ESCAPE_UNENCLOSED_FIELD=NONE, ENCODING='UTF8', DATE_FORMAT=AUTO, TIME_FORMAT=AUTO, TIMESTAMP_FORMAT=AUTO ) MATCH_BY_COLUMN_NAME=CASE_INSENSITIVE ON_ERROR=ABORT_STATEMENT
ENCODING='UTF8'强制指定编码,避免解析时的编码冲突TRIM_SPACE=TRUE去除首尾空白字符(若存在)ESCAPE_UNENCLOSED_FIELD=NONE关闭非字符串字段的转义,防止误解析
4. 直接在Snowflake控制台测试COPY命令
手动执行上述COPY语句,若同样报错则确认是Stage文件问题;若执行成功,则排查Airflow的Snowflake连接配置:
- 确认Airflow使用的Snowflake连接是否指向正确的仓库、数据库与Schema
- 检查连接的权限是否足够读取Stage并写入目标表
内容的提问来源于stack exchange,提问作者user23586926
相关产品推荐
相关产品推荐

