我将JSON值放入Postgres数据库,链接InvokeHTTP、CovertJSONtoSQL、ReplaceText和PutSQL。ReplaceText正在向我的SQL中添加一个额外的“ON CONFLICT…”子句。
作为ReplaceText的一部分,我正在使用流文件的一个sql属性,据我所知,该属性被持久化为布尔值(流文件中的属性显示为“t”或“f”)。我需要将这个布尔值(t或f)转换为字符串(“TRUE”或“FALSE”),以便它在我的查询中工作。我的策略是尝试

${sql.args.3.value:ifElse("TRUE","FALSE")}

即使属性值为“t”,也始终返回“FALSE”。
我先把它放在一根绳子上:
${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')比较所做的操作。

关于postgresql - NiFi ifelse表达式无法与 bool 值配合使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44936382/

10-12 20:33