如何以递归方式将文件复制到展平的接收器文件夹,其文件名生成为由 ADF 管道中的分隔符分隔的源文件夹名称

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

我们需要使用 Azure 数据工厂将文件从具有特定文件夹层次结构(3 级和 4 级 - 两种层次结构类型)的一个 Azure 存储帐户复制到具有扁平文件夹结构的另一个存储帐户(具有不同的访问权限)带有来自源文件夹名称的文件名前缀。

例如,如果从存储帐户

A
、容器
B
,从
C
路径复制文件
B/x/y/z/C
,则目标文件名将为接收器容器内的
x__y__z__C

文件大小可能是大文件(>10 GB)或小文件。

如果有人有任何想法/做过类似的实施,我们将不胜感激。

我尝试过在 foreach 循环中获取元数据,但它不起作用,因为存在多个层次结构。 此外,由于文件名不应该是默认的 ADF 提供的展平层次结构功能无法使用

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

要在 Azure 数据工厂 (ADF) 中实现所描述的要求,您可以使用获取元数据、ForEach 和复制数据等活动的组合。以下是有关如何实施此操作的分步指南:

获取元数据活动:使用获取元数据活动从源文件夹层次结构中检索文件列表。将 recursive 选项设置为 true 以遍历文件夹结构的所有级别。 ForEach 活动:迭代从“获取元数据”活动获取的文件列表。在 ForEach 循环中,您将为每个文件执行以下步骤:派生列活动(可选):使用表达式从文件路径中提取源文件夹名称。如果您可以在下一步中直接操作文件路径,则此步骤是可选的。复制数据活动:使用复制数据活动将文件从源复制到接收器存储帐户。在“复制数据”活动的接收器数据集设置中,根据需要指定文件夹结构和命名约定。您可以使用表达式根据源文件夹名称构造目标文件路径。目标文件路径表达式示例:

concat(split(item().path, '/')[3], '', split(item().path, '/')[4], '', split(item().path , '/')[5], '__', split(item().name, '/'))

此表达式假设源文件夹结构具有三级(0-索引)并且文件名位于第四级。根据您的文件夹层次结构调整索引。 错误处理:在 ForEach 循环中实现错误处理机制,以处理文件复制过程中的任何失败。 性能优化(可选):由于您可能正在处理大文件,因此请考虑通过配置并行设置并调整“复制数据”活动中的批处理大小来优化管道的性能。 测试和监控:使用示例数据测试管道,以确保其行为符合预期。监视管道运行是否有任何错误或性能问题。 通过执行以下步骤,您可以创建一个 ADF 管道,将文件从嵌套文件夹结构复制到扁平结构,并根据源文件夹名称生成文件名。根据您的具体要求和文件夹层次结构调整表达式和配置。

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