Snowflake COPY命令未向指定表插入数据,Talend任务无报错问题排查
排查点梳理
- 优先查看第一条
COPY INTO语句的具体报错详情,全文件被拒通常是文件格式、解析规则不匹配导致,可重点核对以下配置:- 导出文件的字段分隔符是否与COPY语句中指定的一致,默认分隔符为逗号,若Talend导出时使用了制表符、分号等其他分隔符,需要在
file_format中追加FIELD_DELIMITER参数指定 - 检查导出文件的编码是否为UTF-8,行结束符是否为Snowflake可识别的格式,Windows生成的CRLF格式如果未被自动识别可在
file_format中指定RECORD_DELIMITER = '\r\n' - 核对文件的字段数量、字段顺序是否与临时表完全匹配,无多余或缺失字段
- 导出文件的字段分隔符是否与COPY语句中指定的一致,默认分隔符为逗号,若Talend导出时使用了制表符、分号等其他分隔符,需要在
- 注意
validation_mode='return_all_errors'参数的作用仅为校验文件、返回错误信息,不会实际将数据加载到临时表,你在校验步骤看到的9.6k行是待校验的总数据量,并非已经写入临时表的数据。第一条COPY执行失败后临时表为空,后续INSERT语句自然不会向目标表写入任何数据。 - 检查目标EVENTS表的约束配置:如果存在主键唯一约束、非空约束等限制,即使临时表有数据,插入时也可能因约束冲突被拦截。可在QUERY_HISTORY中查看对应INSERT语句的
rows_inserted字段,确认实际插入的行数。 - 校验上传到stage的文件完整性:PUT语句执行完成后可运行
LIST @~/EVENTS/INSERT/20210826_185008_230_NLF1NE_1,对比返回的文件大小与本地源文件是否一致,排除上传过程中文件损坏的问题。 - 检查事务有效性:你手动关闭了自动提交,虽然执行了两次commit操作,可确认操作过程中是否发生过会话切换、数据库/ schema切换的情况,避免事务未正常生效。
内容的提问来源于stack exchange,提问作者Djabone
相关产品推荐
相关产品推荐

