使用 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

有一个 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 管道。 选择了来源。 选择源数据集 -> select 新 -> 选择类型 Azure blob storage -> 选择格式 binary -> 选择 linkeservice 作为 movecontainer

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

我对如何配置创建容器的参数或动态内容感到困惑。

使用Get Metadata activity获取子文件夹名称的列表并将其传递给ForEach activity复制要下沉的文件夹,如下所示。

Azure 数据湖中的源结构:

ADF管道:

  1. 使用Get Metadataactivity,获取文件夹“a”和容器“来源”.

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

• Select 数据集属性中字段列表下的子项

获取元数据的输出

  1. 将此输出传递给 ForEach activity。

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

  1. ForEachactivity内添加Copy dataactivity。

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

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

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

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

  1. 每个子文件夹中的子文件夹和文件都被复制到接收器。它创建一个水槽容器如果不存在则使用当前项目名称。