开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

Flink CDC中如果MySQL 字段设置了默认值,字段值为空时,捕获到的变更数据为默认值??

这个问题我在本地复现是偶现问题,字段值为空时,捕获的值有时候是默认值,有时候又是空。

这个问题困扰我几天了,社区里也没找到完整可行的方案:
目前看到两种解决方法,描述不太清楚看不明白。期待大佬指导下。
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

展开
收起
边境的小盗贼 2024-12-28 17:21:12 29 0
1 条回答
写回答
取消 提交回答
  • 已找到解决版本
    可以对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;
    }
    
    2024-12-30 10:56:34
    赞同 53 展开评论 打赏

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关产品

  • 实时计算 Flink版
  • 相关电子书

    更多
    Flink CDC Meetup PPT - 龚中强 立即下载
    Flink CDC Meetup PPT - 王赫 立即下载
    Flink CDC Meetup PPT - 覃立辉 立即下载

    相关镜像