我有一个Azure数据工厂管道,它定义从CSV文件到SQL服务器数据库表的数据导入 . 一些表具有可空的日期时间字段,并且CSV文件将空值提供为“空”(即在引号内) . 但是,当我运行管道时,我遇到了几个错误,无法将'null'转换为datetime .
我已经检查了Azure文档,该文档声明您可以定义CSV文件中如何显示空值 . 目前,我有以下配置:
"type": "AzureBlob",
"linkedServiceName": "AzureStorageLinkedService",
"typeProperties": {
"folderPath": "processingtransactions/",
"format": {
"type": "TextFormat",
"columnDelimiter": ",",
"quoteChar": "\"",
"nullValue": "null",
"firstRowAsHeader": true
}
},
但是,我仍然收到错误:
"Message=Column 'DateOfBirth' contains an invalid value 'null'. Cannot convert 'null' to type 'DateTime'.,Source=Microsoft.DataTransfer.Common,''Type=System.FormatException,Message=The string was not recognized as a valid DateTime."
我也尝试将配置更改为:“NullValue”:“null”和“nullValue”:“NULL”
但我仍然得到同样的错误 . 我设法获取数据的唯一方法是用“”(空字符串)替换CSV文件中的所有“空”值,但这并不理想 .
有谁知道我需要什么语法来导入接受“null”字符串?
1 回答
不幸的是,引号中的“null”将不起作用 . 我看到你有三个选择:
否则,如果将
nullValue
属性设置为null
,则使用值null
(不在引号中)也会起作用,例如这个文件可以工作:
此文件不起作用:
其他选择:
将数据加载到临时表 . 使目标列成为临时表中的字符串/
VARCHAR
. 首先将数据加载到那里并清除/删除"null"字符串,然后再插入主表 .如果目标/接收器Azure SQL数据库或普通SQL Server(在VM上或其他情况下)使用带有表值参数的存储过程任务,则按here .