[英]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.