如何解决NiFi-获取记录ID作为外键插入
我有一个数据源,其中的表用户有name
,age
和role
列。现在,我需要从中创建两个表,并将它们放入新的数据库中。表为user
和role
。因此,首先我将数据转储到user
表中,对于role
列,我需要插入role
表中并将该ID
放在{ {1}}表。对于每条记录,我都必须这样做。检查角色记录是否已经存在,如果是,则返回role
或创建新记录并返回插入的user
。
样本源数据:
ID
预期的输出数据:
- 用户表:
ID
- 角色表:
Name,age,role
David,35,admin
Tay,23,user
John,27,user
请帮助我使用NiFi实现这一目标
解决方法
尝试LookupRecord
和SimpleDatabaseLookupService
。该服务将配置为查找role
列并返回id
值(或Role表中调用的任何列)。对于LookupRecord
,将Routing Strategy
设置为Route to 'matched' or 'unmatched'
。
对于输入中的每个记录,如果在表中找到该角色,则这些记录将被路由到matched
关系,并且输出FlowFile应该准备好供PutDatabaseRecord
放入用户表。如果在表中找不到该角色,则这些记录将被路由到unmatched
关系。
对于不匹配的记录,您可以复制流文件,通过Wait
处理器发送一个文件,然后将其连接回LookupRecord
处理器,另一个通过QueryRecord
发送查询SELECT DISTINCT(role) AS role FROM FLOWFILE
之类的东西。这应该为您提供一个FlowFile,您可以将其发送到PutDatabaseRecord
以插入到Role表中(假设您具有自动递增的id
列)。然后,您可以将其发送到Notify
处理器以将原始FlowFile释放回LookupRecord
。此时,查找应在“角色”表中找到该角色,并将所有记录路由到matched
关系。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。