【问题标题】:get the latest added file in a folder [Azure Data Factory]获取文件夹中最新添加的文件 [Azure 数据工厂]
【发布时间】:2020-03-06 06:34:39
【问题描述】:

在Data Lake里面,我们有一个文件夹,里面基本上就是每天外源推送的文件。但是,我们只想处理该文件夹中最新添加的文件。 有没有办法通过 Azure 数据工厂实现这一目标?

【问题讨论】:

    标签: azure azure-data-factory azure-data-lake last-modified


    【解决方案1】:

    当您在复制活动中使用 ADLS 连接器时,您可以设置 modifiedDatetimeStart and modifiedDatetimeEnd 来过滤文件夹中的文件。

    可能有两种情况:

    1.数据是由外部源推送的在调度中,你应该知道要配置的调度时间。

    2.频率是随机的,那么可能你需要在另一个地方记录推送数据的时间,然后将时间作为参数传递到复制活动管道中,然后再执行。


    我尝试在 ADF 管道中为您提供如下流程:

    我在同一文件夹中的示例文件:

    Step1,创建两个变量,maxtime和filename:

    maxtime是特定日期的关键日期时间,文件名是空字符串。

    Step2,使用GetMetadata Activity和ForEach Activity获取文件夹下的文件。

    GetMetadata 1 配置:

    ForEach Activity 配置:

    Step3:在ForEach Activity内部,使用GetMetadata和If-Condition,结构如下:

    GetMetadata 2 配置:

    If-Condition Activity 配置:

    Step4:在 If-Condition True 分支中,使用 Set Variable Activity:

    设置变量1配置:

    设置 variable2 配置:

    以上所有步骤都是为了找到最新的文件名,变量文件名正是目标。


    在 GetMetadata 2 中添加另一个新数据集

    【讨论】:

    • 实际上是随机的。您能否详细说明“在另一个住宅中推送数据时间”?我目前正在查看获取元数据活动,但它似乎无法读取文件夹中最新修改的文​​件
    • @OreoFanatics NoNo...我不是说使用GetMetadata Activity。我的意思是,如果您操纵将数据推送到 ADLS 的过程,那么即使推送时间是随机的,您也肯定知道推送时间,然后您可以自己持久化时间,以便将其用作 ADF 中的参数。
    • @OreoFanatics 如果你真的不能操纵这个过程,数据总是来的。那么我认为你至少可以控制 ADF 管道的触发时间。把那个时间记录在某个地方!以便您下次可以将其用作参数!希望我清楚这一点!
    • 是的,数据一直都在。而且无论当天收到多少数据,只要触发管道,我们只想选择最新的。
    • @OreoFanatics 是的,我的过程以最新文件名的结果结束,我将测试下一步,作为你的复制步骤。
    【解决方案2】:

    您可以使用 Modified datetime start 和 Modified datetime end 字段,如下面的屏幕截图所示。

    此处的示例显示从当前日期时间开始的 24 小时内获取文件。

    【讨论】:

    • 问题是:我们只想要添加到文件夹中的最后一个文件,而不是特定时间范围内的所有文件。如果在 1 小时内添加了 100 或 1000 个文件,那没关系,因为我们总是只想选择最新的
    猜你喜欢
    • 1970-01-01
    • 2021-11-25
    • 2021-06-24
    • 2021-01-16
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    • 2017-10-22
    • 1970-01-01
    相关资源
    最近更新 更多