Hive запрос не читает поле раздела

Я создал секционированную таблицу Hive, используя следующий запрос

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')

Я пишу в разделенное местоположение, используя программу уменьшения карты. когда я читаю выходные файлы с помощью инструментов avro, он показывает правильные данные в формате json. Но когда я использую запрос улья для отображения данных, ничего не отображается. Если я не использую поле раздела при создании таблицы, то значения отображаются в кусте. в чем может быть причина этого? Я указываю выходное местоположение для программы mapreduce как "/user/customer/update_period=201811".

Нужно ли что-нибудь добавить в конфигурацию программы mapreduce для решения этой проблемы?

1 ответ

Решение

Вам нужно бежать msck repair table как только вы загрузили новый раздел в папку HDFS.

Почему мы должны запускать команду msck Repair table каждый раз после каждого приема?

Hive хранит список разделов для каждой таблицы в своем метастазе. Однако новые разделы добавляются непосредственно в HDFS, метасредство (и, следовательно, Hive) не будет знать об этих разделах, если пользователь не воспользуется одним из приведенных ниже способов добавления новых добавленных разделов.

1. Добавление каждого раздела в таблицу

hive> alter table <db_name>.<table_name> add partition(`date`='<date_value>')
 location '<hdfs_location_of the specific partition>';

(или же)

2.Запрос метасторской проверки с опцией ремонта таблицы

hive> Msck repair table <db_name>.<table_name>;

который добавит метаданные о разделах в метасторье Hive для разделов, для которых такие метаданные еще не существуют. Другими словами, он добавит любые разделы, которые существуют в HDFS, но не находятся в metastore, в metastore.

Другие вопросы по тегам