根据上次成功运行日期在数据工厂中进行文件过滤

时间:2020-07-01 18:10:28

标签: azure azure-pipelines azure-data-factory azure-data-factory-pipeline

我的SFTP文件每周都会上传。这些文件的名称后面带有日期。我想每周仅将最新文件复制到adls。每当作业成功完成时,日期就会存储在sql表中,这样我就可以查找上次成功运行的日期。

在我看来,我需要这样的东西:筛选器文件,其名称包含的日期大于或等于上次成功运行的日期....或筛选器文件,其最后修改日期大于或等于上次成功运行的日期?

这样,如果作业在上次运行中失败,它将获取前几周和当前几周的文件。

当前,我的管道有一个查询,可以显示最后一次成功运行的信息,获取元数据,该数据显示sftp文件夹中的所有文件,筛选器以及每个(副本)文件。我知道复制有效,因为我为特定文件设置了过滤器,并且可以正常工作。我需要帮助的区域是过滤器。

2 个答案:

答案 0 :(得分:0)

我创建了一个示例进行测试,希望对您有所帮助。

total

我设置了管道变量LastRunDate,类型为string,值是“ 2020-07-01”,就像您的lookup activity输出一样。

这是我的GetMetaData Activity的输出:

{
    "childItems": [
        {
            "name": "polo_2020-06-30.csv",
            "type": "File"
        },
        {
            "name": "polo_2020-07-01.csv",
            "type": "File"
        },
        {
            "name": "polo_2020-07-02.csv",
            "type": "File"
        }
    ]
}

Filter Activity的设置:

“项目”:@activity('Get Metadata1').output.childItems

“条件”:@greater(split(split(item().name,'_')[1],'.')[0],variables('LastRunDate'))

这是Filter Activity的输出:

{
    "ItemsCount": 3,
    "FilteredItemsCount": 1,
    "Value": [
        {
            "name": "polo_2020-07-02.csv",
            "type": "File"
        }
    ]
}

答案 1 :(得分:0)

我最终通过使用滚动窗口触发器将上次成功运行日期和当前日期变量插入到get元数据活动中最后修改的参数中来解决了我的问题。我以this作为指导