如何根据ADFv2中的文件名将文件复制到其他目录

时间:2019-06-17 08:33:59

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

我正在尝试将文件复制到ADLS中的某个文件夹位置。在这里,我试图根据文件名进行复制。在这里,我的来源和目的地仅是ADLS。

例如

    If filename is ABC.csv then copy to ABC folder

    If filename is DEF.csv then copy to DEF folder

    If filename is XYZ.csv then copy to XYZ folder and so on.

请使用蓝色数据工厂v2帮助我实现这一目标。

我知道这在SSIS中很容易。但是在ADFv2中,我尝试使用Foreach循环遍历所有文件(我只有3个文件),并且在foreach循环中存在IF条件来检查文件名。不确定如何在运行时更改目标文件夹的位置。

2 个答案:

答案 0 :(得分:1)

您可以使用接收器文件路径中的动态内容来实现此目的。因此,请改为使用if-then-else-logic定义目标文件夹,而是根据文件名动态构建它。

在以下示例中,目标文件夹是使用触发器开始时间动态构建的:

 "folder": {
        "name": "Target"
    },
    "type": "AzureDataLakeStoreFile",
    "typeProperties": {
        "fileName": "",
        "folderPath": {
            "value": "@CONCAT('/tenant02/data/raw/corporate/hmaserver/Ingest_Date=', formatDateTime(trigger().startTime, 'yyyy-MM-dd/'))",
            "type": "Expression"
        }

在Data Factory V2 UI中,编辑接收器数据集以执行以下操作:

ADF Sink Dataset

在连接中添加动态内容:

Dynamic Content for sink

您可以执行类似的操作,例如G。替换文件扩展名:

@replace(item().name, '.csv', '')

另一个选择是为此使用Databricks活动。有关Python笔记本中复杂的复制逻辑,请参见下面的Answer

答案 1 :(得分:0)

您可以像下面这样在Azure数据工厂中使用If Condition activity

定义If Condition来检查文件名是否为ABC。

  • 如果为true,则定义一个活动以将其复制到文件夹ABC。
  • 如果为false,则在ifFalseActivities中插入另一个If Condition,以检查文件名是否为DEF,然后根据该活动的结果写入活动,以将文件复制到目标文件夹。

如果您可以在将数据传递到ADF之前基于文件名定义destination folder(例如,定义file name返回的destination folderstored procedure),则在Lookup activity中,您可以为File pathfile name使用动态内容。