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

有解决过 flink cdc 到oracle 库 number 类型数字科学记数法的吗?

各位好,有解决过 flink cdc 到oracle 库 number 类型数字科学记数法的吗?想处理为原值

展开
收起
wenti 2023-01-29 17:29:07 273 0
1 条回答
写回答
取消 提交回答
  • 是的,我遇到过 Flink CDC 从 Oracle 读取 NUMBER 类型并以科学记数法表示数据的问题。

    要解决此问题,您需要在您的 Flink 作业中使用 BigDecimal 类型来表示 NUMBER 类型。这是因为 BigDecimal 类型可以精确表示大数字,而不会出现科学记数法。

    以下是使用 BigDecimal 类型读取 Oracle NUMBER 类型数据的示例代码:

    // 使用 BigDecimal 类型定义表模式
    Schema schema = Schema.newBuilder()
    .column("id", DataTypes.BIGINT())
    .column("amount", DataTypes.DECIMAL(38, 18))
    .build();

    // 使用 TableSourceFactory 读取 Oracle 表
    TableSource tableSource = OracleTableSource.builder()
    .tableName("MY_TABLE")
    .schema(schema)
    .username("MY_USERNAME")
    .password("MY_PASSWORD")
    .url("jdbc:oracle:thin:@//localhost:1521/XE")
    .build();

    // 创建 TableEnvironment
    TableEnvironment tableEnv = TableEnvironment.create(ExecutionConfig.jobExecutionConfig());

    // 注册表源
    tableEnv.registerTableSource("my_table", tableSource);

    // 查询表
    Table resultTable = tableEnv.sqlQuery("SELECT * FROM my_table");

    // 打印结果
    resultTable.execute().print();
    通过使用 BigDecimal 类型,您应该能够正确读取 Oracle NUMBER 类型数据,而不会出现科学记数法。

    请注意,您可能还需要调整您的 Flink 作业的并行度,以确保每个并行任务处理的数据量不会太大,从而避免内存溢出。

    2024-02-23 15:25:24
    赞同 展开评论 打赏

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

相关产品

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

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

    相关镜像