【问题标题】:How to force mapping in copy activity of Azure Data Factory如何在 Azure 数据工厂的复制活动中强制映射
【发布时间】:2022-01-26 08:29:11
【问题描述】:

我正在尝试使用 Azure 数据工厂将数据从 cosmosdb 容器复制到 Azure SQL 数据库表。 我在 cosmosdb 中的某些列不是强制性的,可能未定义。问题是对于这些列中的每一列,我在运行复制活动时都会收到以下错误:

Data type of column 'MyProperty' can't be inferred from 1st row of data, please specify its data type in mappings of copy activity or structure of DataSet.

但是,我在映射选项卡中进行了检查,这些属性的类型被正确推断为字符串,并且它们在我的 SQL 存储过程表类型中可以为空。

对于可选的十进制属性,我也有同样的问题,错误表明该值无法解析为 Int64,尽管映射选项卡中的推断类型设置为数字而不是整数...

这是我目前拥有的映射:

和表类型的存储过程

CREATE TYPE [dbo].[MyTableType] AS TABLE
(
    [Id] varchar(256) NOT NULL PRIMARY KEY,
    [SupplierId] varchar(256) NOT NULL,
    [SupplierClientId] varchar(256) NULL,
    [BuyerId] varchar(256) null
)

CREATE PROCEDURE [dbo].[UpsertItems]
    @itemsTable MyTableType readonly
AS
BEGIN
    MERGE MyTable AS target
    USING @itemsTable AS source
    ON (target.Id = source.Id)
    WHEN MATCHED THEN
        UPDATE SET 
            SupplierId = source.SupplierId,
            SupplierClientId = source.[SupplierClientId],
            BuyerId = source.[BuyerId]
    WHEN NOT MATCHED THEN
      INSERT (Id, SupplierId, SupplierClientId, BuyerId)
      VALUES (
        source.Id, 
        source.SupplierId, 
        source.[SupplierClientId], 
        source.[BuyerId]);
END

我找不到直接在数据集中或在复制活动的映射选项卡中强制此属性的数据类型的方法。我该如何解决这个问题?

【问题讨论】:

  • 你能解决这个问题吗?
  • 我最终做的是在 SQL 中创建一个缓冲表,并使用接收器数据集中的自动创建表选项从 cosmosdb 复制到该表。这种方式 adf 似乎可以使用可为空/未定义的属性。然后我使用存储过程的另一个复制活动将缓冲区表与目标表合并。最后我刷新缓冲表。在我看来,这是一个沉重的解决方案,但至少效果很好。

标签: azure-cosmosdb azure-data-factory azure-data-factory-2


【解决方案1】:

如果您在复制时创建新表,您可以指定数据类型。但是,如果您要添加或复制到已经存在的表,则会自动推断数据类型。

同时,在复制时自动创建表

如果这没有帮助,请分享示例源数据和一些片段

【讨论】:

  • 您可以使用Pre-copy script 更改表列数据类型refer Pre and Post SQL scripts
  • 感谢您的回复。是的,它在使用自动创建表时有效,但这不是我需要的,因为我正在调用存储过程来插入或更新数据(如果它已经存在)。另外我只使用复制数据活动而不是数据流,我认为我不需要它,因为映射似乎非常简单。
  • 你能解决这个问题吗?你试过Pre-copy scripts 吗?您可以按照here 的说明动态映射列,但如果问题是在复制到现有表时匹配数据类型,恐怕在不使用数据流的情况下在 adf 中没有直接的方法。
  • 您可以登录请求here 引起注意
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-02
  • 2022-01-04
  • 1970-01-01
  • 2020-09-15
  • 1970-01-01
  • 2022-06-23
相关资源
最近更新 更多