根据Hologres Sink的配置和Hologres表的属性,流式语义分为以下两种:
在Hologres结果表中使用流式语义,您需要注意以下几点:
如果Hologres物理表未设置主键,则Hologres Sink使用At-least-once语义。
如果Hologres物理表已设置主键,则Hologres Sink通过主键确保Exactly-once语义。当同主键数据出现多次时,您需要设置mutatetype参数确定更新结果表的方式,mutatetype取值如下:
insertorignore(默认值):保留首次出现的数据,忽略后续所有数据。
insertorreplace:保留首次出现的数据,整行替换已有数据。
insertorupdate:保留首次出现的数据,更新已有数据的部分列。例如一张表有a、b、c和d四个字段,a是PK(Primary Key),写入Hologres时只写入a和b两个字段,在PK重复的情况下,系统只会更新b字段,c和d保持不变。
说明:
当mutatetype设置为insertorupdate或insertorreplace时,系统根据主键更新数据。
Flink定义的结果表中的数据列数不一定要和Hologres物理表的列数一致,您需要保证缺失的列没有非空约束,即列值可以为Null,否则会报错。