Nifi 从 Oracle 问题中获取数据

Posted

技术标签:

【中文标题】Nifi 从 Oracle 问题中获取数据【英文标题】:Nifi Fetching Data From Oracle Issue 【发布时间】:2018-07-09 18:12:35 【问题描述】:

我需要从 oracle 获取数据并上传到谷歌云存储。

我正在使用 executeSql proecssor,但它对于大型表失败,甚至对于具有 100 万条大约 45mb 大小的记录的表也需要 2 小时才能提取。

使用restapi将表名传递给listenHttp,然后将它们传递给executeSql。我不能使用 QueryDatabase,因为表的数量是动态的,并且使用 UI 和 Nifi RestUi 启动获取的调用也是动态的。

请在 ExecuteSql 处理器中建议任何调整参数。

【问题讨论】:

【参考方案1】:

我相信您是在谈论拥有较小流文件的能力,并可能在处理器仍在处理(大)结果集时将它们发送到下游。对于 QueryDatabaseTable,这是在 NiFi 1.6.0(通过 NIFI-4836)和即将发布的版本(NiFi 1.8.0,通过 NIFI-1251)中添加的,此功能也可用于 ExecuteSQL。

您应该能够使用GenerateTableFetch 来做您想做的事。在那里您可以设置分区大小(最终将是每个流文件的行数),如果您想在每次流文件进入时获取整个表,则不需要最大值列(这也允许您确实按照您的描述处理多个表格)。 GenerateTableFetch 将生成 SQL 语句以从表中获取“页面”数据,这将在非常大的表上为您提供更好的增量性能。

【讨论】:

嗨,马特,感谢您的回复。我正在尝试完全相同的事情。但即使在这种情况下,执行 sql 处理器也需要 30 多分钟才能获取 5000 条形成 1 页大小的记录。 这在 Oracle 表名由用户从 UI 传递,并通过 rest 传递给 nifi。所以我无法在处理器中获取列名。 :( 是否有任何其他优化可以工作。 我将 ojdbc7.jar 与 Oracle 11g 一起使用。我也尝试过使用 ojdc6,但没有任何区别 这可能最好作为单独的 SO 问题处理

以上是关于Nifi 从 Oracle 问题中获取数据的主要内容,如果未能解决你的问题,请参考以下文章

nifi从json文件中获取属性

NIFI同步API接口数据

如何使用nifi在mysql中获取最后插入的记录

从nifi中的xml中提取属性

从 oracle 数据库中获取数据

从oracle数据库中获取日期而不从列中获取时间