我需要将几个文件从ADLS Gen1位置复制到另一个ADLS Gen1位置,但是必须根据文件名创建文件夹。
我在源ADLS中的文件很少,如下所示:
ABCD_20200914_AB01_Part01.csv.gz
ABCD_20200914_AB02_Part01.csv.gz
ABCD_20200914_AB03_Part01.csv.gz
ABCD_20200914_AB03_Part01.json.gz
ABCD_20200914_AB04_Part01.json.gz
ABCD_20200914_AB04_Part01.csv.gz
场景1 我必须将这些文件仅使用csv文件复制到目标ADLS中,并从文件名创建文件夹(如果存在文件夹,则复制到该文件夹):
AB01-
|-ABCD_20200914_AB01_Part01.csv.gz
AB02-
|-ABCD_20200914_AB02_Part01.csv.gz
AB03-
|-ABCD_20200914_AB03_Part01.csv.gz
AB04-
|-ABCD_20200914_AB04_Part01.csv.gz
场景2 我必须将这些文件仅使用csv和json文件复制到以下目标ADLS中,并从文件名创建文件夹(如果存在文件夹,则复制到该文件夹):
AB01-
|-ABCD_20200914_AB01_Part01.csv.gz
AB02-
|-ABCD_20200914_AB02_Part01.csv.gz
AB03-
|-ABCD_20200914_AB03_Part01.csv.gz
|-ABCD_20200914_AB03_Part01.json.gz
AB04-
|-ABCD_20200914_AB04_Part01.csv.gz
|-ABCD_20200914_AB04_Part01.json.gz
在Data Factory中有什么方法可以实现这一目标? 感谢任何潜在客户!
答案 0 :(得分:2)
所以我不确定这是否完全有帮助,但是在类似的情况下,我们只有1个zip文件,因此我不得不将这些文件复制到自己的文件夹中。
因此,您可以做的是在要使用的数据接收器中使用参数,以及在其中执行子字符串的可变活动。
下面的工作更多的是针对三角洲工作,但我认为其中有足够的内容希望对您有所帮助。我的工作可以分为三个部分。
第一个橙色部分从您要复制的ADLS第1代文件夹中获取最新的文件名日期。
然后将其移动到橙色块。在底部,我得到了基于ADLS第1代日期的最新文件名,然后执行了一个子字符串,在其中取出了文件的日期部分。根据您的情况,您可能可以做一个数组并捕获所需的所有文件夹名称。
在顶部,我首先提取文件并将其解压缩到测试着陆区。
然后我获得该zip文件中所有文件的名称,以供ForEach活动中使用。这些文件名将成为复制活动的文件夹。
然后我将这些子项从“获取暂存文件列表”传递到ForEach:
在该ForEach活动中,我有一个复制活动。为此,我对数据集做了说明。从我们创建的初始着陆区中获取文件的工具。对于此示例,我们称之为暂存(原谅ms绘画图):
此操作的目的是转到该虚拟文件夹,并获取刚复制到其中的每个文件。从这1个zip文件中,我们希望有5个文件。
在“接收器”部分中,我要做的是使用文件夹和文件名的参数创建一个新的数据集。在该数据集中,我将数据放入相同的容器中,但是创建了一个名为“ Stage”的新文件夹,并将其与项目名称连接在一起。我还添加了“替换”命令,以从文件名中删除“ .txt”。
然后它将执行的操作是,从该虚拟暂存区获得的文件名将具有专门用于每个文件的文件夹名。根据您的要求,我不确定这是否是您想要做的,但是您可以随时进行修改以更具体。
对于项目名称,我基本上得到相同的文件名,然后替换为“ .txt”,并连接日期值的名称,然后再添加“ .txt”扩展名。否则,我必须在文件名中输入“ .txt”。
最后,我创建了一个删除活动,然后将其用于删除所有文件(我不确定是否已正确设置该文件,因此可以随意进行明显调整)。
希望上面的描述为您提供了有关如何为文件使用参数的想法。让我知道这是否对您有帮助。