NiFi ifelse 表达式不能按预期使用布尔值
NiFi ifelse expression not working as expected with boolean
我正在将 JSON 值放入 Postgres 数据库,链接 InvokeHTTP、CovertJSON 到 SQL、ReplaceText 和 PutSQL。 ReplaceText 正在向我的 SQL 添加一个额外的 'ON CONFLICT...' 子句。
作为 ReplaceText 的一部分,我正在使用流文件的 sql 属性之一,据我所知,它作为布尔值持久化(属性显示为 't' 或流文件中的 'f')。我需要将此布尔值(t 或 f)转换为字符串("TRUE" 或 "FALSE"),以便它在我的查询中起作用。我的策略是像
那样尝试 ifelse()
${sql.args.3.value:ifElse("TRUE","FALSE")}
那总是 returns "FALSE" 即使属性值为 't'。
我先将它转换成一个字符串使其工作:
${sql.args.3.value:toString():equals('t'):ifElse("TRUE","FALSE")}
但我很沮丧,它似乎没有按预期工作。有什么想法吗?
谢谢!
根据 ifelse 的文档,这似乎是预期的行为:
https://nifi.apache.org/docs/nifi-docs/html/expression-language-guide.html#ifelse
如果 sql.args.3.value 包含值 "true" 或 "false" 那么它将被解释为布尔值,例如在文档中的示例中有:
${bool:ifElse('a','b')}
当 bool 的值为 "true" 时计算结果为 'a'。
在你的例子中 sql.args.3.value 的值是 't' 或 'f' 所以它需要应用一个操作导致 "true"或 "false",例如您对 equals('t') 所做的比较。
我正在将 JSON 值放入 Postgres 数据库,链接 InvokeHTTP、CovertJSON 到 SQL、ReplaceText 和 PutSQL。 ReplaceText 正在向我的 SQL 添加一个额外的 'ON CONFLICT...' 子句。
作为 ReplaceText 的一部分,我正在使用流文件的 sql 属性之一,据我所知,它作为布尔值持久化(属性显示为 't' 或流文件中的 'f')。我需要将此布尔值(t 或 f)转换为字符串("TRUE" 或 "FALSE"),以便它在我的查询中起作用。我的策略是像
那样尝试ifelse()
${sql.args.3.value:ifElse("TRUE","FALSE")}
那总是 returns "FALSE" 即使属性值为 't'。
我先将它转换成一个字符串使其工作:
${sql.args.3.value:toString():equals('t'):ifElse("TRUE","FALSE")}
但我很沮丧,它似乎没有按预期工作。有什么想法吗?
谢谢!
根据 ifelse 的文档,这似乎是预期的行为:
https://nifi.apache.org/docs/nifi-docs/html/expression-language-guide.html#ifelse
如果 sql.args.3.value 包含值 "true" 或 "false" 那么它将被解释为布尔值,例如在文档中的示例中有:
${bool:ifElse('a','b')}
当 bool 的值为 "true" 时计算结果为 'a'。
在你的例子中 sql.args.3.value 的值是 't' 或 'f' 所以它需要应用一个操作导致 "true"或 "false",例如您对 equals('t') 所做的比较。