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

标签 azure azure-data-factory

我有一个包含复制事件的 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/

相关文章:

c# - Azure 工具 - 未将对象引用设置为对象的实例

azure - 如何在 Azure Synapse 或数据工厂管道中设置和获取变量值

azure 数据工厂更新

sql - Synapse 专用池查询运行缓慢

azure - Unity Catalog - 使用服务主体访问外部位置

azure - <allowedServerVariables> 标记应位于 Azure 网站 applicationHost.config 中的什么位置?

azure - 如何在 Azure 中为 MSAL2 (TenantId) 配置 rust oauth2

azure - 我可以在 Azure 虚拟机中安装集成运行时并将本地服务器添加为链接服务吗?

azure - 在导入 Dynamics 365 用户表之前使用 Azure 数据工厂过滤掉重复记录

azure - 检查 Azure 数据工厂 (ADF)、时序见解 (TSI) 和流分析作业资源的名称可用性