如何在新旧命名空间中使用 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
我在更新 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