簡體   English   中英

Azure 數據工廠復制活動失敗將字符串(從 csv)映射到 Azure SQL 表接收器 uniqueidentifier 字段

[英]Azure Data factory copy activity failed mapping strings (from csv) to Azure SQL table sink uniqueidentifier field

我有一個包含復制活動的 Azure 數據工廠 (DF) 管道。 復制活動使用 HTTP 連接器作為源來調用 REST 端點並返回與 Azure SQL 數據庫表一起接收的 csv 流。

當 CSV 包含映射到目標表中的 uniqueIdentifier 字段的字符串(例如40f52caf-e616-4321-8ea3-12ea3cbc54e9 )時,復制失敗並顯示錯誤消息The given value of type String from the data source cannot be converted to type uniqueidentifier of the specified target column

我試圖用{}包裝源字符串,例如{40f52caf-e616-4321-8ea3-12ea3cbc54e9}沒有成功。

如果我將目標表字段從uniqueIdentifier修改為nvarchar(100) ,則 Copy 活動將起作用。

我在我這邊重現您的問題。

在此處輸入圖像描述

原因是 source 和 sink 的數據類型不匹配。你可以檢查SQL server 的數據類型映射

在此處輸入圖像描述

您的源數據類型是映射到 nvarchar 或 varchar 的string ,sql 數據庫中的uniqueidentifier需要 azure 數據工廠中的GUID類型。

因此,請在您的 sql server sink 中配置 sql server stored procedure作為解決方法。

請按照此文檔中的步驟操作:

第 1 步:配置您的接收器數據集:

在此處輸入圖像描述

第 2 步:在復制活動中配置 Sink 部分,如下所示:

在此處輸入圖像描述

第 3 步:在您的數據庫中,定義與 sqlWriterTableType 同名的表類型。 請注意,表類型的架構應與輸入數據返回的架構相同。

    CREATE TYPE [dbo].[CsvType] AS TABLE(
    [ID] [varchar](256) NOT NULL
)

第 4 步:在您的數據庫中,定義與 SqlWriterStoredProcedureName 同名的存儲過程。 它處理來自您指定源的輸入數據,並合並到輸出表中。 請注意,存儲過程的參數名稱應與數據集中定義的“tableName”相同。

Create PROCEDURE convertCsv @ctest [dbo].[CsvType] READONLY
AS
BEGIN
  MERGE [dbo].[adf] AS target
  USING @ctest AS source
  ON (1=1)
  WHEN NOT MATCHED THEN
      INSERT (id)
      VALUES (convert(uniqueidentifier,source.ID));
END

輸出:

在此處輸入圖像描述

希望它可以幫助你。任何問題,請隨時讓我知道。

有一種方法可以通過 JSON 配置正確地將 guid 轉換為uniqueidentifier SQL 列類型。 編輯右上角工具欄中的通過代碼復制活動 {} 按鈕。

放:

    "translator": {
        "type": "TabularTranslator",
        "typeConversion": true
    }

進入Copy活動的typeProperties塊。 如果映射模式未指定/動態,這也將起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM