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

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

展开
收起
wenti 2023-01-29 17:29:07 330 分享 版权
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 版(Alibaba Cloud Realtime Compute for Apache Flink,Powered by Ververica)是阿里云基于 Apache Flink 构建的企业级、高性能实时大数据处理系统,由 Apache Flink 创始团队官方出品,拥有全球统一商业化品牌,完全兼容开源 Flink API,提供丰富的企业级增值功能。
还有其他疑问?
咨询AI助理