Azure Data Factory复制活动:SQL Server无法将nan转为null的解决方案求助
解决方案:处理JSON中的NaN值并导入SQL Server(无Azure IR/Dataflows)
针对你遇到的NaN值无法转为SQL Server可接受的double类型null的问题,给你几个可行的方案:
方案1:在ADF复制活动前添加派生列转换
在数据管道里,复制活动之前加一个派生列转换,针对每个需要处理的数值字段(比如@mom、@mos)写条件表达式,把NaN替换为null:
- 打开派生列编辑器,选择
captain.row数组里的目标字段 - 对
@mos字段,输入表达式:iif(isNaN(@mos), null(), @mos) - 同理处理
@mom字段(统一处理可避免后续出现类似问题)
这个表达式会自动识别NaN值,将其转为SQL Server兼容的null,其他正常数值保持不变。
方案2:用自定义活动(PowerShell)预处理数据
如果派生列满足不了需求,可以用PowerShell自定义活动先获取并清洗数据:
- 编写PowerShell脚本调用API获取JSON数据:
$apiUrl = "你的API地址" $response = Invoke-RestMethod -Uri $apiUrl -Method Get
- 遍历数据中的每个
captain.row条目,替换NaN为null:
foreach ($row in $response.captain.row) { if ([double]::IsNaN($row.'@mom')) { $row.'@mom' = $null } if ([double]::IsNaN($row.'@mos')) { $row.'@mos' = $null } }
- 将处理后的JSON保存到临时存储(比如Blob存储),再用复制活动从临时存储导入SQL Server。
方案3:修改API返回值(若有权限)
如果能联系到API开发团队,直接要求他们把返回数据中的NaN替换为null,这样你之前设置的源数据集Null Value就能直接处理所有空值场景,无需额外转换步骤。
内容的提问来源于stack exchange,提问作者Being Real
相关产品推荐
相关产品推荐

