![](/img/trans.png)
[英]How do I list multiple databases with their tables by using “Show Tables” via Java?
[英]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.