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