Bil*_*tes 1 postgresql apache-nifi
我将 JSON 值放入 Postgres 数据库,链接 InvokeHTTP、CovertJSONtoSQL、ReplaceText 和 PutSQL。ReplaceText 正在向我的 SQL 添加一个额外的“ON CONFLICT...”子句。
作为 ReplaceText 的一部分,我正在使用流文件的 sql 属性之一,据我所知,它被持久化为布尔值(属性在流文件中显示为“t”或“f”)。我需要将此布尔值(t 或 f)转换为字符串(“TRUE”或“FALSE”),以便它在我的查询中工作。我的策略是尝试ifelse()
在
${sql.args.3.value:ifElse("TRUE","FALSE")}
Run Code Online (Sandbox Code Playgroud)
即使属性值为“t”,它也总是返回“FALSE”。
我通过首先将其转换为字符串来使其工作:
${sql.args.3.value:toString():equals('t'):ifElse("TRUE","FALSE")}
Run Code Online (Sandbox Code Playgroud)
但我很沮丧,它似乎没有按预期工作。有任何想法吗?
谢谢!
这似乎是基于 ifelse 文档的预期行为:
https://nifi.apache.org/docs/nifi-docs/html/expression-language-guide.html#ifelse
如果 sql.args.3.value 包含值“true”或“false”,那么它将被解释为布尔值,例如在文档中的示例中,它具有:
${bool:ifElse('a','b')}
Run Code Online (Sandbox Code Playgroud)
当 bool 的值为“true”时,它的计算结果为“a”。
在您的情况下, sql.args.3.value 的值是 't' 或 'f',因此它需要应用一个导致“true”或“false”的操作,例如您对 equals(' t') 比较。