如何使用 ADF 将多个文件夹连同文件从一个 Blob 容器复制到多个子文件夹中的另一个 Blob?

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

我正在使用 ADF 管道将多个文件夹中存在的多个数据集镶木地板文件从一个源 Blob 容器(客户端容器)复制到我们的 Blob 容器。

但是,我不想直接照原样复制。相反,我想要像下面这样的,

enter image description here

如上所示,我希望将以下文件夹及其中存在的文件复制到显示的目标文件夹。 我尝试了常规复制活动,但它不允许我添加多个通配符,也不允许我在“接收器”部分指定多个目标。

您能否告诉我如何使用 ADF 管道实现上述目标?

azure azure-data-factory azure-blob-storage data-ingestion
1个回答
0
投票

由于文件中有源文件夹路径和目标文件夹路径,因此您可以在 For-Each 活动中使用带有数据集参数的复制活动。

首先将上述文件存储在临时位置。

我的文件夹路径和你的一样。

SourceBlob_Container,DestinationBlob_Container
blobsource/demo/raad/indicated/inbound/IMSONE_CHANEL_M_AB_202402_20240415,blobdestination/Demo_Tables/Load_04_15_2024
blobsource/demo/raad/indicated/inbound/IMSONE_CONTROL_M_AB_202402_20240415,blobdestination/Demo_Tables/Load_04_15_2025
blobsource/demo/raad/indicated/inbound/IMSONE_COMPATIENT_M_665_202402_20240415,blobdestination/M_665/ Load_04_15_2024
blobsource/demo/raad/indicated/inbound/IMSONE_DIAG_M_665_202402_20240415,blobdestination/M_665/Load_04_15_2025
blobsource/demo/raad/indicated/inbound/IMSONE_COMPATIENT_M_667_202402_20240415,blobdestination/M_667/Load_04_15_2024
blobsource/demo/raad/indicated/inbound/IMSONE_DIAG_M_667_202402_20240415,blobdestination/M_667/Load_04_15_2025

为此文件创建一个分隔文本数据集,并将其提供给具有以下配置的查找活动。

enter image description here

Lookup 活动将以 JSON 数组形式提供源和接收器文件夹路径。进行 For-Each 活动并将此数组

@activity('Lookup1').output.value
赋予 For-Each 表达式。

enter image description here

在 For-Each 中,进行复制活动。对于复制活动的源,采用 Parquet 数据集并创建数据集参数

container_name

enter image description here

将其用作数据集容器名称中的

@dataset().container_name
,并将剩余路径保留为空。

enter image description here

对于复制活动的接收器数据集,创建另一个 parquet 数据集。在这里,创建两个数据集参数

container_name
folder_path

enter image description here

使用数据集中的数据与源数据集相同,并将文件名保留为空。

enter image description here

将这两个数据集作为复制活动的源和接收器。现在,在源中,选择通配符文件路径并给出以下表达式。

container_name : @first(split(item().SourceBlob_Container,'/'))
wild card folder name : @join(skip(split(item().SourceBlob_Container,'/'),1),'/')
wild card path : *.parquet

enter image description here

同样,给出接收器数据集参数的以下表达式。

container_name : @first(split(item().DestinationBlob_Container,'/'))
folder_path : @join(skip(split(item().DestinationBlob_Container,'/'),1),'/')

enter image description here

现在,调试管道,每个源文件夹路径中的所有镶木地板文件将在每次迭代中复制到其各自的目标文件夹中。

enter image description here

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