你好,请教下我数据库里面是decimal类型,用的默认的JsonDebeziumDeserializationSchema,打印出来是这样的,是哪里有问题吗
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
您好,根据您描述的情况,数据库中使用的是decimal
类型字段,在通过默认的JsonDebeziumDeserializationSchema
反序列化后,如果发现数值类型被显示为一堆字符串,这可能是由于Debezium在处理数值类型时的默认行为所致。为了避免这种情况,您需要在Flink CDC配置中对Decimal类型进行特殊处理来确保它们能正确地被解析为期望的数值格式。
解决步骤如下:
修改连接器属性: 您需要在构建MySqlSource
时,通过debeziumProperties
设置特定的属性来控制如何处理decimal
类型。添加以下配置可以将bigint unsigned
和decimal
类型分别处理为Java的long
和double
类型:
Properties properties = new Properties();
properties.setProperty("bigint.unsigned.handling.mode", "long");
properties.setProperty("decimal.handling.mode", "double");
MySqlSource.<String>builder()
.hostname(config.getHostname())
...
.debeziumProperties(properties);
这样配置后,Decimal类型的值在反序列化时会被转换为Double类型,从而避免了以复杂对象形式展示的问题。
注意事项:
double
可能会有精度损失,特别是对于非常大或非常精确的数值。请根据您的业务需求权衡是否接受这种精度上的潜在损失。通过上述配置调整,您可以解决decimal
类型数据在反序列化后显示为非预期字符串格式的问题。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。