我有一个有 3 列的表。现在我需要将其中一列修改为分区列。有没有可能?如果没有,我们如何向现有表添加分区。我使用了以下语法: create table t1 (eno int, ename string ) 行格式分隔字段,以 '\t' 结尾;将数据本地'/....path/'加载到表t1中; alter table t1 添加分区 (p1='india');
我收到错误......
任何人都知道如何将分区添加到现有表......?
提前致谢。
我有一个有 3 列的表。现在我需要将其中一列修改为分区列。有没有可能?如果没有,我们如何向现有表添加分区。我使用了以下语法: create table t1 (eno int, ename string ) 行格式分隔字段,以 '\t' 结尾;将数据本地'/....path/'加载到表t1中; alter table t1 添加分区 (p1='india');
我收到错误......
任何人都知道如何将分区添加到现有表......?
提前致谢。
我不认为这是直接可能的。Hive 将不得不完全重新排列和拆分 HDFS 中的文件,因为添加分区将强加一个新的目录结构。
我建议你做的只是创建一个具有所需架构和分区的新表,然后将第一个表中的所有内容插入到第二个表中。
您不能将分区添加到创建的表中。但是您可以执行类似这些步骤的操作。创建一个新表并将旧表中的数据插入到新表中。
/*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;
/*rename 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;
我认为没有办法将表的现有列转换为分区。如果要在表中添加分区,请使用 ALTER 命令,就像您已经完成的那样。如果您正在处理外部表,那么还要指定位置字段。我不确定是否可以使用 ALTER 命令为托管表添加分区。