NiFi SplitJSON 和 ExecuteSQL

NiFi SplitJSON and ExecuteSQL

在一个NiFi流中,我想读取一个JSON结构,拆分它,使用payload执行一个SQL查询,最后将每个结果输出到一个JSON文件。

但是我在 ExecuteSQL 处理器中检索拆分的 FlowFile 属性的值时遇到问题。

  1. GenerateFlowFile 处理器,JSON 结构为 Custom Text

  1. SplitJSON,以数据为属性进行拆分

  1. ExecuteSQL,使用我尝试执行的查询,使用 SplitJSON's 有效负载属性 ${id}

此时我收到 SQL 语法错误的日志错误。显然 ExecuteQuery 处理器没有解析其 SQL select query 属性.

上的表达式

拆分JSON后是否还有任何中间处理要完成?我错过了什么?

您需要在 SplitJsonExecuteSQL 之间增加一个 EvaluateJsonPath(或 ExtractText)处理器——表达式语言表达式无法计算流文件内容以进行参数替换,所以你的 SQL 表达式最终是 SELECT * FROM foo WHERE id = ; 这就是你有语法错误的原因。

表达式语言从流文件属性中读取,因此您需要将 JSON 内容解析为可访问的属性。 EvaluateJsonPath 处理器正是这样做的。您需要做的就是添加自定义 属性(单击属性对话框右上角的 +)并将 JSON 中的 id 值提取到流文件中属性。然后将 matched 关系从这个处理器连接到 ExecuteSQL 处理器。