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

Hadoop 将普通列转换为配置单元中的分区列,hadoop,hive,partitioning,hdfs,hiveql,Hadoop,Hive,Partitioning,Hdfs,Hiveql,我有一个有三列的表。现在我需要将其中一列修改为分区列。 有可能吗?若并没有,我们如何将分区添加到现有表中。我使用了以下语法: 创建以“\t”结尾的表t1(eno int,ename string)行格式分隔字段; 将数据本地“/…路径/”加载到表t1中; 更改表t1添加分区(p1='india') 我犯了错误 有人知道如何将分区添加到现有表中吗 提前谢谢。我认为这是不可能的。配置单元必须完全重新排列和分割HDFS中的文件,因为添加分区将强制使用新的目录结构 我建议您只需使用所需的模式和分区创建一

我有一个有三列的表。现在我需要将其中一列修改为分区列。 有可能吗?若并没有,我们如何将分区添加到现有表中。我使用了以下语法: 创建以“\t”结尾的表t1(eno int,ename string)行格式分隔字段; 将数据本地“/…路径/”加载到表t1中; 更改表t1添加分区(p1='india')

我犯了错误

有人知道如何将分区添加到现有表中吗


提前谢谢。

我认为这是不可能的。配置单元必须完全重新排列和分割HDFS中的文件,因为添加分区将强制使用新的目录结构


我建议您只需使用所需的模式和分区创建一个新表,然后将第一个表的所有内容插入第二个表。

我认为这是不可能的。配置单元必须完全重新排列和分割HDFS中的文件,因为添加分区将强制使用新的目录结构


我建议您只需使用所需的架构和分区创建一个新表,然后将第一个表中的所有内容插入第二个表。

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

我认为没有办法将表的现有列转换为分区。
如果您想在表中添加分区,请使用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; 

无法将分区添加到已创建的表中。 但是你可以做一些类似于这些步骤的事情。 创建新表并将数据从旧表插入新表

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