ADF 比较从 sql 查询到 getMetaData 输出的列表

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

我有一个包含以下字段的 SQL 表:FileNamePrefix、TableName 然后我在 Blob 存储中拥有以 FileNamePrefix 开头且名称中包含一些日期时间的文件:

SQL 表: 文件名前缀表名


文件1表1 文件2 表2 文件3 表3 等..

blob 存储中的文件: 文件1_20240101.xlsx 文件2_20240102.xlsx

我正在使用查找活动从 SQL 表中获取记录我正在尝试使用获取元数据活动来查看存储中的文件,然后仅对查找中具有相应文件的文件执行 ForEach储存中。

我尝试使用具有各种选项的筛选器活动,但似乎没有任何效果可以满足我的需要。

在上面的数据中,我只想发送 ForEach 活动 File1/Table1 和 File2/Table2,因为 File3 没有存储文件。

azure-data-factory oracle-adf
1个回答
0
投票

然后仅对查找中在存储中具有相应文件的文件执行 ForEach

要获取存储中具有相应文件的查找文件,您应该循环遍历“获取元数据”子项。在 For-Each 内部,您可以使用 Filter 活动获取所需的查找行。

首先将获取元数据子项数组赋予 For-Each 活动。

enter image description here

Filter 活动和 For-Each 都使用表达式

@item()
作为当前项目,因此将 For-Each 的当前项目文件名存储在 Filter 活动之前的变量中。

enter image description here

在 Filter 活动中,将 Lookup 输出数组

@activity('Lookup1').output.value
作为项目,并在条件中给出以下表达式。

@startswith(variables('curr_item_filename'), item().FileNamePrefix)

enter image description here

这会在每次迭代中过滤出存储中每个文件名所需的表名称。

enter image description here

如果想使用上面的表名,可以在每次迭代的 Filter Activity 之后使用表达式

@activity('Filter1').output.value[0].TableName

如果存储中没有当前文件名的查找表名称,则过滤器将给出空数组。因此,如果您有此类记录,最好检查 if 活动中的 Filter 活动输出数组长度,如果其大于 0,则继续在 if 活动的 True 活动中进行活动。

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