从配置单元外部表中的分区删除列

时间:2018-12-03 16:25:41

标签: hive

我有一个带有3个分区列(A,B,C)的配置单元外部表,现在我想从分区中删除B和C列,是否可以这样做? 我已经尝试过使用Alter table tab_name删除列col_name; ---但会引发错误,指出无法删除分区列。

1 个答案:

答案 0 :(得分:0)

要删除分区列,应重新创建表 。步骤是:

  1. 删除表,删除外部表不会删除数据文件。
  2. 重新组织数据文件夹以反映新的分区结构。分区是物理级别的文件夹,按层次进行组织。如果删除上层分区,则所有子文件夹都应移至上层,依此类推。如果要删除两个上分区列,而只剩下一列,则它应该是表位置下的仅一级子文件夹。
  3. 在旧位置的顶部创建具有新分区架构的表。
  4. 运行MSCK repair table。它将为所有找到的分区文件夹创建分区元数据。

如果所有这些步骤看起来太复杂或太难了,那么只需创建新表并加载数据:

  1. 使用新的分区架构创建新表。
  2. 将数据加载到新表中。
  3. 删除旧表并重命名新表

赞:

set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
insert overwrite table new_table partition(C)
select --list columns without deleted 
from old_table;

最后,在删除旧表之后,您可以使用ALTER TABLE table_name RENAME TO new_table_name重命名新表。