【问题标题】:Unable to copy file from SFTP in Azure Data Factory when using wildcard(*) in the filename在文件名中使用通配符 (*) 时,无法从 Azure 数据工厂中的 SFTP 复制文件
【发布时间】:2019-03-14 10:07:07
【问题描述】:

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

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

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

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

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

无论我选择哪种类型的复制行为,我都会收到类似的错误。我也尝试过使用 fileFilter 参数(尽管 ADF 警告说使用 fileName 选项可以实现相同的行为),但我最终还是会遇到相同的错误。

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

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

任何帮助将不胜感激!

【问题讨论】:

    标签: azure ftp sftp azure-data-factory


    【解决方案1】:

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

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

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

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

    希望这能解决您的问题。

    【讨论】:

    • 有趣的是,当使用通配符过滤时,Azure 数据工厂会自动假定它读取的是文件夹(而不是文件),即使只有 1 个文件满足条件......因此,这就是它因给定错误而失败的原因。 @Yunvraj 我会试试你的方法,让你知道它是否正常工作。
    • @loannis。这行得通。如果您尝试过任何其他逻辑来实现这一点,请告诉我们。
    • 发表了我的回答
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2020-08-31
      • 2020-06-24
      • 2022-12-09
      • 1970-01-01
      • 2021-05-06
      • 2019-04-17
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      相关资源
      最近更新 更多