在NiFi中运行查询数据库处理器时,某些记录会丢失。
我尝试从Oracle DB中提取数据,并且最大列值是创建的日期数据类型的日期。没有附加任何时间戳记(23-JUN-18)。每5分钟触发一次作业以实现近乎实时的摄取时,一些记录会丢失。我不确定是否由于表中不存在时间戳而发生这种情况,或者不确定是否可能是同步问题,例如在查询数据库时是否插入了新记录
答案 0 :(得分:1)
通常,必须以与“最大值列”中的值相称的速率来安排QueryDatabaseTable(QDT)。使用日期类型的最大值列(不带时间戳)意味着您应该每天检查新值(即安排QDT处理器),而不是每5分钟检查一次。否则,处理器将如何知道如何捕获自上次检查以来的当天的行?它仅查看日期,并且(假设)将获取具有该日期值的所有数据,从而导致重复数据,或者(按其实际行为)将查找第二天的值,从而赢得该数据直到第二天才发现,这也导致数据丢失。
可能的解决方法是安排QDT每天运行一次,或者添加/更改列以包括时间戳并相应地安排QDT,或者使用其他列(可能通过DB视图)对于每个新行而言总是增加最大值列。
希望有一天,将有一个Oracle CDC处理器(可能利用LogMiner)来近实时地获取更改,如果更改是,可能会有一种使用QDT和Oracle / LogMiner表来模拟此功能的方法。可以在具有相同质量的表中找到(即,“最大值”列始终会增加到QDT的“运行计划”)。