可以看到 这个 PutDatabaseRecordMerge是 没有版本号的,是我自己开发的控件。
因为系统提供的这个PutDatabaseRecord 只有insert、update、delete之类的处理,没有 merge into 这个方式的处理。
因此就只能自己开发这个控件了。写篇文章记录下 遇到的问题
<!-- 必须要有这个,不然 这个控件就不会有 注入新服务,例如 数据库连接之类的配置了-->
<dependency>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-standard-services-api-nar</artifactId>
<version>${nifi.version}</version>
<type>nar</type>
</dependency>
其次,因为要复写PutDatabaseRecord,要引入 PutDatabaseRecord所在的jar
<dependency>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-standard-processors</artifactId>
<version>${nifi.version}</version>
<scope>provided</scope>
</dependency>
这里的scope必须是provided,不然 再nifi上会出现两个 PutDatabaseRecord,其中一个是没有版本号的,另外一个是系统提供的。
最后自然是编写代码了,下图就是 关键代码,引入了 merge into的操作
分享下效果图:
可以看到 利用了 merge into 这种 sql操作进行数据写入了