我有一个包含以下字段的 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 没有存储文件。
然后仅对查找中在存储中具有相应文件的文件执行 ForEach
要获取存储中具有相应文件的查找文件,您应该循环遍历“获取元数据”子项。在 For-Each 内部,您可以使用 Filter 活动获取所需的查找行。
首先将获取元数据子项数组赋予 For-Each 活动。
Filter 活动和 For-Each 都使用表达式
@item()
作为当前项目,因此将 For-Each 的当前项目文件名存储在 Filter 活动之前的变量中。
在 Filter 活动中,将 Lookup 输出数组
@activity('Lookup1').output.value
作为项目,并在条件中给出以下表达式。
@startswith(variables('curr_item_filename'), item().FileNamePrefix)
这会在每次迭代中过滤出存储中每个文件名所需的表名称。
如果想使用上面的表名,可以在每次迭代的 Filter Activity 之后使用表达式
@activity('Filter1').output.value[0].TableName
。
如果存储中没有当前文件名的查找表名称,则过滤器将给出空数组。因此,如果您有此类记录,最好检查 if 活动中的 Filter 活动输出数组长度,如果其大于 0,则继续在 if 活动的 True 活动中进行活动。