Hive запрос не читает поле раздела - PullRequest
0 голосов
/ 03 декабря 2018

Я создал секционированную таблицу 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 Ответ

0 голосов
/ 03 декабря 2018

Вам нужно запустить 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.

...