我们有一个json结构,需要在impala/hive中解析和使用它。由于json结构正在演变,我们认为可以使用avro。
我们计划解析json并将其格式化为avro。
avro格式的数据可以由impala直接使用。假设我们将它存储在hdfs目录/user/hdfs/person\u data中/
我们将继续把avro序列化的数据放在那个文件夹中,我们将逐个解析输入json。
假设,我们有一个个人的avro模式文件(hdfs://user/hdfs/avro/scheams/person.avsc)就像
{
"type": "record",
"namespace": "avro",
"name": "PersonInfo",
"fields": [
{ "name": "first", "type": "string" },
{ "name": "last", "type": "string" },
{ "name": "age", "type": "int" }
]
}
为此,我们将通过创建外部表在配置单元中创建表-
CREATE TABLE kst
ROW FORMAT SERDE
'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
TBLPROPERTIES (
'avro.schema.url'='hdfs://user/hdfs/avro/scheams/person.avsc');
假设明天我们需要改变这个模式(hdfs://user/hdfs/avro/scheams/person.avsc)至-
{
"type": "record",
"namespace": "avro",
"name": "PersonInfo",
"fields": [
{ "name": "first", "type": "string" },
{ "name": "last", "type": "string" },
{ "name": "age", "type": "int" },
{ "name": "city", "type": "string" }
]
}
我们是否可以继续将新的序列化数据放在同一hdfs目录/user/hdfs/person\u data/中,并且impala/hive仍然可以通过将city列作为空值旧记录来工作?
1条答案
按热度按时间pnwntuvh1#
可以,但对于所有新列,应指定默认值:
或将其标记为可空: