繁体   English   中英

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

[英]How can I list database tables in a set of databases using the new DBCPConnectionPoolLookup in NiFi?

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM