将 CSV 从 adls 复制到 adls 在 adf 管道中不起作用

Copying CSV from adls to adls not working in adf pipeline

提问人:Bindu 提问时间:11/15/2023 最后编辑:AswinBindu 更新时间:11/16/2023 访问量:121

问:

sink of my copy activity

source of my copy activity

我想通过 adf 管道复制活动将名为 source 的 adlsfolder 中存在的 CSV 文件复制到另一个名为 destination 的 adls 文件夹。

第一个活动 = GetMetadata,用于从源文件夹中获取所有文件。

第二个活动 = foreach 遍历文件

在第二个活动中 = 从源复制到目标的复制活动

我的源数据集正确指向源文件夹,并且与输出数据集相同。

我在目标中使用与源 adls 中相同的文件名。

即使运行管道后没有错误,但源文件中存在的数据在目标文件中不存在。

文件名在目标和源中正确出现,这是我想要的。

但数据不正确。

例如,假设我在源代码中有 5 个文件,如下所示:

  • Classone_00000.csv
  • Classone_00001.csv
  • Classtwo_00000.csv
  • Classtwo_00001.csv
  • Classtwo_00003.csv

我正在使用分区,并且提到每个文件有 5 行。

在目标中,我仍然拥有所有 5 个文件名相同的文件,但数据不正确。就我而言classone_00000.csv数据将存在于所有其他 4 个文件中,如果源文件中有 5 行,则我的目标文件中只有 4 个文件。

我无法弄清楚为什么会发生这种情况。

我尝试过使foreach是顺序的而不是顺序的,但似乎没有任何效果。

我只想将 adls 源文件夹中的数据准确复制到 adls 目标文件夹。

foreach 复制 azure-data-lake-gen2

评论

0赞 Rakesh Govindula 11/15/2023
能否提供复制活动源和接收器配置以便更好地理解?
0赞 Bindu 11/15/2023
我已经在帖子中添加了我的来源和水槽的图片,请仔细研究一下。我是新来的,所以如果你无法看到图片,或者你需要任何其他输入,请告诉我

答:

0赞 Rakesh Govindula 11/16/2023 #1

在您的方法中,复制活动将在每次迭代中提供所有源文件,对于每个目标文件,最后一个源文件数据将被覆盖到目标文件中。这可能是导致数据不正确的原因。

为了满足您的要求,无需使用循环。可以对管道中的单个复制活动执行相同的操作。

在源数据集中提供容器的路径,并在复制活动源数据集中提供通配符路径

enter image description here

在目标数据集中,提供目标文件夹位置的路径。不要提供任何文件路径。

enter image description here

将其提供给复制活动接收器。

enter image description here

执行管道,源位置中的所有文件都将复制到目标位置。

enter image description here

评论

0赞 Bindu 11/16/2023
谢谢!!这是有效的,但是如果我想重命名接收器中的文件,我必须进行哪些更改???
0赞 Rakesh Govindula 11/16/2023
@Bindu,然后使用相同的循环方法。但对源数据集和接收器数据集都使用数据集参数。为每个文件指定特定的文件名。
0赞 Bindu 11/16/2023
如果我错了,请纠正我,所以在源和接收器中而不是使用 item()。在数据集的文件名中,我应该为文件名创建一个参数,例如:fl_name_sink 和 fl_name_source,它的动态内容将是 item().name
0赞 Rakesh Govindula 11/16/2023
对不起,我误解了你的问题。目前,ADF 无法重命名文件。方法是为每个文件创建具有新名称的新文件,并在同一迭代中删除旧文件。对源文件名和接收器文件名使用数据集参数。为源和接收器提供,您需要为该文件提供所需的名称,例如,如果要向当前文件名添加任何字符串,例如。@item().name@concat(split(item().name,'.')[0],'_new','.csv')
0赞 Rakesh Govindula 11/16/2023
如果您有正确的重命名顺序数组。然后,您需要使用不同的方法。要在同一个 for 循环中迭代多个数组,您需要将索引数组传递给 ForEach,并将该 index() 用于获取元数据数组并重命名数组。请参阅此答案以了解如何通过传递索引数组在同一个 for 循环中迭代多个数组@item()