在文件名中使用通配符 (*) 时,无法从 Azure 数据工厂中的 SFTP 复制文件
Unable to copy file from SFTP in Azure Data Factory when using wildcard(*) in the filename
在文件名中使用通配符 (*) 时,我无法将 csv 文件从 SFTP 连接复制到 blob 存储。
更具体地说,我每天都会在 SFTP 中收到 csv 文件,它们的格式为:"ddMMyyyyxxxxxx.csv",其中 "xxxxxx" 是时间戳。更具体地说,我的 3 月 13 日的 csv 文件是:“13032019083647.csv”,而 3 月 14 日的 csv 文件是:“14032019083556.csv”。显然,时间戳每天都不同,因此我想独立于日期和文件扩展名之间存在的任何字符串来复制文件。
在我的子集 "Connection" 选项卡的 "File path" 的 "File" 子字段中,我按照帮助图标的指示给出了输入:“13032019*.csv”字段旁边:
当我这样做时,我的调试 运行 失败并显示:
{"errorCode": "2200", "message":
"ErrorCode=UserErrorInvalidCopyBehaviorBlobNameNotAllowedWithPreserveOrFlattenHierarchy,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=Cannot
adopt copy behavior PreserveHierarchy when copying from folder to a
single file.,Source=Microsoft.DataTransfer.ClientLibrary}
无论我选择哪种类型的复制行为,我都会收到类似的错误。我也尝试过使用 fileFilter 参数进行试验(尽管 ADF 警告说使用 fileName 选项可以实现相同的行为),但我最终还是遇到了同样的错误。
为了进一步说明,我附上了 ADF 为此配置生成的代码段:
我还要提一下,当在相应字段中使用完整的文件名,即值:“13032019083647.csv”时,复制工作正常。
如有任何帮助,我们将不胜感激!
我猜它可能会得到两个通配符操作的文件。
在这种情况下,我们需要使用元数据 activity、过滤器 activity 和 for-each activity 来复制这些文件。
1.Metadata activity : 使用这些 activity 中的数据集指向文件的特定位置并将子项目作为参数传递。
2.Filter activity : 使用过滤器根据您的需要过滤文件。
3.For-each activity :在 For-each activity 中从前一个 activity 中获取项目并在 for- 中添加副本 activity每个。
在副本 activity 中,源数据集应该是 @item().name。
希望这能解决您的问题。
对我有用的是:我为输入文件保留了相同的正则表达式,但我定义为 "Copy behaviour: Merge Files"。由于如前所述,只有 1 个文件满足正则表达式条件,因此只创建了 1 个文件作为输出。我知道这是一种 "dirty" 解决方案,但它对我有用。
在文件名中使用通配符 (*) 时,我无法将 csv 文件从 SFTP 连接复制到 blob 存储。
更具体地说,我每天都会在 SFTP 中收到 csv 文件,它们的格式为:"ddMMyyyyxxxxxx.csv",其中 "xxxxxx" 是时间戳。更具体地说,我的 3 月 13 日的 csv 文件是:“13032019083647.csv”,而 3 月 14 日的 csv 文件是:“14032019083556.csv”。显然,时间戳每天都不同,因此我想独立于日期和文件扩展名之间存在的任何字符串来复制文件。
在我的子集 "Connection" 选项卡的 "File path" 的 "File" 子字段中,我按照帮助图标的指示给出了输入:“13032019*.csv”字段旁边:
当我这样做时,我的调试 运行 失败并显示:
{"errorCode": "2200", "message": "ErrorCode=UserErrorInvalidCopyBehaviorBlobNameNotAllowedWithPreserveOrFlattenHierarchy,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=Cannot adopt copy behavior PreserveHierarchy when copying from folder to a single file.,Source=Microsoft.DataTransfer.ClientLibrary}
无论我选择哪种类型的复制行为,我都会收到类似的错误。我也尝试过使用 fileFilter 参数进行试验(尽管 ADF 警告说使用 fileName 选项可以实现相同的行为),但我最终还是遇到了同样的错误。
为了进一步说明,我附上了 ADF 为此配置生成的代码段:
我还要提一下,当在相应字段中使用完整的文件名,即值:“13032019083647.csv”时,复制工作正常。
如有任何帮助,我们将不胜感激!
我猜它可能会得到两个通配符操作的文件。 在这种情况下,我们需要使用元数据 activity、过滤器 activity 和 for-each activity 来复制这些文件。
1.Metadata activity : 使用这些 activity 中的数据集指向文件的特定位置并将子项目作为参数传递。
2.Filter activity : 使用过滤器根据您的需要过滤文件。
3.For-each activity :在 For-each activity 中从前一个 activity 中获取项目并在 for- 中添加副本 activity每个。 在副本 activity 中,源数据集应该是 @item().name。
希望这能解决您的问题。
对我有用的是:我为输入文件保留了相同的正则表达式,但我定义为 "Copy behaviour: Merge Files"。由于如前所述,只有 1 个文件满足正则表达式条件,因此只创建了 1 个文件作为输出。我知道这是一种 "dirty" 解决方案,但它对我有用。