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

40322171262ee06910b644a8b8cc0e47.png

展开
收起
爱喝咖啡嘿 2023-01-03 14:34:34 174 分享 版权
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 集群和引擎,提高作业开发运维效率。

收录在圈子:
实时计算 Flink 版(Alibaba Cloud Realtime Compute for Apache Flink,Powered by Ververica)是阿里云基于 Apache Flink 构建的企业级、高性能实时大数据处理系统,由 Apache Flink 创始团队官方出品,拥有全球统一商业化品牌,完全兼容开源 Flink API,提供丰富的企业级增值功能。
还有其他疑问?
咨询AI助理