这个问题我在本地复现是偶现问题,字段值为空时,捕获的值有时候是默认值,有时候又是空。
这个问题困扰我几天了,社区里也没找到完整可行的方案:
目前看到两种解决方法,描述不太清楚看不明白。期待大佬指导下。
1、
回答:这个之前也有其他人反馈过,我是重写了SchemaBuilder,默认值直接指定为null,此回答整理自钉群“Flink CDC 社区”
2023-11-16 08:43:19
链接:https://developer.aliyun.com/ask/570707?spm=a2c6h.14164896.0.0.19db47c5gerQN7&scm=20140722.S_community@@%E9%97%AE%E7%AD%94@@570707._.ID_570707-RL_flink~DAS~mysql%E9%BB%98%E8%AE%A4%E5%80%BC-LOC_search~UND~community~UND~item-OR_ser-V_4-P0_3
2、
回答:将 connect-json 版本升级到 3.5,并且配置 JsonConverterConfig.REPLACE_NULL_WITH_DEFAULT_CONFIG 为 false 即可。。此回答整理自钉钉群“Flink CDC 社区 ① 群”
2024-08-28 11:38:45
链接:https://developer.aliyun.com/ask/683920?spm=a2c6h.13066369.ask_relateask.d_ask_relateask_3.608928bfYTNu8R&scm=20140722.ID_community@@ask@@683920._.ID_community@@ask@@683920-OR_rec-V_1-RL_community@@ask@@659815
已找到解决版本
可以对cdc的数据自己转换格式
Struct 类提供了 getWithoutDefault(String fieldName)函数,可以获取原始值。
public Object getWithoutDefault(String fieldName) {
Field field = lookupField(fieldName);
return values[field.index()];
}
我之前一直用的get(Field field)函数,原始值为空会使用默认值。
public Object get(Field field) {
Object val = values[field.index()];
if (val == null && field.schema().defaultValue() != null) {
val = field.schema().defaultValue();
}
return val;
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。