Могу ли я использовать PARTITIONED BY после создания таблицы? - PullRequest
0 голосов
/ 10 мая 2018
create table t1 as select * from t2 where 1=2;

Я использую приведенный выше код для создания таблицы t1 из таблицы t2. В этой таблице t2 разделен на 3 поля, то есть месяц, день, год. Как только таблица t1 создана, она не разбивается на значения, упомянутые выше.

Я пробовал приведенный ниже код, но он дает мне ошибки. Помогите!

create table t1 as 
select * from t2 PARTITIONED BY( YEAR  STRING, MONTH STRING, DAY  STRING);

[42000]: Ошибка при компиляции оператора: FAILED: ParseException строка 1: 0 не может распознать ввод вблизи 'PARTITIONED' 'BY' '(' в источнике таблицы

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Правильный ответ выше, решение для создания раздела в / во время создания таблицы.

В случае, если таблица уже создана без раздела, то одним из способов является использование INSERT OVERWRITE.

SET hive.exec.dynamic.partition = true;
SET hive.exec.dynamic.partition.mode = nonstrict;

INSERT OVERWRITE TABLE <table_name> PARTITION(<partition_name>) 
    SELECT <column_1,... column_n, partition_name> from <table_name>; 
0 голосов
/ 10 мая 2018

Просто нужно исправить синтаксис. partitioned by ... идет после create table.

create table t1 PARTITIONED BY(YEAR STRING,MONTH STRING,DAY STRING) as 
select /*add other columns here*/,year,month,day 
from t2;

Рекомендуется явно вызывать столбцы вместо * и указывать столбцы разбиения ближе к концу select.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...