我有一个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”字符串?
答案 0 :(得分:1)
“null”将不起作用。我看到你有三个选择:
修复任何进程生成原始文件以简单地将该字段留空;这是.csvs的常态:
1,"29 February 2016",,,
2,,,,
如果您将null
属性设置为nullValue
,则使用值null
(不在引号中)也会有效,例如
"format": {
"type": "TextFormat",
"columnDelimiter": ",",
"nullValue": "null",
"quoteChar": "\""
}
此文件可以使用:
1,"29 February 2016"
2,null
此文件不起作用:
1,"29 February 2016"
2,"null"
其他选择:
VARCHAR
。首先将数据加载到那里并清除/删除“null”字符串,然后插入主表。