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.