2015-10-15 3 views
0

Это мой сценарий:улей, Bucketing для секционированной таблицы

--table without partition 

drop table if exists ufodata; 
create table ufodata (sighted string, reported string, city string, shape string, duration string, description string) 
row format delimited 
fields terminated by '\t' 
Location '/mapreduce/hive/ufo'; 

--load my data in ufodata 

load data local inpath '/home/training/downloads/ufo_awesome.tsv' into table ufodata; 

--create partition table 
drop table if exists partufo; 
create table partufo (sighted string, reported string, city string, shape string, duration string, description string) 
partitioned by (year string) 
clustered by (year) into 6 buckets 
row format delimited 
fields terminated by '/t'; 

--by default dynamic partition is not set 
set hive.exec.dynamic.partition=true; 
set hive.exec.dynamic.partition.mode=nonstrict; 
--by default bucketing is false 
set hive.enforcebucketing=true; 

--loading mydata 
insert overwrite table partufo 
partition (year) 
select sighted, reported, city, shape, min, description, SUBSTR(TRIM(sighted), 1,4) from ufodata; 

Сообщение об ошибке:

FAILED: Ошибка при семантическом анализе: Недопустимая ссылка на столбец

Я попытался bucketing для моей секционированной таблицы. Если я удалю «сгруппированные по (году) в 6 кодов», сценарий отлично работает. Как вешать секционированную таблицу

ответ

0

Вы можете использовать следующий синтаксис для создания таблицы bucketing с разделом.

CREATE TABLE bckt_movies 
(mov_id BIGINT , mov_name STRING ,prod_studio STRING, col_world DOUBLE , col_us_canada DOUBLE , col_uk DOUBLE , col_aus DOUBLE) 
PARTITIONED BY (rel_year STRING) 
CLUSTERED BY(mov_id) INTO 6 BUCKETS; 
+0

Синтаксис Puneeth также почти такой же ... – madhu

+0

Что случилось с этим скриптом? Могу ли я создать bucketing на секционированной таблице? Сценарий: gist.github.com/puneethbs/207dc89530c26c05ed02 Сообщение об ошибке: gist.github.com/puneethbs/3dcdebb4075275bbf62b – Puneeth

0

Важная вещь, которую мы должны учитывать при выполнении bucketing в улье.

То же имя столбца не может использоваться как для балансировки, так и для разбиения. Причина в следующем:

Кластеризация и сортировка происходят в разделе. Внутри каждого раздела будет только одно значение, связанное с столбцом раздела (в вашем случае это год), поэтому не будет никакого влияния на кластеризацию и сортировку. Вот почему ваша ошибка ...

+0

Нет, это не сработало. Я все равно получаю ту же ошибку. SUBSTR (TRIM (sighted), 1,4) - год, который извлекается из видимого столбца – Puneeth

+0

Сценарий: https://gist.github.com/puneethbs/207dc89530c26c05ed02 Сообщение об ошибке: https://gist.github.com/puneethbs/ 3dcdebb4075275bbf62b – Puneeth

+0

просто укажите псевдоним SUBSTR (TRIM (sighted), 1,4) как год .... отредактировал в моем ответе ... надеюсь, это поможет – madhu

0

Когда вы делаете динамический раздел, создайте временную таблицу со всеми столбцами (включая секционированный столбец) и загрузите данные во временную таблицу.

создать фактическую таблицу с разделителем. Пока вы загружаете данные из временной таблицы, секционированный столбец должен быть последним в предложении select.

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