Azure Data Factory使用文件名DataSink

时间:2018-06-05 11:27:06

标签: parameters copy lookup azure-data-factory

我们的想法是使用查找活动来选择表中提到的第一个月份和年份。

select MONTH(regtime) as FirstMonth , YEAR(RegTime) as Year from MyTable where ID = (select MIN(id) from MyTable)

然后,在copy-activity中使用此查找的结果来选择此表中的行,这些行具有在查找活动中选择的月份和年份的时间戳。这可以在复制活动中定义源,如下所示:

select * from MyTable where MONTH(RegTime) = '@{activity('LookupFirstMonth').output.firstRow.FirstMonth}' and YEAR(RegTime) = '@{activity('LookupFirstMonth').output.firstRow.Year}'

下一步应该是将行复制到数据湖。在copy-activityit的Sink区域中,可以动态设置放入数据的文件的文件名。但我无法找到我想要的方法。我希望文件名反映在查找活动中选择的月份和年份。

我可以将接收器的文件名设置为@{activity('LookupFirstMonth').output.firstRow.MONTH},然后文件名将是monthnumber。但这还不够。它也应该在文件名中有YEAR。当我将文件名称为:

@CONCAT(@{activity('LookupFirstMonth').output.firstRow.FirstMonth}, @{activity('LookupFirstMonth').output.firstRow.Year}, '.txt')

我收到错误:

 {"code":"BadRequest","message":"The expression 'CONCAT(@{activity('LookupFirstMonth').output.firstRow.FirstMonth}, @{activity('LookupFirstMonth').output.firstRow.Year}, '.txt')' is not valid: the string character '@' at position '7' is not expected.\"","target":"pipeline/pipeline1/runid/3cf0a5a9-01df-494e-bdaf-dfc66f406a83"}

那么如何在复制活动

中的接收器的文件名中使用查找活动的结果

2 个答案:

答案 0 :(得分:1)

正确的表达应该是

@CONCAT(activity('LookupFirstMonth')。output.firstRow.FirstMonth,activity('LookupFirstMonth')。output.firstRow.Year,'。txt')

@ {CONCAT(activity('LookupFirstMonth')。output.firstRow.FirstMonth,activity('LookupFirstMonth')。output.firstRow.Year,'。txt')}

第一个是纯表达式,第二个是字符串插值(带{})

答案 1 :(得分:0)

基本上如果用@concat开始表达式,concat函数内的所有内容都不能以@开头。 所以试试这个:

@CONCAT({activity('LookupFirstMonth').output.firstRow.FirstMonth}, {activity('LookupFirstMonth').output.firstRow.Year}, '.txt')
来自msdn文档的示例:

"@concat('Answer is: ', string(pipeline().parameters.myNumber))"

所以你看,在管道()之前没有@。