汇合Kafka-java.io.ioexception:org.apache.avro.avrotypeexception: ... 缺少必填字段

nxowjjhe  于 2021-06-28  发布在  Hive
关注(0)|答案(0)|浏览(156)

我正在使用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" +
        "}";

你知道有什么问题吗?
谢谢!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题