我正在学习nifi进程,我试图实现一个场景,在其中我们将同时插入,更新和删除表记录。
我在两个不同的数据库中有两个表。第一数据库中的source_table_2和第二数据库中的target_table_2。以下是带有进程名称的属性沿着:
QueryDatabaseTable
属性
PutSQL
的属性
ConvertAvroToJSON
的属性
ConvertJSONToSQL
的属性
第二个PutSQL进程
的属性
PutDatabaseRecord
的属性
以下是完整的流程图:
Nifi插入和更新流程图第一部分
Nifi插入和更新流程图最后一部分
现在,在运行所有进程之后,每当我转储第一个数据库中的source_table_2表中的记录时,相同的记录会自动转储到第二个数据库中的target_table_2中,但每当我尝试更新任何记录时,它都不起作用。解决这个问题的办法是什么?
1条答案
按热度按时间mrphzbgm1#
抱歉,让我解释。基于documentation of PutDatabaseRecord
如果语句类型为UPDATE或UPSERT,并且未设置更新键的属性,则更新将基于表的主键进行。如果不存在主键,在这种情况下,如果不匹配的列行为设置为FAIL,则到SQL的转换将失败。因此,最好指定表行标识符。更新记录数据流
HashContent处理器和DetectDuplicate以避免任何重复记录仅用于验证
PutDatabaseRecord的配置
第二种方式如下图所示
CONVERTJSONTOSQL处理器的配置如果流文件中的列名与你数据库中的列名不等价那么你需要将translate字段name设置为false,否则为true。在更新键时,我设置了两个id,以显示适用于具有复合键标识符
在PutSQL处理器中,除了连接和关系,你不需要做任何事情。如果在sqlstatement属性中编写更新查询,则将覆盖将由转换处理器创建的查询。
我希望我澄清得很好。