首页 文章

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

提问于
浏览
2

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

  • 1

    不幸的是,引号中的“null”将不起作用 . 我看到你有三个选择:

    • 修复了生成原始文件的过程,只需将该字段留空即可;这是.csvs的正常情况:
    1,"29 February 2016",,,
    2,,,,
    

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

    "format": {
        "type": "TextFormat",
        "columnDelimiter": ",",
        "nullValue": "null",
        "quoteChar": "\""
    }
    

    这个文件可以工作:

    1,"29 February 2016"
    2,null
    

    此文件不起作用:

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

    其他选择:

    • 将数据加载到临时表 . 使目标列成为临时表中的字符串/ VARCHAR . 首先将数据加载到那里并清除/删除"null"字符串,然后再插入主表 .

    • 如果目标/接收器Azure SQL数据库或普通SQL Server(在VM上或其他情况下)使用带有表值参数的存储过程任务,则按here .

相关问题