Hadoop 多个Avro文件的配置单元表?

Hadoop 多个Avro文件的配置单元表?,hadoop,hive,avro,Hadoop,Hive,Avro,我在HDFS目录中有数千个Avro文件,格式为yyyy/mm/dd/。在这些目录中,每个目录中可能有200-400个.avro文件,其中包含当天的数据 当我创建一个外部表时,我认为LOCATION属性假定一个文件。。。有没有办法将它指向一个文件目录并让它读取所有文件?请确保在构建表时指定一个分区。然后使用alter表格并根据需要添加配对,如下所示: create external table mydatabase.NEW_TABLE partitioned by (date string) ro

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


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

请确保在构建表时指定一个分区。然后使用alter表格并根据需要添加配对,如下所示:

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;
您可以根据需要添加任意多个部分。我建议您将此表设置为外部表,以便在出错时不会将数据放在分区中。

直接从:

正在运行的Hadoop版本是否支持 表/分区的子目录。许多配置单元优化都可以实现 如果Hadoop版本支持子目录,则应用 表/分区。此支持由MAPREDUCE-1501添加

反过来,Hadoop特性可以通过
mapred.input.dir.recursive
进行切换


参考:(除其他外)

位置
,如果设置为目录,将读取目录中的所有文件。包括子目录?如果您也想处理子目录,您将希望查看动态分区,假设您愿意每天都是分区,并且每天的文件夹中没有数据目录。
hive.mapred.supports.subdirectories
  Default Value: false
  Added In: Hive 0.10.0 with HIVE-3276