Azure数据工厂 - 无法从“null”转换为datetime字段

时间:2017-02-24 15:21:33

标签: azure-data-factory

我有一个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 个答案:

答案 0 :(得分:1)

不幸的是,引号中的

“null”将不起作用。我看到你有三个选择:

  1. 修复任何进程生成原始文件以简单地将该字段留空;这是.csvs的常态:

    1,"29 February 2016",,,
    2,,,,
    

    如果您将null属性设置为nullValue,则使用值null(不在引号中)也会有效,例如

    "format": {
        "type": "TextFormat",
        "columnDelimiter": ",",
        "nullValue": "null",
        "quoteChar": "\""
    }
    
  2. 此文件可以使用:

    1,"29 February 2016"
    2,null
    

    此文件不起作用:

    1,"29 February 2016"
    2,"null"
    

    其他选择:

    1. 将数据加载到临时表。使目标列成为临时表中的字符串/ VARCHAR。首先将数据加载到那里并清除/删除“null”字符串,然后插入主表。
    2. 如果您的目标/接收器Azure SQL数据库或普通SQL Server(在VM或其他方面)使用带有表值参数的存储过程任务here