Hadoop 如何处理HIV/AVRO模式演化,在现有字段的中间添加新字段?

Hadoop 如何处理HIV/AVRO模式演化,在现有字段的中间添加新字段?,hadoop,hive,avro,Hadoop,Hive,Avro,我被告知,Hive能够处理向avro模式添加新字段的唯一方法是在现有字段的末尾添加新字段。目前,我们的avro是按字母顺序生成的,因此新字段可能会显示在字段列表的其他位置 那么,Hive能处理这个吗?我对Hive几乎一无所知,但我可以从avro中看到如何添加新字段,但我似乎找不到任何关于添加字段的位置是否影响Hive处理它们的能力的信息 作为示例,请参见下文如何将新架构处理到配置单元中?: 原始模式 { "type":"record","name":"user", "fields":[

我被告知,Hive能够处理向
avro
模式添加新字段的唯一方法是在现有字段的末尾添加新字段。目前,我们的
avro
是按字母顺序生成的,因此新字段可能会显示在字段列表的其他位置

那么,Hive能处理这个吗?我对Hive几乎一无所知,但我可以从
avro
中看到如何添加新字段,但我似乎找不到任何关于添加字段的位置是否影响Hive处理它们的能力的信息

作为示例,请参见下文如何将新架构处理到配置单元中?

原始模式

{
"type":"record","name":"user",
   "fields":[
       {"name":"bday","type":"string"},
       {"name":"id","type":"long"},
       {"name":"name","type":"string"}
   ]
}
新架构(按字母顺序添加字段)


它是受支持的。您必须注意为新字段添加默认值,以便能够读取使用旧模式写入的数据

是的,Hive可以处理这个问题,因为这是Avro的方式:

如果两者都是记录: 字段的顺序可能不同:字段按名称匹配


这是可能的,因为所有Avro文件还包括一个用于写入数据的模式,即writer的模式。 因此,当您更改配置单元中的模式时(例如,通过修改
avro.schema.url
基础文件),您将更改读取器的模式。但所有现有文件及其编写者的模式都保持不变


是的,对于所有添加的新字段,无论字段顺序如何,都必须提供默认值(使用
“default”:…
)。否则,读卡器(配置单元)将无法解析使用原始架构编写的文件。

您可以在此基础上展开一些吗?这将如何实现?您是否有任何示例或文档来支持这一点?谢谢,谢谢你的回答。我们最终不得不添加默认值,以便我们的客户机能够支持我们的文件。
{
"type":"record","name":"user",
   "fields":[
       {"name":"bday","type":"string"},
       {"name":"id","type":"long"},
       {"name":"gender","type":"string"},
       {"name":"name","type":"string"}
   ]
}