对于上下文,我目前有一个Data Factory v2管道,该管道带有一个ForEach活动,该活动调用Copy活动。复制活动只是将数据从FTP服务器复制到Blob存储容器。
这是管道json文件:
{
"name": "pipeline1",
"properties": {
"activities": [
{
"name": "ForEach1",
"type": "ForEach",
"typeProperties": {
"items": {
"value": "@pipeline().parameters.InputParams",
"type": "Expression"
},
"isSequential": true,
"activities": [
{
"name": "Copy1",
"type": "Copy",
"policy": {
"timeout": "7.00:00:00",
"retry": 0,
"retryIntervalInSeconds": 30,
"secureOutput": false
},
"typeProperties": {
"source": {
"type": "FileSystemSource",
"recursive": true
},
"sink": {
"type": "BlobSink"
},
"enableStaging": false,
"cloudDataMovementUnits": 0
},
"inputs": [
{
"referenceName": "FtpDataset",
"type": "DatasetReference",
"parameters": {
"FtpFileName": "@item().FtpFileName",
"FtpFolderPath": "@item().FtpFolderPath"
}
}
],
"outputs": [
{
"referenceName": "BlobDataset",
"type": "DatasetReference",
"parameters": {
"BlobFileName": "@item().BlobFileName",
"BlobFolderPath": "@item().BlobFolderPath"
}
}
]
}
]
}
}
],
"parameters": {
"InputParams": {
"type": "Array",
"defaultValue": [
{
"FtpFolderPath": "/Folder1/",
"FtpFileName": "@concat('File_',formatDateTime(utcnow(), 'yyyyMMdd'), '.txt')",
"BlobFolderPath": "blobfolderpath",
"BlobFileName": "blobfile1"
},
{
"FtpFolderPath": "/Folder2/",
"FtpFileName": "@concat('File_',formatDateTime(utcnow(), 'yyyyMMdd'), '.txt')",
"BlobFolderPath": "blobfolderpath",
"BlobFileName": "blobfile2"
}
]
}
}
},
"type": "Microsoft.DataFactory/factories/pipelines"
}
我遇到的问题是,在指定管道参数时,似乎无法使用系统变量和功能,例如为blob存储数据集指定文件夹路径时。
这样的结果是formatDateTime(utcnow(), 'yyyyMMdd')
不会被解释为函数调用,而是真正的字符串,其值为“ formatDateTime(utcnow(),'yyyyMMdd')”。
为了解决这个问题,我想我应该使用触发器来执行我的管道,并将触发器的执行时间作为参数传递给trigger().startTime
这样的管道,但这是唯一的方法吗?我只是在管道的json中做错什么了?
答案 0 :(得分:0)
您不能将动态表达式设置为默认值。您应该在创建触发器时或在复制活动的接收器/源中定义数据集参数时定义此表达式和函数。 因此,您可以在源数据集中创建具有默认值的数据集属性FtpFileName,然后在复制活动中,可以在源类别中指定该动态表达式。
另一种方法是定义管道参数,然后在定义触发器时向该管道参数添加动态表达式。希望这是对您的明确答复。 :)
答案 1 :(得分:0)
参数的默认值不能为表达式。它们必须是文字字符串。 您可以使用触发器来实现。或者,您可以提取表达式的公共部分,然后将文字值放入foreach项中。
答案 2 :(得分:0)
这应该起作用: File _ @ {formatDateTime(utcnow(),'yyyyMMdd')}
或复杂路径: rootfolder / subfolder / @ {formatDateTime(utcnow(),'yyyy')} / @ {formatDateTime(utcnow(),'MM')} / @ {formatDateTime(utcnow(),'dd')} / @ {formatDateTime( utcnow(),'HH')}