我们的想法是使用查找活动来选择表中提到的第一个月份和年份。
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"}
那么如何在复制活动
中的接收器的文件名中使用查找活动的结果答案 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))"
所以你看,在管道()之前没有@。