Apache nifi 如何在Nifi ExecuteSQL处理器中使用参数?

Apache nifi 如何在Nifi ExecuteSQL处理器中使用参数?,apache-nifi,Apache Nifi,我希望Nifi先读取DB中的所有人,然后为每个人提供地址,而不是进行连接。我知道这不是最有效的方法,但我们有一些具体的原因 “每个人”部分是通过使用SplitAvro或SplitJson处理器解决的,但是我如何获取当前人的ID并将其用作下一个ExecuteSQL处理器中的参数呢 我已经检查了一些类似于我想要的东西,但是问题有点老了() 然而,我想,上面给出的解决方案更像是一个简单解决方案 (在我的例子中,我不使用Hive,两个ExecuteSQL处理器我都使用SQl Server DBs上的查询

我希望Nifi先读取DB中的所有人,然后为每个人提供地址,而不是进行连接。我知道这不是最有效的方法,但我们有一些具体的原因

“每个人”部分是通过使用SplitAvro或SplitJson处理器解决的,但是我如何获取当前人的ID并将其用作下一个ExecuteSQL处理器中的参数呢

我已经检查了一些类似于我想要的东西,但是问题有点老了()

然而,我想,上面给出的解决方案更像是一个简单解决方案


(在我的例子中,我不使用Hive,两个ExecuteSQL处理器我都使用SQl Server DBs上的查询)

我承认这是一个复杂的场景,因为您正在执行的不是一个
连接
,而是一个读取/迭代/查询,但如果这是您真正想要做的,我想这就是您正在寻找的。该处理器将执行SQL查询,并使用配置的
RecordWriter
控制器服务将结果作为记录返回。然后,您可以使用执行其他查询,该查询可以连接到任意数据源(尽管目前不支持RDBMS),以记录格式丰富数据,或者使用
SplitRecord
从单个记录创建流文件,并路由到另一个
ExecuteSQLRecord
处理器,它可以使用传入的flowfile属性作为SQL的查询参数

是的,我们希望避免重复记录(因为我们最终将不得不通过xslt、jolt或groovy连接它们,正如您在另一个问题中告诉我的那样),当然,现实世界比“person/address”示例复杂得多。另一个原因是,我们将逐个发送到外部SOAP Web服务。除了指定模式的位置(可选)之外,我对这些RecordWriter和RecordReader的了解真的不多,有关于它们的其他文档吗?他们的主要目的是什么?我知道这个问题可能很愚蠢,但我对此还是新手。我如何在下一个ExecuteSQLRecord中使用传入的flowfile属性作为查询参数?您不需要查询参数,您可以使用ExecuteSQLRecord获取数据库中的所有人员,然后在LookupRecord中,您将指向包含人员ID的字段,以确定从SOAP服务获取哪个人员。NiFi目前没有SOAPLookupService,但是,您可能必须编写一个(用Java或使用ScriptedLookupService)。我将实际将数据发送到SOAP,因此一个简单的HTTP Post可能就足够了(即使我以后可能必须读取服务器的返回)。Andy提到LookupRecord不支持RDBMS,所以这就是我不考虑它的原因,或者它确实支持RDBMS吗?也许如果你解释一下你不想加入
或在RDBMS中使用视图的原因,这会更有意义。就目前的情况而言,听起来你不希望这样做会带来固有的负面影响,但你也不希望以另一种方式来做。将数据发送到外部服务(HTTP或SOAP)不需要在整个流中使用单独的流文件,只需在
InvokeHTTP
处或仍然使用
LookupRecord
记录即可。查看记录以了解他们的力量。