Azure 数据工厂使用文件名 DataSink 中的查找结果
Azure Data Factory use result from lookup in filename DataSink
想法是使用查找-activity 到 select table 中第一个提到的月份和年份。
select MONTH(regtime) as FirstMonth , YEAR(RegTime) as Year from MyTable where ID = (select MIN(id) from MyTable)
然后将此查找的结果用于复制-activity 到 select 此 table 中具有带有月份和年份的时间戳的行 select 在查找中编辑 activity。这可以在副本 activity 中定义源,如下所示:
select * from MyTable where MONTH(RegTime) = '@{activity('LookupFirstMonth').output.firstRow.FirstMonth}' and YEAR(RegTime) = '@{activity('LookupFirstMonth').output.firstRow.Year}'
下一步应该是将行复制到数据湖。在副本的 Sink 区域-activity可以动态设置数据放入的文件的文件名。但是我找不到我想要的方法。我希望文件名反映月份和年份,select在查找中编辑 activity。
我可以将Sink的文件名设置为@{activity('LookupFirstMonth').output.firstRow.MONTH}
,然后文件名就是月数。但这还不够。它还应该在文件名中包含 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"}
那么我如何在副本 activity
的接收器的文件名中使用查找结果 activity
基本上,如果您的表达式以@concat 开头,concat 函数中的所有内容都不能以@ 开头。
所以试试这个:
@CONCAT({activity('LookupFirstMonth').output.firstRow.FirstMonth}, {activity('LookupFirstMonth').output.firstRow.Year}, '.txt')
msdn 文档中的示例:
"@concat('Answer is: ', string(pipeline().parameters.myNumber))"
所以你看,在 pipeline() 之前没有@。
正确的表达应该是
@CONCAT(activity('LookupFirstMonth').output.firstRow.FirstMonth, activity('LookupFirstMonth').output.firstRow.Year, '.txt' )
或
@{CONCAT(activity('LookupFirstMonth').output.firstRow.FirstMonth, activity('LookupFirstMonth').output.firstRow.Year, '.txt ')}
第一个是纯表达式,第二个是字符串插值(带{})
想法是使用查找-activity 到 select table 中第一个提到的月份和年份。
select MONTH(regtime) as FirstMonth , YEAR(RegTime) as Year from MyTable where ID = (select MIN(id) from MyTable)
然后将此查找的结果用于复制-activity 到 select 此 table 中具有带有月份和年份的时间戳的行 select 在查找中编辑 activity。这可以在副本 activity 中定义源,如下所示:
select * from MyTable where MONTH(RegTime) = '@{activity('LookupFirstMonth').output.firstRow.FirstMonth}' and YEAR(RegTime) = '@{activity('LookupFirstMonth').output.firstRow.Year}'
下一步应该是将行复制到数据湖。在副本的 Sink 区域-activity可以动态设置数据放入的文件的文件名。但是我找不到我想要的方法。我希望文件名反映月份和年份,select在查找中编辑 activity。
我可以将Sink的文件名设置为@{activity('LookupFirstMonth').output.firstRow.MONTH}
,然后文件名就是月数。但这还不够。它还应该在文件名中包含 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"}
那么我如何在副本 activity
的接收器的文件名中使用查找结果 activity基本上,如果您的表达式以@concat 开头,concat 函数中的所有内容都不能以@ 开头。 所以试试这个:
@CONCAT({activity('LookupFirstMonth').output.firstRow.FirstMonth}, {activity('LookupFirstMonth').output.firstRow.Year}, '.txt')
msdn 文档中的示例:
"@concat('Answer is: ', string(pipeline().parameters.myNumber))"
所以你看,在 pipeline() 之前没有@。
正确的表达应该是
@CONCAT(activity('LookupFirstMonth').output.firstRow.FirstMonth, activity('LookupFirstMonth').output.firstRow.Year, '.txt' )
或
@{CONCAT(activity('LookupFirstMonth').output.firstRow.FirstMonth, activity('LookupFirstMonth').output.firstRow.Year, '.txt ')}
第一个是纯表达式,第二个是字符串插值(带{})