在文件名中使用通配符(*)时,无法从Azure数据工厂中的SFTP复制文件

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

在文件名中使用通配符(*)时,我无法将csv文件从SFTP连接复制到blob存储。

更具体地说,我每天在SFTP中接收csv文件,它们的格式为:“ddMMyyyyxxxxxx.csv”,其中“xxxxxx”是时间戳。更具体地说,我3月13日的csv文件是:“13032019083647.csv”,而3月14日是:“14032019083556.csv”。显然,时间戳每天都不同,因此我想独立于日期和文件扩展之间存在的任何字符串来复制文件。

在我的子集的“连接”选项卡的“文件路径”的“文件”子字段中,我提供输入:“13032019 * .csv”,按照字段旁边的帮助图标的指示:

File name or file filter

当我这样做时,我的调试运行失败:

{“errorCode”:“2200”,“message”:“ErrorCode = UserErrorInvalidCopyBehaviorBlobNameNotAllowedWithPreserveOrFlattenHierarchy,'Type = Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message =从文件夹复制到单个文件时无法采用复制行为PreserveHierarchy。,Source = Microsoft.DataTransfer.ClientLibrary}

无论我选择哪种类型的复制行为,我都会收到类似的错误。我也尝试过使用fileFilter参数(即使ADF警告使用fileName选项可以实现相同的行为),但我仍然得到同样的错误。

为了进一步说明,我附加了ADF为此配置生成的代码段:

Code segment with failing fileName

我还要提一下,当在相应的字段中使用完整的fileName,即值:“13032019083647.csv”时,复制工作正常。

任何帮助将不胜感激!

azure ftp sftp azure-data-factory
2个回答
1
投票

我猜它可能会得到两个带通配符操作的文件。在这种情况下,我们需要使用元数据活动,过滤活动和for-each活动来复制这些文件。

1.元数据活动:使用这些活动中的数据集指向文件的特定位置,并将子项目作为参数传递。

2.过滤活动:使用过滤器根据您的需要过滤文件。

3.For-each活动:在For-each活动中获取上一个活动的项目,并在for-each中添加复制活动。在复制活动中,源数据集应为@item()。name。

我希望这能解决你的问题。


0
投票

对我有用的是:我为输入文件保留了相同的正则表达式,但我定义为“复制行为:合并文件”。如上所述,只有1个文件满足正则表达式条件,只创建了1个文件作为输出。我知道这是一种“肮脏”的解决方案,但它为我做了伎俩。

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