You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过ADF复制活动将CSV缺失值转为SQL Server可识别的Null值?

问题描述

我在Azure Data Factory(ADF)中搭建了数据管道,流程是接收CSV文件,清洗后通过复制活动调用存储过程,将数据存入SQL Server目标表。当CSV文件存在部分记录列缺失值时,复制活动执行失败,报错信息如下:

ErrorCode=InvalidParameter,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=The value of the property '' is invalid: 'Cannot set Column 'col 1' to be null. Please use DBNull instead.'

无缺失值时复制活动运行正常。存储过程核心代码片段:

INSERT INTO target_table(
    [Id],
    [col 1],
    [col 2],
    [col 3]
)    
SELECT
    [source Id],
    [column 1],
    [column 2],
    [column 3]
FROM source_table

我已在SQL Server端创建测试表,插入含缺失值的测试数据并执行存储过程,能正常保存,因此判断问题出在ADF复制活动将CSV缺失值转换为SQL Server可识别Null值的环节,求解决方法。

解决方法

针对ADF复制活动无法将CSV缺失值正确转换为SQL Server DBNull的问题,可从以下维度调整:

1. 配置CSV数据集的空值映射

在ADF的CSV数据集编辑界面中:

  • 切换至连接标签,找到「Null值」设置项,将空白单元格或缺失值直接映射为Null。
  • 若通过架构导入字段,确保每个允许空值的列,其「允许空值」属性设置为是,避免ADF将缺失值识别为无效值而非标准Null。

2. 调整复制活动的源端设置

在复制活动的源配置面板中:

  • 勾选「允许空值」选项,确保ADF读取CSV时将空白单元格或缺失列值解析为Null,而非空字符串或未定义值。
  • 若CSV中缺失值以空字符串形式存在,可添加数据转换规则,用ADF表达式@if(equals(item(), ''), null, item())将空字符串转换为Null。

3. 存储过程显式兼容DBNull

虽然数据库端测试正常,但可在存储过程中显式处理值,确保ADF传递的空值被正确转换:

INSERT INTO target_table(
    [Id],
    [col 1],
    [col 2],
    [col 3]
)    
SELECT
    [source Id],
    ISNULL([column 1], DBNULL) AS [col 1],
    ISNULL([column 2], DBNULL) AS [col 2],
    ISNULL([column 3], DBNULL) AS [col 3]
FROM source_table

若ADF先将数据写入临时表再调用存储过程,需确保临时表的列「允许空值」属性与目标表完全一致。

4. 检查复制活动的类型映射配置

在复制活动的映射标签中:

  • 确认CSV源列与SQL Server目标列的数据类型匹配,且两者的「允许空值」设置保持一致。
  • 若存在类型转换需求,可在复制活动前添加派生列活动,将缺失值显式转换为Null后再传入复制环节。

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 06:30:49