如何在新旧命名空间中使用 avro 数据

How to use avro data with old and new namespace

我在更新 avsc 架构文件中的命名空间时遇到问题。由于我们使用在 Java 中创建的通用处理器将 XML 解析为 avro 并使用 avsc 文件。

我们分离了接口并创建了 2 个不同的命名空间,现在有 2 个相同的 avsc 架构,只是命名空间不同。

由于我们有使用旧命名空间生成的数据,我无法使用新命名空间生成的新数据查询此数据。

这是我的模式示例 -

旧架构 - "type" : "record", "name" : "Message", "namespace" : "com.myfirstavsc", "fields" : [ { "name" : "Header",.....**other fields**

新架构 - "type" : "record", "name" : "Message", "namespace" : "com.mysecondavsc", "fields" : [ { "name" : "Header",.....**other fields**

当我查询我的配置单元时 table 我得到以下异常

Failed with exception java.io.IOException:org.apache.avro.AvroTypeException: Found com.myfirstavsc.Property, expecting union

我不确定您是如何尝试读取数据的,但使用 GenericDatumReader 应该可以解决您的问题,之后您可以将通用记录转换为您的特定记录。我在这里找到了类似的东西

http://apache-avro.679487.n3.nabble.com/Deserialize-with-different-schema-td4032782.html