我有3列的表。 现在我需要修改列作为分区列的一个。 是否有可能? 如果没有,我们如何才能增加分区现有的表。 我用下面的语法:创建表t1(ENO INT,ENAME串)由“\ T”终止行格式分隔的字段; 负载数据的本地“/....path/”变成表t1; 改变表t1添加分区(P1 = '印度');
我得到的错误.........
任何一个知道如何分区添加到现有的表 ......?
提前致谢。
我有3列的表。 现在我需要修改列作为分区列的一个。 是否有可能? 如果没有,我们如何才能增加分区现有的表。 我用下面的语法:创建表t1(ENO INT,ENAME串)由“\ T”终止行格式分隔的字段; 负载数据的本地“/....path/”变成表t1; 改变表t1添加分区(P1 = '印度');
我得到的错误.........
任何一个知道如何分区添加到现有的表 ......?
提前致谢。
我不认为这是直接可行的。 蜂房必须完全重新排列,并分成HDFS文件因为添加分区会强加一个新的目录结构。
我建议你做的是简单地创建一个新表所需要的模式和分区,然后将一切从第一到第二位。
我认为这是没有办法的表的现有列转换为分区。 如果你想添加一个分区表中的使用,你已经做了ALTER命令。 如果你正在处理的外部表,然后指定位置字段为好。 我不知道是否分区可以使用ALTER命令来管理的表添加。
不能将分区添加到创建的表。 但是,你可以这样做这些步骤。 创建一个新表并插入从旧表中的数据到新的一个。
/*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;