【问题标题】:Copy files of different formats in different folders based using Azure Data Factory使用 Azure 数据工厂复制不同文件夹中不同格式的文件
【发布时间】:2021-03-18 10:08:21
【问题描述】:

我是 Azure 数据工厂的新手,我正在尝试解决一个特定的用例。我必须将文件从源文件夹复制到目标文件夹,这两个文件夹都在同一个存储帐户中。源文件夹中的文件格式不同(csv、txt、xml),并在末尾附加日期,例如:addresses_2020-11-01.csv(日期格式:yyyy-mm-dd)

我必须创建一个管道,将文件排序并存储在此层次结构中的动态文件夹中:例如:csv->yyyy->mm->dd。我的理解是首先我必须将文件过滤成不同的格式,然后使用 split 函数将有 _ 的子字符串拆分,然后根据文件名中的年月日动态创建文件夹。下面是我到目前为止创建的管道的屏幕截图:我无法显示屏幕截图,但链接会打开屏幕截图。

[管道过滤文件,并复制到目标文件夹]

我做了什么:

  1. 使用 Get Metadata 提取子项
  2. 将 Get Metadata 的输出过滤到 csv、txt 和 xml 文件中
  3. 用于包含复制活动的每个活动。由于通配符包含 *.txt、*.csv、*.xml
  4. ,因此此活动将过滤活动中的文件复制到相应的文件夹(csv、txt..)中

我不确定在过滤文件后前进的正确方法是什么,以便根据文件名中的日期创建动态文件夹。我想我需要将 set Variable 活动与复制活动一起使用,但不知道如何实现这一点。任何帮助将不胜感激。

谢谢!!

【问题讨论】:

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


    【解决方案1】:

    如果您只想复制文件,则无需使用不同的格式。您可以只使用二进制格式。像这样的:

    步骤:

    1.使用Get Metadata提取子项

    2.使用对于每个包含一个Copy活动副本到不同文件夹的活动。

    表达式:@activity('Get Metadata1').output.childItems

    复制活动来源:

    源数据集:

    复制活动接收器:

    汇数据集:

    表达式:@concat(split(item().name,'.')[1],'/',split(split(item().name,'_')[1],'-')[0],'/',split(split(item().name,'_')[1],'-')[1],'/',split(split(split(item().name,'_')[1],'-')[2],'.')[0])(这适用于您的例如文件名:addresses_2020-11-01.csv)

    源文件夹中的文件:

    结果:

    【讨论】:

    • 感谢@Steve Zhao。这很好用。在过去的两周里,我一直在努力解决这个问题,而你让它变得如此简单。非常感谢!!
    • 能否请您简要解释一下拆分功能的工作原理。我有点困惑,为什么最后 3 次迭代中有多个拆分函数。
    • 该表达式用于根据您的文件名获取目标文件夹路径:csv|txt|xml/year/month/day。每个拆分函数用于获取目标文件夹路径的单个部分。然后将它们与/ 连接以构建目标文件夹路径。
    猜你喜欢
    • 2022-10-14
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    • 2020-03-01
    • 2023-02-06
    • 2022-11-17
    • 2020-06-27
    相关资源
    最近更新 更多