2016-11-04 2 views
0

У меня есть hdfs-каталог, в котором у меня так много файлов. Этот каталог получает непрерывные данные. Теперь я пытаюсь создать внешнюю секционированную таблицу для этого местоположения HDFS, например as,Как указать местоположение HDFS для секционированной таблицы Hive

create external table sensor_data(sensor_name string,alert_type string,isvalid_alert boolean,value string,alert_generated_time bigint) 
partitioned by (mac_id string) 
clustered by(sensor_name) into 13 buckets 
row format delimited 
fields terminated by '|' 
lines terminated by '\n' 
location '/user/test'; 

таблица создается успешно, но при ее выборе ничего не отображается. выберите * from sensor_data где mac_id = 'mac_id2'; выберите * from sensor_data;

Я пробовал эти два пути, что мне не хватает, я не могу понять. Помогите мне.

ответ

1

секционированной таблицы в улей имеет определенную структуру:

На месте таблицы /user/test вы должны иметь папку для каждого раздела:

/user/test/mac_id=1 
/user/test/mac_id=2 
... 

Кроме того, при создании новых папок/разделов - вы необходимо обновить метаданные таблицы, запустив MSCK REPAIR TABLE sensor_data

Обратите внимание, что данные должны иметь определяемые разделители.

Кроме того, поскольку ваша таблица сгруппирована, вам нужны данные, которые нужно кластеризовать.

Я бы предложил сначала вставить данные в эту таблицу, используя hive's INSERT INTO TABLE, чтобы увидеть правильный формат данных.

Смежные вопросы