是否有可能在Hive中创建一个基于Avro文件的外部表,并为目录分区添加列:
假设数据存储在/data/demo/dt=2016-02-01
中,以此类推。然后我尝试了以下操作,但当我从表中选择时,我得到0行:
CREATE EXTERNAL TABLE demo
PARTITIONED BY (date STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
STORED AS AVRO
LOCATION '/data/demo/'
TBLPROPERTIES ('avro.schema.url' = 'hdfs:///path/to/schema.avsc');
我尝试没有PARTITIONED BY
子句,然后我得到记录,但显然没有key=value
目录分区。这有可能吗?
由于分区名称在您的情况下是dt
,而不是date
,因此您必须使用PARTITIONED BY (dt string)
,然后您仍然需要将分区添加到metastore:
ALTER TABLE demo ADD PARTITION (dt='2016-02-01')
如果你有几个分区,你可以修复表,它会自动添加它们:
msck repair table demo