admin

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

sql

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

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

做到这一点的最佳方法是什么?


阅读 177

收藏
2021-07-01

共1个答案

admin

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实例相对应。

2021-07-01