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

flink cdc中oracle NUMBER 未指定则读出来是这个什么原因?

flink cdc中oracle NUMBER 未指定(p,s) flinkcdc 读出来的数据是 {"scale":0,"value":"KQ=="},什么原因?如果使用sql 方式写进去的字段就变成Struct{scale=0,value=[B@75205b7e}。

展开
收起
十一0204 2023-07-19 17:35:53 133 0
1 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    在 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 等

    2023-07-29 20:00:37
    赞同 展开评论 打赏

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

相关产品

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

    更多
    PostgresChina2018_樊文凯_ORACLE数据库和应用异构迁移最佳实践 立即下载
    PostgresChina2018_王帅_从Oracle到PostgreSQL的数据迁移 立即下载
    Oracle云上最佳实践 立即下载

    相关镜像