Hadoop 配置单元查询未读取分区字段
我使用以下查询创建了一个分区配置单元表Hadoop 配置单元查询未读取分区字段,hadoop,hive,mapreduce,avro,hadoop-partitioning,Hadoop,Hive,Mapreduce,Avro,Hadoop Partitioning,我使用以下查询创建了一个分区配置单元表 CREATE EXTERNAL TABLE `customer`( `cid` string COMMENT '', `member` string COMMENT '', `account` string COMMENT '') PARTITIONED BY (update_period string) ROW FORMAT SERDE
CREATE EXTERNAL TABLE `customer`(
`cid` string COMMENT '',
`member` string COMMENT '',
`account` string COMMENT '')
PARTITIONED BY (update_period 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'
LOCATION
'hdfs://nameservice1/user/customer'
TBLPROPERTIES (
'avro.schema.url'='/user/schema/Customer.avsc')
我正在使用map reduce程序写入分区位置。当我使用avro工具读取输出文件时,它以json格式显示正确的数据。但是当我使用配置单元查询来显示数据时,什么也不显示。如果我在表创建期间不使用分区字段,那么这些值将显示在配置单元中。这可能是什么原因?我将mapreduce程序的输出位置指定为“/user/customer/update\u period=201811”
我是否需要在mapreduce程序配置中添加任何内容来解决此问题 在HDFS位置加载新分区后,需要运行msck修复表 为什么每次摄入后都需要运行msck修复表语句? 配置单元在其元存储中存储每个表的分区列表。但是,新分区直接添加到HDFS,除非用户运行以下任一方法来添加新添加的分区,否则元存储(以及因此而产生的配置单元)将不知道这些分区 1.将每个分区添加到表中
hive>altertable。添加分区(`date`='')
位置“”;
(或)
2.使用修复表选项运行元存储检查
hive>Msck修复表。;
这将为尚未存在此类元数据的分区向配置单元元存储区添加有关分区的元数据。换句话说,它将把存在于HDFS上但不在metastore中的任何分区添加到metastore中
hive> alter table <db_name>.<table_name> add partition(`date`='<date_value>')
location '<hdfs_location_of the specific partition>';
hive> Msck repair table <db_name>.<table_name>;