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

flinkCDC同步Oracle获取到的Int类型值是这样的,怎么进行还原呢?

40322171262ee06910b644a8b8cc0e47.png

展开
收起
爱喝咖啡嘿 2023-01-03 14:34:34 164 0
1 条回答
写回答
取消 提交回答
  • Flink CDC 从 Oracle 读取的 Int 类型值以字节数组的形式存储,这是 Debezium 的默认行为。要还原这些值,你需要将它们转换为 Java int 类型。

    有两种方法可以做到这一点:

    1. 使用 DebeziumDeserializationSchema

    DebeziumDeserializationSchema 提供了一个 deserializeKey() 方法,可以将字节数组反序列化为 Java int:

    DebeziumDeserializationSchema deserializer = ...;

    byte[] keyBytes = ...; // 字节数组表示的 Int 值

    int key = deserializer.deserializeKey(keyBytes, null, null);

    1. 手动反序列化

    你也可以手动将字节数组反序列化为 Int:

    byte[] keyBytes = ...; // 字节数组表示的 Int 值

    int key = ByteBuffer.wrap(keyBytes).getInt();
    示例:

    以下是一个示例,演示如何使用 DebeziumDeserializationSchema 反序列化 Int 值:

    DebeziumJsonDeserializationSchema deserializer = DebeziumJsonDeserializationSchema.forType(MyRecord.class);

    DebeziumDeserializationSchema keyDeserializer = deserializer.getKeyDeserializer();

    byte[] keyBytes = ...; // 字节数组表示的 Int 值

    int key = keyDeserializer.deserializeKey(keyBytes, null, null);
    请注意,如果你的 Int 值以 big-endian 格式存储,你需要根据需要调整反序列化代码。

    2024-02-26 16:56:22
    赞同 展开评论 打赏

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

相关电子书

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

相关镜像