在文件名中使用通配符(*)时,无法从Azure Data Factory中的SFTP复制文件

时间:2019-03-14 10:07:08

标签: azure ftp sftp azure-data-factory

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

更具体地说,我每天都会通过SFTP接收csv文件,它们的格式为:“ ddMMyyyyxxxxxx.csv”,其中“ xxxxxx”为时间戳。更具体地说,我3月13日的csv文件是:“ 13032019083647.csv”,而3月14日我的csv文件是:“ 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

我还应该提到,当在相应字段中使用完整的文件名(即值:“ 13032019083647.csv”)时,复制正常进行。

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

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

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

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

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

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

答案 1 :(得分:0)

对我有用的是:我为输入文件保留了相同的正则表达式,但将其定义为“复制行为:合并文件”。由于如上所述,只有1个文件满足正则表达式条件,因此仅创建了1个文件作为输出。我知道这是一种“肮脏”的解决方案,但这确实帮了我大忙。

相关问题