将普通列转换为配置单元中的分区列

时间:2012-09-25 13:37:04

标签: hadoop hive partitioning hdfs hiveql

我有一个包含3列的表格。现在我需要将其中一个列修改为分区列。 有可能吗?如果没有,我们如何将分区添加到现有表。我使用以下语法: create table t1(eno int,ename string)以'\ t'结尾的行格式分隔字段; 将数据本地'/....path/'加载到表t1中; alter table t1 add partition(p1 ='india');

我收到错误.........

任何人都知道如何将分区添加到现有表 ......?

提前致谢。

3 个答案:

答案 0 :(得分:1)

我不认为这是直接可能的。 Hive必须完全重新排列和拆分HDFS中的文件,因为添加分区会强制实施新的目录结构。

我建议你做的只是创建一个包含所需模式和分区的新表,并插入从第一个到第二个的所有内容。

答案 1 :(得分:0)

我认为没有办法将表的现有列转换为分区。 如果要在表中添加分区,请使用ALTER命令。如果您正在处理外部表,那么也指定位置字段。我不确定是否可以使用ALTER命令为托管表添加分区。

答案 2 :(得分:0)

您不能将分区添加到已创建的表中。 但是您可以执行以下步骤。 创建一个新表并将数据从旧表插入到新表中。

/*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;