如何使用旧的和新的命名空间的avro数据

时间:2017-08-04 21:35:23

标签: namespaces avro avsc

我遇到了一个问题,我在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

1 个答案:

答案 0 :(得分:1)

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

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