我被告知,Hive能够处理向avro
模式添加新字段的唯一方法是在现有字段的末尾添加新字段。目前我们的avro
代是按字母顺序排列的,因此新字段可以显示在字段列表的其他位置。
那么,Hive可以处理这个吗?我对Hive几乎一无所知,但我可以看到there are good explanations如何从avro
添加新字段,但我似乎无法找到有关添加字段位置是否影响的任何信息Hive处理它们的能力。
举个例子,见下文。 如何将新架构处理成Hive?:
原始架构
{
"type":"record","name":"user",
"fields":[
{"name":"bday","type":"string"},
{"name":"id","type":"long"},
{"name":"name","type":"string"}
]
}
新架构(按字母顺序添加字段)
{
"type":"record","name":"user",
"fields":[
{"name":"bday","type":"string"},
{"name":"id","type":"long"},
{"name":"gender","type":"string"},
{"name":"name","type":"string"}
]
}
答案 0 :(得分:1)
支持。您必须注意为新字段添加默认值,以便能够读取使用旧架构编写的数据。
答案 1 :(得分:1)
是的,Hive可以解决这个问题,因为这是Avro works:
的方式如果两者都是记录: 字段的顺序可能不同:字段按名称匹配
这是可能的,因为所有Avro文件还包括用于写入数据的模式, writer的模式。
因此,当您在Hive中更改架构时(例如,通过修改avro.schema.url
基础文件),您可以更改读者的架构。但是所有现有文件及其作者的模式都保持不变。
是的,对于添加的所有新字段,无论字段顺序如何,都必须提供默认值(使用"default":...
)。否则,阅读器(Hive)将无法解析用原始模式编写的文件。