如何配置Azure Data Factory遇Snowflake错误时继续加载
我在使用Azure Data Factory (ADF) 向Snowflake复制数据时,遇到了字符串过长导致的截断错误,错误详情如下:
ErrorCode=UserErrorOdbcOperationFailed,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=ERROR [22000] String '<div class="ExternalClassFEF297CEF4014BF7AC93A5068BA8801E"><div style="font-family:Calibri, Arial' is too long and would be truncated
File '912f8683-d5da-48ce-b009-493f9b2b39b1/SnowflakeImportCopyCommand/Commentary6ec0c04003c6aa892ecde458ae63679bc746fc7a2bed3859b1a395d4b1f80279.txt', line 2, character 0
Row 2, column "COMMENTARY"["COMMENTARY":10]
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.,Source=Microsoft.DataTransfer.Runtime.GenericOdbcConnectors,''Type=System.Data.Odbc.OdbcException,Message=ERROR [22000] String '<div class="ExternalClassFEF297CEF4014BF7AC93A5068BA8801E"><div style="font-family:Calibri, Arial' is too long and would be truncated
File '912f8683-d5da-48ce-b009-493f9b2b39b1/SnowflakeImportCopyCommand/Commentary6ec0c04003c6aa892ecde458ae63679bc746fc7a2bed3859b1a395d4b1f80279.txt', line 2, character 0
Row 2, column "COMMENTARY"["COMMENTARY":10]
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.,Source=SnowflakeODBC_sb64.dll,'
经分析,该错误由COMMENTARY列字符串长度超过Snowflake字段定义导致。相同数据复制到Azure SQL DB可正常完成,但Snowflake触发截断错误。以下是配置ON_ERROR选项实现遇错继续加载的具体方法:
方法1:通过Snowflake接收器的额外复制选项配置
- 打开ADF中的目标复制活动,切换到接收器选项卡
- 在Snowflake接收器设置区域,找到额外复制选项模块
- 点击添加按钮,新增键值对:
- 键:
ON_ERROR - 值:根据需求选择
CONTINUE(跳过错误行,继续加载其余数据)或SKIP_FILE(跳过包含错误的整个文件)
补充:还可使用
SKIP_FILE_n(当文件内错误行数超过n时跳过),默认值为ABORT_STATEMENT(遇错即终止) - 键:
方法2:使用预复制脚本设置会话级策略
如果需要在每次复制任务执行前统一配置错误处理规则,可在复制活动的预复制脚本中输入:
ALTER SESSION SET ON_ERROR = 'CONTINUE';
该脚本会在数据加载前修改Snowflake会话的错误处理策略,适用于所有后续复制操作。
额外注意事项
CONTINUE模式下,错误行不会被加载,但会记录到Snowflake的COPY_HISTORY视图中,可通过查询该视图排查问题SKIP_FILE模式会直接跳过有错误的文件,适合错误文件占比低、对单文件完整性要求不高的场景- 若要彻底解决截断问题,建议调整Snowflake表中
COMMENTARY列的数据类型长度(例如从VARCHAR(10)改为VARCHAR(1000)或TEXT)
内容的提问来源于stack exchange,提问作者Patterson

