多个Avro文件的蜂巢表?

时间:2016-02-23 16:46:57

标签: hadoop hive avro

我在HDFS目录中有数千个Avro文件,格式为yyyy / mm / dd /。在每个目录中,可能有200-400个.avro文件,其中包含当天的数据。

当我创建一个EXTERNAL表时,我认为LOCATION属性假设一个文件...有没有办法将它指向文件目录并让它读取所有文件?

2 个答案:

答案 0 :(得分:0)

确保在构建表时指定分区。然后使用alter table并根据需要添加parititons,如下所示:

create external table mydatabase.NEW_TABLE
partitioned by (date string)
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.literal'='{
"name": "my_record",
"type": "record",
"fields": [
   {"name":"boolean1", "type":"boolean"},
   {"name":"int1", "type":"int"},
   {"name":"long1", "type":"long"},
   {"name":"float1", "type":"float"},
   {"name":"double1", "type":"double"},
   {"name":"string1", "type":"string"},
   {"name": "nullable_int", "type": ["int", "null"]]}');
alter table mydatabase.NEW_TABLE add partition (date='20150304') location '/path/to/somefiles/20150304;
alter table mydatabase.NEW_TABLE add partition (date='20150305') location '/path/to/somefiles/20150305;
alter table mydatabase.NEW_TABLE add partition (date='20150306') location '/path/to/somefiles/20150306;

您可以根据需要添加任意数量的parititions。我建议您将此表格设置为外部,以便在出错时不要将数据丢弃在分区中。

答案 1 :(得分:0)

直接来自Hive documentation

hive.mapred.supports.subdirectories
  Default Value: false
  Added In: Hive 0.10.0 with HIVE-3276
  

正在运行的Hadoop版本是否支持   表/分区的子目录。许多Hive优化都可以   如果Hadoop版本支持子目录,则应用   表/分区。 MAPREDUCE-1501增加了这种支持。

反过来,可以使用mapred.input.dir.recursive切换Hadoop功能。

参考: that post(以及其他)