【问题标题】:Create Folder Based on File Name in Azure Data Factory在 Azure 数据工厂中根据文件名创建文件夹
【发布时间】:2021-01-01 02:06:25
【问题描述】:

我需要将几个文件从 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

场景一 我必须将这些文件复制到目标 ADLS 中,如下所示,仅包含 csv 文件并从文件名创建文件夹(如果文件夹存在,则复制到该文件夹​​):

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 我必须将这些文件复制到目标 ADLS 中,如下所示,仅包含 csv 和 json 文件,并从文件名创建文件夹(如果文件夹存在,则复制到该文件夹​​):

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

有没有办法在数据工厂中实现这一点? 感谢任何潜在客户!

【问题讨论】:

    标签: azure azure-data-factory azure-data-lake azure-data-factory-2 azure-data-factory-pipeline


    【解决方案1】:

    所以我不确定这是否完全有帮助,但我也遇到过类似的情况,我们有 1 个 zip 文件,我不得不将这些文件复制到它们自己的文件夹中。

    所以你可以做的是在你将使用的数据接收器中使用参数,加上一个变量活动,你可以在其中做一个子字符串。

    下面的工作更适合 delta 工作,但我认为其中有足够的内容希望能有所帮助。我的工作可以分为三个部分。

    第一个橙色部分从您要复制的 ADLS gen 1 文件夹中获取最新的文件名日期。

    然后它被移动到橙色块。在底部,我根据 ADLS gen 1 日期获得最新的文件名,然后我在其中取出文件的日期部分的子字符串。在您的情况下,您可能可以创建一个数组并捕获您需要的所有文件夹名称。

    获取文件名

    获取子字符串

    在顶部,我首先提取该文件并将其解压缩到测试登陆区。

    来源

    水槽

    然后,我获取该 zip 文件中所有文件的名称,以便在 ForEach 活动中使用它们。然后这些文件名将成为复制活动的文件夹。

    从初始登陆区域获取文件名:

    然后我将这些子项从“获取暂存文件列表”传递到 ForEach:

    在那个 ForEach 活动中,我有一个复制活动。为此,我制作了数据集。从我们创建的初始登陆区域获取文件。对于此示例,我们将其称为 Staging(请原谅 ms 绘图):

    这样做的目的是转到那个虚拟文件夹并抓取刚刚复制到那里的每个文件。从该 1 个 zip 文件中,我们预计有 5 个文件。

    在 Sink 部分,我所做的是创建一个带有文件夹和文件名参数的新数据集。在该数据集中,我将该数据放入同一个容器中,但创建了一个名为“Stage”的新文件夹并将其与项目名称连接起来。我还添加了一个“替换”命令来删除文件名中的“.txt”。

    然后,这将做的是来自该虚拟登台的文件名,然后它将具有专门用于每个文件的文件夹名称。根据您的要求,我不确定这是否是您想要做的,但您可以随时对其进行修改以使其更具体。

    对于项目名称,我基本上得到相同的文件名,然后替换“.txt”,连接日期值的名称,然后添加“.txt”扩展名。否则我将不得不在文件名中添加“.txt”。

    最后我创建了一个删除活动,然后将用于删除所有文件(我不确定是否已正确设置,因此请随意调整)。

    希望上面的描述能让您了解如何为文件使用参数。如果这对您的情况有帮助,请告诉我。

    【讨论】:

    • 谢谢...这篇文章在解决我的问题时很有用。
    • 嗨 @Antony 很高兴这对您有所帮助。
    猜你喜欢
    • 2020-06-23
    • 2021-01-16
    • 2023-02-06
    • 2021-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多