2015-03-05 2 views
0

Я хочу создать таблицу разделов hive с 2 разделами. Один со счетом менее 300, а другие больше, чем 300.Перегородка куста с условием реляционного оператора

create table parttab(id int,name string) partitioned by (score int) row format delimited fields terminated by '\t' stored as textfile; 

load data local inpath '/data/hive/input' into table newtab partition (score<300); 

load data local inpath '/data/hive/newinput' into table newtab partition (score>300); 

Но, операторы данных нагрузок дают ошибку из-за «>» и «<» символов. Итак, как создать разделы для этого сценария?

Причина, по которой я даю этот путь, заключается в том, что при запросе выберите * из parttab, где счет < 300; легко ..

Если я дам какое-то название для этого раздела for.eg:

load data local inpath '/data/hive/input' into table newtab partition (score='lessthan300'); 

затем, при запросе, я должен буду помнить имя перегородок !! :(

select * from parttab where score='lessthan300'; 

Это не звучит хорошо! Так что, есть лучший способ разделить его в элегантный способ?

ответ

0

ульев разделов карты для конкретных значений. Если у вас есть только два раздела, то имеющие конкретные значения для этих двух диапазонов не являются плохим компромиссом.

0

В этом разделе отсутствует идентификатор раздела < или>. Также куст не хранит столбец разделов в базовых данных, а только хранится в имени папки раздела Если вы каким-то образом справитесь с достижением указанного раздела с помощью < или> Это приведет к данным потери для поля SCORE, так как вы не сможете вернуть фактическое значение SCORE для каждой записи. Предложенный подход будет вести счет как и создать новый столбец специально для раздела, который имеет значение «NEW» или «OLD» основан на требовании и вывести это значение столбца на основе бальной колонки

like if(score<300) then PART = "OLD" else PART = "NEW" 
Смежные вопросы