如何在azure数据工厂中使用数据流拉取最后修改的文件?

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

我每天都会将文件上传到 onprem 文件夹中,从那里我有一个管道将其拉到 blob 存储容器(输入),从那里我有另一个从 blob(输入)到 blob(输出)的管道,这里是数据流位于这两个 blob 之间。最后,我有链接到 sql 的输出。但是,我希望 blob 到 blob 管道仅提取当天上传的文件并通过数据流运行。按照我的设置方式,每次管道运行时,它都会使我的文件增加一倍。我在下面附上了图片

[![Blob 到 Blob 管道][1]][1]

如果还有其他内容可以让我更清楚,请告诉我 [1]:https://i.sstatic.net/24Uky.png

azure etl azure-data-factory
3个回答
1
投票

我希望 blob 到 blob 管道仅提取当天上传的文件并运行数据流。

要实现上述场景,您可以通过传递动态内容来使用

Filter by last Modified date
,如下所示:

  • @startOfDay(utcnow())
    :它将以当前时间戳为一天的开始。
  • @utcnow()
    :它将采用当前时间戳。

enter image description here

获取元数据活动的输入和输出:(仅当天的过滤文件)

enter image description here

如果特定日期的文件有多个,则您必须用于每个活动并将获取元数据活动的输出传递给 foreach 活动,如下所示

@activity('Get Metadata1').output.childItems

enter image description here

然后在 Foreach 中添加 Dataflow 活动并使用文件名参数创建源数据集

enter image description here

给出文件名参数,该参数在文件名中创建为动态值 enter image description here

然后将源参数文件名传递为

@item().name
enter image description here

它将为每个文件运行数据流获取元数据返回。


0
投票

我可以通过在数据流中选择“删除源文件”来解决这个问题。这样,第一个管道将新的每日报告拉入输入,当第二个管道(带有数据流)将文件从输入拉到输出时,它会删除输入中的文件,因此不允许它重复Dataflow


0
投票

我只能使用数据工厂活动来解决这个问题。不过,我解决了这个问题,使用目录中的上次修改日期获取最新的文件名。希望对你有帮助。

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 中所需的目标位置。

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