我遇到了一个问题,我在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**
当我查询我的hive表时,我得到了异常
Failed with exception java.io.IOException:org.apache.avro.AvroTypeException: Found com.myfirstavsc.Property, expecting union
答案 0 :(得分:1)
我不确定您是如何尝试读取数据的,但使用GenericDatumReader可以解决您的问题,之后您可以将通用记录转换为您的特定记录。我发现了类似的东西
http://apache-avro.679487.n3.nabble.com/Deserialize-with-different-schema-td4032782.html