我正在使用confluent-3.0.1,并希望尝试avro模式的演化,但是在尝试与hive的向后兼容性时似乎出现了一些问题。
首先我声明了这个模式,查询了hive并得到了数据。
public static final String USER_SCHEMA = "{" +
" \"namespace\": \"example.avro\",\n" +
" \"type\": \"record\",\n" +
" \"name\": \"user\",\n" +
" \"fields\": [\n" +
" {\"name\": \"name\", \"type\": \"string\"},\n" +
" {\"name\": \"now\", \"type\": \"long\"},\n" +
" {\"name\": \"favorite_number\", \"type\": \"int\"}" +
" ]\n" +
"}";
然后我在模式中添加了新的可选字段“a”
public static final String USER_SCHEMA = "{" +
" \"namespace\": \"example.avro\",\n" +
" \"type\": \"record\",\n" +
" \"name\": \"user\",\n" +
" \"fields\": [\n" +
" {\"name\": \"name\", \"type\": \"string\"},\n" +
" {\"name\": \"now\", \"type\": \"long\"},\n" +
" {\"name\": \"favorite_number\", \"type\": \"int\"}" +
" ,\n{\"name\": \"a\", \"type\": [\"null\",\"string\"], \"default\": null}" +
" ]\n" +
"}";
但当我查询hive时,我得到了一个例外:
“失败,出现异常java.io.ioexception:org.apache.avro.avrotypeexception:找到example.avro.user,应为example.avro.user,缺少必填字段a“
我认为这是由于第一行没有新字段造成的(在hadoop中,所有的代码看起来都很好)。
它似乎只有空值才有问题,因为如果我将此字段添加到架构中,我会在添加新字段后设法查询配置单元。
public static final String USER_SCHEMA = "{" +
" \"namespace\": \"example.avro\",\n" +
" \"type\": \"record\",\n" +
" \"name\": \"user\",\n" +
" \"fields\": [\n" +
" {\"name\": \"name\", \"type\": \"string\"},\n" +
" {\"name\": \"now\", \"type\": \"long\"},\n" +
" {\"name\": \"favorite_number\", \"type\": \"int\"}" +
" ,\n{\"name\": \"favorite_color\", \"type\": \"string\", \"default\": \"green\"}" +
" ]\n" +
"}";
你知道有什么问题吗?
谢谢!
暂无答案!
目前还没有任何答案,快来回答吧!