如果项目名称包含“_”并且这些项目名称以特定架构名称开头,我将尝试拆分项目名称
item = ['test_tabl','Schema1__mytable1', 'Schema2__mytable2']
@concat('SELECT *FROM ',
if(contains(item(), '_'), and(startswith(item(), 'Schema1_'),item()), or(startswith(item(), 'Schema2_'),item()),
concat(split(item(), '_')[0], '.', replace(item(),concat(split(item(), '_')[0],'_'),''))),
concat(pipeline().globalParameters.my_schema,'.',item())
)
)
在上述情况下,条件检查项目名称列表是否具有“”值或以“Schema1”或“Schema2_”开头,那么它应该拆分,否则应该使用默认模式(globalParameters).table名字。
即:此处 - 'Schema1__mytable1'、'Schema2__mytable2' - 拆分应该仅针对此项目而不是 'test_tabl' 进行。
但是我遇到了以下错误
function 'if' does not accept 4 argument(s)
这个问题有解决办法吗?
您看到的错误消息是因为 ADF 表达式中的 if 函数仅接受三个参数。你的表达似乎有一些错误。根据需求,您可以使用以下表达式。
select * from
@{if(and(or(startswith(item(),'Schema1_'),startswith(item(),'Schema2_')),contains(item(), '_'))
,concat(split(item(),'_')[0],'.',split(item(), '__')[1])
,concat(pipeline().globalParameters.my_schema,'.',item()))}
该表达式使用字符串插值而不是连接。这将产生相同的预期 SQL 查询。