gpt4 book ai didi

Azure 数据工厂复制事件无法将字符串(从 csv)映射到 Azure SQL 表接收器 uniqueidentifier 字段

转载 作者:行者123 更新时间:2023-12-02 08:02:59 26 4
gpt4 key购买 nike

我有一个包含复制事件的 Azure 数据工厂 (DF) 管道。复制事件使用 HTTP 连接器作为源来调用 REST 终结点,并返回与 Azure SQL 数据库表一起接收的 csv 流。

当 CSV 包含映射到目标表中的 uniqueIdentifier 字段的字符串(例如 40f52caf-e616-4321-8ea3-12ea3cbc54e9)时,复制失败,并显示错误消息The给定值数据源中的 String 类型无法转换为指定目标列的 uniqueidentifier 类型

我尝试使用 {} 封装源字符串,例如 {40f52caf-e616-4321-8ea3-12ea3cbc54e9} 但没有成功。

如果我将目标表字段从 uniqueIdentifier 修改为 nvarchar(100),复制事件将起作用。

最佳答案

我在我这边重现了您的问题。

enter image description here

原因是source和sink的数据类型不匹配,可以查看 Data type mapping for SQL server .

enter image description here

您的源数据类型是映射到 nvarchar 或 varchar 的 string,sql 数据库中的 uniqueidentifier 需要 azure 数据工厂中的 GUID 类型.

因此,请在您的 sql server 接收器中配置 sql server 存储过程作为解决方法。

请按照此 doc 中的步骤操作:

第 1 步:配置 Sink 数据集:

enter image description here

第 2 步:在复制事件中配置 Sink 部分,如下所示:

enter image description here

第 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

输出:

enter image description here

希望对您有帮助。如有任何疑问,请随时告诉我。

关于Azure 数据工厂复制事件无法将字符串(从 csv)映射到 Azure SQL 表接收器 uniqueidentifier 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51412683/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com