使用 ADF 将文件夹从具有 2 级子文件夹的 azure 容器移动到与子文件夹同名的容器级

Posted

技术标签:

【中文标题】使用 ADF 将文件夹从具有 2 级子文件夹的 azure 容器移动到与子文件夹同名的容器级【英文标题】:Move folders from azure containers which is having 2 levels of sub-folders to container level with the same name as the sub folder using ADF 【发布时间】:2021-12-24 12:22:45 【问题描述】:

有一个 blob 存储帐户,该 blob 存储帐户的名称是 azureblob11 它有一个名称为 source 的容器。

容器 source 包含 2 级子文件夹。

文件夹结构类似:

source (container)
  |--a (folder)
     |--ana (sub-folder)
     |--hem (sub-folder)
     |--thg (sub-folder)
     |--oud (sub-folder)
     

我想要实现的目标是将所有子文件夹 (ana, hem, thg, oud) 连同它们的数据一起复制到容器级别,并将这 4 个子文件夹连同其中的数据一起创建为新容器。

预期目标如下所示:

source (container)
  |--a (folder)
     |--ana (sub-folder)
     |--hem (sub-folder)
     |--thg (sub-folder)
     |--oud (sub-folder)
ana (container)
hem (container)
thg (container)
oud (container)     

为了实现这个目标,我在 ADF 中使用了copy data 管道。 选择了来源。 选择源数据集 -> 选择新建 -> 选择类型为Azure blob storage -> 选择格式为binary -> 选择链接服务为movecontainer

选择了水槽 -> 选择新建 -> 选择类型为Azure blob storage -> 选择格式为binary

我被困在如何配置参数或创建容器的动态内容上。

【问题讨论】:

【参考方案1】:

使用Get Metadata 活动获取子文件夹 名称列表并将其传递给ForEach 活动以将文件夹复制到接收器,如下所示。

Azure 数据湖中的源结构:

ADF 管道:

    使用Get Metadata活动,获取文件夹“a”和容器“source”下的子文件夹名称列表。

    为源路径创建数据集并将其添加到获取元数据数据集

• 在数据集属性的字段列表下选择子项

• 获取元数据的输出

    将此输出传递给ForEach 活动。

• 在 items 属性下,添加 Get Metadata 输出子项。

    ForEach活动中添加Copy data活动。

• 创建源数据集参数化源数据集中的子文件夹(目录)路径,如下所示。

• 在copy data 活动中,将当前 ForEach 项目名称传递给源属性中的数据集参数值。

• 创建接收器数据集并在接收器数据集中参数化接收器容器路径。

• 在Copy activity sink 数据集中,将当前的 ForEach 项目名称传递给 sink 参数。

    每个子文件夹中的子文件夹和文件被复制到接收器。如果不存在,它创建具有当前项目名称的 接收器容器

【讨论】:

以上是关于使用 ADF 将文件夹从具有 2 级子文件夹的 azure 容器移动到与子文件夹同名的容器级的主要内容,如果未能解决你的问题,请参考以下文章

具有附加列的 ADF 复制活动不起作用

如何在 adf 中按顺序进行复制活动?

ADF IF 条件 - 计算源列

如何使用 Azure 数据工厂中的每个活动合并文件

在 Azure 存储中创建文件列表并使用 ADF 将其发送到 sql 表

使用 Python 脚本的 ADF 管道中的 Azure 函数