Azure 数据工厂 - 函数 if 不接受 4 个参数

问题描述 投票:0回答:1

如果项目名称包含“_”并且这些项目名称以特定架构名称开头,我将尝试拆分项目名称

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)

这个问题有解决办法吗?

azure azure-data-factory
1个回答
0
投票

您看到的错误消息是因为 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 查询。

© www.soinside.com 2019 - 2024. All rights reserved.