我需要从oracle获取数据并上传到Google云存储中。
我正在使用executeSql proecssor,但是对于大型表,甚至对于具有约100万条记录(约45mb大小)的表,它都要花费2个小时才能拉出。
使用restapi将表名传递给listenHttp,这会将它们传递给executeSql。我不能使用QueryDatabase,因为表的数量是动态的,并且使用UI和Nifi RestUi来启动获取操作的调用也是动态的。
请在ExecuteSql Processor中建议任何调整参数。
答案 0 :(得分:3)
我相信您是在谈论具有较小流量文件的功能,并可能在处理器仍在处理(大型)结果集时将其发送到下游。对于QueryDatabaseTable,此功能已添加到NiFi 1.6.0中(通过NIFI-4836),而在即将发布的版本中(通过NIFI-1251通过NiFi 1.8.0),该功能也可用于ExecuteSQL。
您应该可以使用GenerateTableFetch做您想要的事情。在那里您可以设置分区大小(最终将成为每个流文件的行数),并且如果您希望每次流文件进入时都获取整个表,则不需要最大值列。您确实按照说明处理了多个表)。 GenerateTableFetch将生成SQL语句以从表中获取数据的“页面”,这将为您提供非常大的表更好的增量性能。