преобразовать обычный столбец в столбец раздела в улье

У меня есть таблица с 3 столбцами. теперь мне нужно изменить один из столбцов как столбец раздела. Есть ли возможность? Если нет, то как мы можем добавить раздел в существующую таблицу. Я использовал приведенный ниже синтаксис: создать таблицу t1 (eno int, ename string ) поля формата строки с разделителями, оканчивающиеся символом '\ t'; загрузить локальные данные '/....path/' в таблицу t1; изменить таблицу t1, добавить раздел (p1='india');

я получаю ошибки........

Кто-нибудь знает, как добавить раздел в существующую таблицу......?

Заранее спасибо.


person Ramesh.kbvr    schedule 25.09.2012    source источник


Ответы (3)


Я не думаю, что это возможно напрямую. Hive пришлось бы полностью переупорядочивать и разделять файлы в HDFS, потому что добавление раздела наложило бы новую структуру каталогов.

Я предлагаю вам просто создать новую таблицу с нужной схемой и разделом и вставить все из первой во вторую.

person Joe K    schedule 25.09.2012

Я думаю, что нет способа преобразовать существующий столбец таблицы в раздел. Если вы хотите добавить раздел в таблицу, используйте команду ALTER, как вы уже сделали. Если вы имеете дело с внешней таблицей, укажите также поле местоположения. Я не уверен, можно ли добавить раздел с помощью команды ALTER для управляемых таблиц.

person Harvey    schedule 09.01.2015

Вы не можете добавить раздел в созданную таблицу. Но вы можете сделать что-то вроде этих шагов. Создайте новую таблицу и вставьте данные из старой таблицы в новую.

/*Original table structure*/
CREATE  TABLE original_table(
    c1 string,
    c2 string,
    c3 string)
STORED AS ORC;



/*Partitioned table structure*/
CREATE  TABLE partitioned_table(
    c1 string,
    c2 string)
partitioned by (c3 string)  
STORED AS ORC;


/*load data from original_table to partitioned_table*/
insert into table partitioned_table partition(c3)     select c1,c2,c3 from  original_table;


/*remae original_table to old_table. You can just drop it if you want it*/
ALTER TABLE original_table RENAME TO old_table;


/*rename partitioned_table to original_table*/
ALTER TABLE partitioned_table RENAME TO original_table; 
person Pastor    schedule 10.09.2019