在NiFi的QueryDatabaseTable中执行多个Select *

时间:2018-12-14 21:12:58

标签: sql mysql-workbench apache-nifi data-extraction

我要执行select * from table1select * from table2select * from table3,... select * from table80 ....(基本上从80个不同的表中提取数据并将其发送到

中的 Elasticsearch(Kibana)中有80个不同的索引。

是否可以在一个查询数据库表中提供多个select * statement,然后将其路由到不同的索引?如果是,流程将如何?

2 个答案:

答案 0 :(得分:1)

QueryDatabaseTable 不允许传入连接,所以它是not possible

但是您可以通过以下流程实现相同的用例

流量:

1. ListDatabaseTables
2. RouteOnAttribute //*optional* filter only required tables
3. GenerateTableFetch //to generate pages of sql queries and store state
4. RemoteProcessGroup (or) Load balance connection
5. ExecuteSql //run more than one concurrent task if needed
6. further processing
7. PutElasticSearch.

此外,如果您不想运行流程incrementally,请删除GenerateTableFetch处理器

  • ExecuteSql 处理器选择查询配置为

    select * from ${db.table.schema}.${db.table.name}

一些有用的参考文献:

  • GenerateTableFetch link1 link2

  • 逐步运行 ExecuteSQL 处理器,而无需使用GenerateTableFetch link

答案 1 :(得分:0)

有两种方法可以解决此问题。

  • 如果您的表实际上是table1table2等,则可以简单地生成80个流文件,每个流文件在属性(即table_count)中具有唯一的整数值,并使用{ {1}}和GenerateTableFetch通过表达式语言使用此属性创建查询
  • 如果表名是非顺序的(即ExecuteSQLusers等),则可以从列出每一行的文件中读取,也可以使用addresses来查询名称的数据库。然后,您可以执行简单的文本处理,将每个表中创建的流文件拆分为一个,然后按上述步骤继续