【问题标题】:Azure Data factory - insert a row in the azure sql database only if it doesn't existAzure 数据工厂 - 仅当 azure sql 数据库不存在时才在该数据库中插入一行
【发布时间】:2022-06-10 18:08:17
【问题描述】:

我有一个 excel 文件作为源,需要使用 Azure 数据工厂将其复制到 Azure SQL 数据库中。

仅当数据库中不存在行时,ADF 管道才需要将行从 excel 源复制到 SQL 数据库。如果它存在于 SQL 数据库中,则无需执行任何操作。

期待最佳优化解决方案。

【问题讨论】:

    标签: azure copy azure-sql-database etl azure-data-factory


    【解决方案1】:

    您可以使用 Azure 数据工厂data flow 来实现它,方法是连接源数据和接收器数据,并在接收器数据库中不存在该行时过滤要插入的新插入行。

    示例:

    1. 将 excel 源连接到数据流中的 source 转换。

    源码预览:

    1. 如果需要,您可以使用derived column 转换来转换源数据。这是可选的。

    2. 添加另一个source 转换并将其与接收器数据集(Azure SQL 数据库)连接。在 Source 选项中,如果要将接收器数据集的所有列与源数据集进行比较,则可以选择一个表,或者您可以选择查询并编写查询以仅选择匹配的列。

    Source2 输出:

    1. 使用Join 转换连接source1 和source2 转换,连接类型为左外连接,并根据要求添加连接条件。

    加入输出:

    1. 使用filter 转换,从连接输出中过滤掉现有行。

    过滤条件:isNull(source2@Id)==true()

    过滤器输出:

    1. 使用Select 转换,您可以从列表中删除重复的列(如source2 列)。您也可以在接收器映射中通过手动编辑和删除重复行来执行此操作。

    1. 添加sink 并连接到接收器数据集(Azure SQL 数据库)以获得所需的输出。

    【讨论】:

      【解决方案2】:

      您应该使用复制活动和存储过程作为接收器来创建它。在存储过程中编写代码(例如MERGEINSERT ... WHERE NOT EXISTS ...)来处理记录是否存在。

      This article 更详细地贯穿整个过程。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-02
        • 1970-01-01
        • 2019-05-18
        • 2015-12-18
        • 2021-06-15
        • 1970-01-01
        • 2021-01-15
        • 1970-01-01
        相关资源
        最近更新 更多