flink cdc中oracle NUMBER 未指定(p,s) flinkcdc 读出来的数据是 {"scale":0,"value":"KQ=="},什么原因?如果使用sql 方式写进去的字段就变成Struct{scale=0,value=[B@75205b7e}。
在 Flink CDC 中使用 Oracle Connector 读取 Oracle 数据库时,如果 Oracle 表中的 NUMBER 类型未指定精度和小数位数,Flink CDC 默认会将其解析为 BigDecimal 类型。这是因为 Oracle 数据库中的 NUMBER 类型可以存储整数和小数,但如果未指定精度和小数位数,则 Oracle Connector 无法确定其具体类型,因此会将其解析为 BigDecimal 类型。
如果需要将 Oracle 表中的 NUMBER 类型解析为其他类型,可以在 Flink CDC 的 Oracle Connector 配置中指定数据类型映射。例如,可以在 Oracle Connector 配置中添加以下配置项,将 NUMBER 类型解析为 Double 类型:
Copy
"debezium.source.field.schema.include": ".*",
"debezium.source.field.schema.exclude": "TABLE_NAME\.COLUMN_NAME",
"debezium.source.column.type.overrides": "TABLE_NAME.COLUMN_NAME=DOUBLE"
在上述配置中,TABLE_NAME.COLUMN_NAME 表示要指定数据类型映射的列名,DOUBLE 表示要解析的数据类型。
需要注意的是,如果 Oracle 表中的 NUMBER 类型指定了精度和小数位数,则 Oracle Connector 会将其解析为对应的类型,例如 BigDecimal、Long 或 Double 等
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。