ADF管道表达式构建器中AND/OR组合IF条件报错求助
问题修正方案
错误原因分析
and函数使用错误:Azure Data Factory中and()仅支持两个参数,多层嵌套and的写法会触发解析错误(即报错提示“'and'是基元,不支持嵌套属性”)。- 空安全运算符语法错误:ADF中空安全访问的正确语法是
?.,而非你使用的?,,且需要对每一层可能为null的属性逐级添加该运算符。 or函数参数缺失:or()必须接收两个布尔值参数,你当前仅传入一个表达式,逻辑不完整。
修正后的表达式
假设你的需求是:6个布尔属性全部符合指定值,并且REQUESTED TIMESTAMP不为null,可以使用以下表达式:
@and( all([ equals('TRUE', activity('SourceSystemFlags').output['SAP Flags']['LOCKED?']), equals('TRUE', activity('SourceSystemFlags').output['SAP Flags']['DATAHUB READY']), equals('TRUE', activity('SourceSystemFlags').output['SAP Flags']['REQUEST DATA NOW']), equals('FALSE', activity('SourceSystemFlags').output['SAP Flags']['NDP IMPORTING']), equals('TRUE', activity('SourceSystemFlags').output['SAP Flags']['TRANSACTIONAL DATA IMPORT FLAG']), equals('FALSE', activity('SourceSystemFlags').output['SAP Flags']['SRC SYNC ACTIVE']) ]), not(equals(activity('SourceSystemFlags').output?.['SAP Flags']?.['REQUESTED TIMESTAMP'], null)) )
如果你的需求是:6个布尔属性全部符合指定值,或者REQUESTED TIMESTAMP不为null,则调整为:
@or( all([ equals('TRUE', activity('SourceSystemFlags').output['SAP Flags']['LOCKED?']), equals('TRUE', activity('SourceSystemFlags').output['SAP Flags']['DATAHUB READY']), equals('TRUE', activity('SourceSystemFlags').output['SAP Flags']['REQUEST DATA NOW']), equals('FALSE', activity('SourceSystemFlags').output['SAP Flags']['NDP IMPORTING']), equals('TRUE', activity('SourceSystemFlags').output['SAP Flags']['TRANSACTIONAL DATA IMPORT FLAG']), equals('FALSE', activity('SourceSystemFlags').output['SAP Flags']['SRC SYNC ACTIVE']) ]), not(equals(activity('SourceSystemFlags').output?.['SAP Flags']?.['REQUESTED TIMESTAMP'], null)) )
关键说明
- 使用
all()函数替代多层嵌套的and,更简洁且符合ADF语法要求,当数组内所有布尔表达式为true时返回true。 - 用
?.实现空安全访问:如果output或SAP Flags为null,表达式不会抛出错误,而是返回null。 - 用
not(equals(..., null))判断REQUESTED TIMESTAMP是否不为null,这是ADF中判断非空的标准写法。
内容的提问来源于stack exchange,提问作者Anubhav Sinha
相关产品推荐
相关产品推荐

