我目前正在使用ADF按计划将文件从SFTP服务器复制到Blob存储。
文件名结构为AAAAAA_BBBBBB_CCCCCC.txt。
是否可以在复制到Blob存储之前重命名文件,以便最终得到类似文件夹的结构,如下所示?
AAAAAA / BBBBBB / CCCCCC.txt
答案 0 :(得分:4)
这是对我有用的
我指定了文件名,添加了文件扩展名,您可以在时间戳中添加任何内容,因为参数不能为空,因此可以绕过ADF要求。
接下来,单击“连接”选项卡,然后在“文件名”框中添加以下代码:@concat(dataset()。FileName,dataset()。Timestamp,dataset()。FileExtension)。这段代码基本上将所有参数连接在一起,您是否可以拥有类似“ FileName_Timestamp_FileExtension。请参见下面的图片:
接下来,单击管道,然后选择复制数据活动。单击接收器选项卡。在“数据集”属性下找到参数“时间戳记”,然后添加以下代码:@pipeline()。TriggerTime。看下面的图片:
最后,发布您的管道并运行/调试它。如果它对我有用,那么我相信它也对您有用:)
答案 1 :(得分:0)
使用ADF V2,你可以做到这一点。首先,使用lookup activity获取源代码的所有文件名。 然后链接foreach activity以迭代源文件名。 foreach活动包含复制活动。警察活动的源数据集和接收器数据集都包含文件名和文件夹路径的参数。 您可以使用split and replace函数根据源文件名生成接收器文件夹路径和文件名。
答案 2 :(得分:0)
首先,您必须在GetMetadata-Activity中获取文件名。您可以将其用作复制活动中的参数,然后重命名文件名。
如先前答案中所述,您可以使用替换功能来做到这一点:
{
"name": "TgtBooksBlob",
"properties": {
"linkedServiceName": {
"referenceName": "Destination-BlobStorage-data",
"type": "LinkedServiceReference"
},
"folder": {
"name": "Target"
},
"type": "AzureBlob",
"typeProperties": {
"fileName": {
"value": "@replace(item().name, '_', '\\')",
"type": "Expression"
},
"folderPath": "data"
}
},
"type": "Microsoft.DataFactory/factories/datasets"
}