使用场景:
kafka consumer
JSON 里的update 操作只带需要的列,非全部列,consumer 遇
到这种情况,会先根据JSON 里的主键去8A 库里查询这一行的所有列的值,然
后把要更新的列替换为新值,再根据主键执行delete,最后insert 一行。
宽松模式下consumer 对数据操作的支持情况:
1.
宽松模式设置,下面两个参数均设置为0 后,开启宽松模式:
_t_gcluster_kafka_consumer_force_compare_field 设置为0
该参数默认值为1,
代表打开,
consumer 会对每个json 消息都严格比对字段名称、
字段顺序,最大程度的确保源端数据库没有发生DDL。
_t_gcluster_kafka_consumer_compare_field_only_once 设置为0
该参数默认值为0,设置为1 代表打开,打开时表示让consumer 只在第一次遇到
t 表的json 消息时,对字段名称和顺序进行严格比对,比对通过后就不再比对,
直接按最早的JSON 解析,此时会用到一些优化手段。能够保证源端数据库不会
做DDL 操作时可以考虑打开,一般不建议打开。
2.
宽松模式下consumer 对字段名称和顺序的要求如下:
条件1:字段名称必须大写;
条件2:允许关于t 表的任何一个JSON 消息,只要每个字段都属于目标表(允许
字段名称和顺序变化)。如:
目标表:t (A not null, B not null, C default 2, D default null)
JSON_1: insert into t (A, C, B)
OK
JSON_2: insert into t (A, B, C)
OK
JSON_3: insert into t (A, B)
OK
GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
1283
JSON_4: insert into t (B, C)
解析OK,入库报错。
t 建表指定了A 列不允许为空,需要用户自己保证。JSON_4 等同于insert into
t(A,B,C) values(NULL,xx,xx)
条件3:条件2 中缺少的字段,建表时应该指定default 属性,否则入库阶段可能
出错,这个由用户自己保证。
3.
宽松模式下consumer 对DDL 支持不变:
consumer 不支持除truncate 外其他DDL 的同步
说明
以前版本非宽松模式下支持情况说明
1、字段名称必须大写
2、允许关于t 表的第一个JSON 消息中,不给出所有字段,也允许字段顺序
与8a 不一致,但是后面的消息也都必须保持这样,否则报错。
3、条件2 中缺少的字段,建表时应该指定default 属性,否则入库阶段可能出
错。这个由用户自己保证。