首页 > 解决方案 > 使用 ADF 将文件夹从具有 2 级子文件夹的 azure 容器移动到与子文件夹同名的容器级

问题描述

有一个 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)     

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

在此处输入图像描述

选择接收器 -> 选择新建 -> 选择类型为Azure blob storage -> 选择格式为binary

在此处输入图像描述

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

标签: azureazure-devopsazure-blob-storageazure-data-factoryazure-data-factory-2

解决方案


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

Azure 数据湖中的源结构:

在此处输入图像描述

一个DF 管道:

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

    • 为源路径创建数据集并将其添加到Get Metadata dataset

在此处输入图像描述

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

在此处输入图像描述

• 获取元数据的输出

在此处输入图像描述

  1. 将此输出传递给ForEach活动。

• 在项目属性下,添加获取元数据输出子项目。

在此处输入图像描述

  1. Copy data在活动中添加ForEach活动。

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

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述


推荐阅读