2017-02-24 83 views
1

我有一個Azure數據工廠管道,它定義從CSV文件導入到SQL Server數據庫表的數據。某些表格具有可爲空的日期時間字段,並且CSV文件將空值提供爲「空白」(即在引號內)。但是,當我運行管道時,出現了幾個錯誤,無法將'null'轉換爲datetime。Azure Data Factory - 無法從「null」轉換爲日期時間字段

我已經檢查了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屬性」:「空」和 「nullValue」:「NULL」

但我仍然收到同樣的錯誤。我設法導入數據的唯一方法是用「」(空字符串)替換CSV文件中的所有「空」值,但這並不理想。

有誰知道什麼語法我需要讓導入接受「空」字符串?

回答

0

引號中的「null」將不起作用。您有三種選擇,因爲我看到它:

  1. 修復了什麼都處理生成的RAW文件簡單地將該字段爲空;這是正常的.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。首先將數據加載到那裏並在插入主表之前將其清除/刪除「空」字符串。
  • 如果您的目標/宿Azure SQL數據庫或普通SQL Server(在VM或其他平臺上)按照here使用具有表值參數的存儲過程任務。
  • 相關問題