Azure 数据工厂:当源(Blob - csv)和目标(SQL DB)是海量数据集(不同数据类型〜370列,〜7M行)时如何使用Exists

问题描述 投票:0回答:1

我在 Azure 数据工厂中有一个场景,需要将 Blob 存储中的日常 CSV 文件与 SQL 数据库中的表进行比较。目标是仅当表中尚不存在行时才将 CSV 中的行复制到 SQL 表中。

问题详情:

  • 数据量:CSV文件和SQL表都很大,大约有370列和700万行。
  • 数据类型:数据集包括字符串、双精度和时间戳等各种数据类型。

尝试过的方法:

遇到的问题:

  • 数据类型不匹配:在数据流中创建源时,CSV 中的数据类型通常与 SQL 表中的数据类型不匹配。
  • 不正确匹配:由于数据类型不匹配,数据流中的派生列无法正确匹配,导致 CSV 中的所有行被视为不匹配。

问题:

  • 数据类型处理:如何确保数据流中的数据类型与SQL表中的数据类型匹配,防止不匹配?
  • 针对大型数据集的优化:ADF 是否有最佳实践或优化来在比较过程中更有效地处理如此大的数据集?

任何建议或替代方法将不胜感激。

这是我的数据流的快照:

dataflow snapshot

azure azure-sql-database azure-data-factory
1个回答
0
投票

当您从源数据集和接收器数据集中导入模式时,它会比较导入的数据类型。

我尝试过不从源数据集和接收器数据集中导入任何模式,并且它适用于给定的场景。

从源数据集和接收器数据集中清除架构

enter image description here

这是示例源数据,其中一些行已存在于目标表中。

ID,Name,mytime,Amount,Fahrenheit,age,role,mydate
8,Laddu,2024-04-26 11:45:00,12.24,95.04,24,Pirate,02-16-00
9,MS,2024-04-27 12:00:00,24.267,10.10,26,No job,05-30-24
10,ABD,2024-04-26 11:45:00,12.24,95.04,24,Pirate,02-16-00
11,Starc,2024-04-26 11:45:00,12.24,95.04,24,Pirate,02-16-00
12,KP,2024-04-26 11:45:00,12.24,95.04,24,Pirate,2024-05-30
13,Rabada,2024-04-26 11:45:00,12.24,95.04,24,Bowler,2023-06-29
7,Rakesh,2024-04-25 10:30:00,123.451,97.16,23,Engineer,2021-12-16

在数据流的两个源中,将投影设置为空。

enter image description here

数据流调试不会识别这些列。因此,在派生列中使用列时,请使用

byName(<column_name>)

在这里,对于 exists 转换列,我在两个源中创建了额外的列

Id_temp
,如下所示。

enter image description here

然后,在存在转换中使用这些新列。

enter image description here

接下来,使用基于选择转换规则的映射来删除多余的列。

enter image description here

向其中添加接收器并执行管道中的数据流。

它将给出如下所示的预期结果。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.