NIFI-QueryDatabaseTable处理器。如何查询被修改的行?

时间:2019-02-18 11:07:50

标签: mysql apache-nifi

我正在使用NIFI数据流,其中我的用例是获取mysql表数据并放入hdfs /本地文件系统中。

我已经建立了一个数据流管道,其中我使用了querydatabaseTable处理器------ ConvertRecord --- putFile处理器。

我的表格架构---> id,名称,城市,创建日期

即使我在表中插入新记录,我也可以接收目标文件

但是,但是....

当我更新现有行时,处理器似乎无法获取这些记录。

我的问题是,如何处理这种情况?通过其他任何处理器或需要更新某些属性。

请别人帮忙 @Bryan Bende enter image description here

1 个答案:

答案 0 :(得分:1)

需要告知

QueryDatabaseTable Processor,它可以使用哪些列来标识新数据。

串行idcreated时间戳是不够的。

From the documentation:

最大值列:

  

以逗号分隔的列名列表。自处理器开始运行以来,处理器将跟踪已返回的每一列的最大值。使用多列意味着列列表的顺序,并且期望每列的值增加的速度比前一列的值慢。因此,使用多个列意味着列的层次结构,通常用于分区表。该处理器只能用于检索自上次检索以来已添加/更新的那些行。请注意,某些JDBC类型(例如bit / boolean)不利于保持最大值,因此这些类型的列不应在此属性中列出,并且会在处理过程中导致错误。如果未提供任何列,则将考虑表中的所有行,这可能会对性能产生影响。注意:为给定的表使用一致的最大值列名称很重要,这样增量获取才能正常工作。

从表方案来看,没有SQL方式可以判断数据是否已更新。

有很多方法可以解决此问题。对于您而言,最简单的操作可能是将列created重命名为modified并在更新时设置为 now() 或使用第二个时间戳列。

例如

| stamp_updated | timestamp | CURRENT_TIMESTAMP   | on update CURRENT_TIMESTAMP |

是添加的新列。在处理器中,您使用stamp_updated列来标识新数据 processor properties

不要忘记为这些列设置Maximum-value Columns

所以我基本上要说的是:

  

如果您自己不能确定它是sql中的新记录,nifi也不会。