【发布时间】:2022-06-10 18:08:17
【问题描述】:
我有一个 excel 文件作为源,需要使用 Azure 数据工厂将其复制到 Azure SQL 数据库中。
仅当数据库中不存在行时,ADF 管道才需要将行从 excel 源复制到 SQL 数据库。如果它存在于 SQL 数据库中,则无需执行任何操作。
期待最佳优化解决方案。
【问题讨论】:
标签: azure copy azure-sql-database etl azure-data-factory
我有一个 excel 文件作为源,需要使用 Azure 数据工厂将其复制到 Azure SQL 数据库中。
仅当数据库中不存在行时,ADF 管道才需要将行从 excel 源复制到 SQL 数据库。如果它存在于 SQL 数据库中,则无需执行任何操作。
期待最佳优化解决方案。
【问题讨论】:
标签: azure copy azure-sql-database etl azure-data-factory
您可以使用 Azure 数据工厂data flow 来实现它,方法是连接源数据和接收器数据,并在接收器数据库中不存在该行时过滤要插入的新插入行。
示例:
source 转换。源码预览:
如果需要,您可以使用derived column 转换来转换源数据。这是可选的。
添加另一个source 转换并将其与接收器数据集(Azure SQL 数据库)连接。在 Source 选项中,如果要将接收器数据集的所有列与源数据集进行比较,则可以选择一个表,或者您可以选择查询并编写查询以仅选择匹配的列。
Source2 输出:
Join 转换连接source1 和source2 转换,连接类型为左外连接,并根据要求添加连接条件。加入输出:
filter 转换,从连接输出中过滤掉现有行。过滤条件:isNull(source2@Id)==true()
过滤器输出:
Select 转换,您可以从列表中删除重复的列(如source2 列)。您也可以在接收器映射中通过手动编辑和删除重复行来执行此操作。sink 并连接到接收器数据集(Azure SQL 数据库)以获得所需的输出。【讨论】:
您应该使用复制活动和存储过程作为接收器来创建它。在存储过程中编写代码(例如MERGE 或INSERT ... WHERE NOT EXISTS ...)来处理记录是否存在。
This article 更详细地贯穿整个过程。
【讨论】: