如何使用NiFi中新的DBCPConnectionPoolLookup列出一组数据库中的数据库表?

时间:2018-08-14 19:11:31

标签: java sql groovy apache-nifi

从NiFi 1.7.1开始,新的DBCPConnectionPoolLookup可以动态选择数据库连接:在FlowFile上设置属性database.name,并且当使用方处理器访问已配置的DBCPConnectionPoolLookup控制器服务时,该属性将用于通过此查询的配置属性获得连接,该属性包含潜在值到DBCPConnectionPool控制器服务的映射。

我想列出在查询中配置的每个数据库中的表,但是ListDatabaseTables处理器不接受传入的FlowFiles。这似乎意味着它不适用于在动态数据库集中列出表。

完成此任务的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

ListDatabaseTables使用JDBC API从已建立的JDBC连接的元数据中获取表信息。这隐藏了如何从特定数据库实际获取表的基本方法。

如果所有数据库都属于同一类,那么如果您有一个数据库列表,则可以为每个数据库生成一个流文件,并填充database.name属性,然后将ExecuteSQL与DBCPConnectionPoolLookup结合使用来执行相应的SQL语句以获取该数据库的表,例如SHOW TABLES。您可以使用任何记录感知处理器(例如QueryRecord,UpdateRecord,ConvertRecord等)解析记录,如果每个流文件需要一个表,则可以使用SplitRecord。如果输出为JSON或CSV或XML,则可以分别使用EvaluateJsonPath,ExtractText或EvaluateXPath将表名转换为属性,然后从那里继续。

我写了NIFI-5519来介绍ListDatabaseTables可以选择接受传入连接的建议,与此同时,您需要1个ListDatabaseTables实例来与每个DBCPConnectionPool实例相对应。

相关问题