我每天都会将文件上传到 onprem 文件夹中,从那里我有一个管道将其拉到 blob 存储容器(输入),从那里我有另一个从 blob(输入)到 blob(输出)的管道,这里是数据流位于这两个 blob 之间。最后,我有链接到 sql 的输出。但是,我希望 blob 到 blob 管道仅提取当天上传的文件并通过数据流运行。按照我的设置方式,每次管道运行时,它都会使我的文件增加一倍。我在下面附上了图片
[![Blob 到 Blob 管道][1]][1]
如果还有其他内容可以让我更清楚,请告诉我 [1]:https://i.sstatic.net/24Uky.png
我希望 blob 到 blob 管道仅提取当天上传的文件并运行数据流。
要实现上述场景,您可以通过传递动态内容来使用
Filter by last Modified date
,如下所示:
@startOfDay(utcnow())
:它将以当前时间戳为一天的开始。@utcnow()
:它将采用当前时间戳。获取元数据活动的输入和输出:(仅当天的过滤文件)
如果特定日期的文件有多个,则您必须用于每个活动并将获取元数据活动的输出传递给 foreach 活动,如下所示
@activity('Get Metadata1').output.childItems
然后在 Foreach 中添加 Dataflow 活动并使用文件名参数创建源数据集
给出文件名参数,该参数在文件名中创建为动态值
然后将源参数文件名传递为
@item().name
它将为每个文件运行数据流获取元数据返回。
我只能使用数据工厂活动来解决这个问题。不过,我解决了这个问题,使用目录中的上次修改日期获取最新的文件名。希望对你有帮助。
1)设置变量: 创建两个变量:LastModifiedDate 和 LastModifiedFileName。 将 LastModifiedDate 的默认值设置为非常旧的日期(例如 1900-01-01T00:00:00Z),以确保任何文件都被视为较新的。
2)获取元数据活动: 使用“获取元数据”活动检索源 ADLS 位置中的文件列表。 配置“获取元数据”活动以使用 childItems 选项来获取文件列表。
3)对于每个活动: 使用 ForEach 活动迭代从“获取元数据”活动获取的文件列表。 在 ForEach 活动内,添加嵌套的 Get Metadata 活动以检索每个文件的最后修改日期。
4)If 条件活动: 在 ForEach 活动中,使用 If Condition 活动将当前文件的 LastModified 日期与 LastModifiedDate 变量的值进行比较。 如果当前文件的lastModified日期大于LastModifiedDate变量的值: 使用“设置变量”活动将 LastModifiedDate 变量更新为当前文件的上次修改日期。 使用另一个“设置变量”活动用当前文件的名称更新 LastModifiedFileName 变量。
5)复制活动: 在 ForEach 活动之后,使用复制数据活动将 LastModifiedFileName 变量中指定的文件复制到 ADLS 中所需的目标位置。