根据文件名中的时间戳复制最近的txt文件

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

我对 ADF 完全陌生。我正在使用现有的 ADF 设置,由于修改了源文件夹结构,需要对其进行修改以满足新的要求。

以前,源文件夹包含 TableName.TXT 类型的 txt 文件,管道由查找活动和后跟的 foreach 活动组成,该活动复制查找返回的所有文件。

当前的问题是源文件夹已更改,现在同一个表可以有多个文件,即“TableName_YYYYMMDD_HHMMSS.TXT”类型的文件。我想修改管道,以便仅复制最新的管道(使用文件名中的 YYYYMMDD_HHMMSS 时间戳)。我一直在尝试“获取元数据”活动,该活动成功返回感兴趣的 TableName 的不同文件名,但我在下一步中遇到了困难。如何从输出中选择最新的一个?

"childItems": [
    {
        "name": "Table1_20250115_115024.TXT",
        "type": "File"
    },
    {
        "name": "Table1_20250116_085717.TXT",
        "type": "File"
    }
]

请注意,我已经在 ForEach 中,据我了解,嵌套的 foreach 是不允许的。

我正在考虑解决方案,例如...

  • 按字母顺序获取元数据输出(这将自动选择给定结构的最新时间戳),然后选择第一个/最后一个作为复制活动的输入?
  • 使用“设置变量”活动来确定子字符串的最大值?然后呢?

任何指导将不胜感激!

azure copy azure-data-factory
1个回答
0
投票

您可以在循环内尝试第一种方法。由于您已经获得具有相同表名的文件名列表,因此您将获得按字母顺序排列的文件名列表。由于日期格式也在

YYYYMMDD_HHMMSS
中,因此它将在数组的最后一项中给出最新日期。

"childItems": [
        {
            "name": "Table1_20250115_115024.txt",
            "type": "File"
        },
        {
            "name": "Table1_20250116_085717.txt",
            "type": "File"
        },
        {
            "name": "Table1_20250216_085717.txt",
            "type": "File"
        }
    ]

获取该数组后,使用以下表达式获取数组的最后一项(最新文件名)。在这里,作为示例,我给出了“获取元数据”活动输出,在您的情况下,它应该是您在循环内获得的上述数组。

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

enter image description here

最新文件名:

enter image description here

现在,您可以根据您的要求使用此变量。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.