从 hive 外部表中的分区中删除列

Posted

技术标签:

【中文标题】从 hive 外部表中的分区中删除列【英文标题】:drop column from a partition in hive external table 【发布时间】:2018-12-03 16:25:41 【问题描述】:

我有一个带有 3 个分区列(A、B、C)的 hive 外部表,现在我想从分区中删除 B 和 C 列。可以这样做吗? 我尝试过使用 Alter table tab_name drop column col_name; --- 但它会抛出一个错误,指出无法删除分区列。

【问题讨论】:

【参考方案1】:

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

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

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

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

像这样:

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 重命名新表。

【讨论】:

以上是关于从 hive 外部表中的分区中删除列的主要内容,如果未能解决你的问题,请参考以下文章

hive中怎么删除表中的部分数据

hive中怎么删除表中的部分数据

hive外部表分区

Spark 不使用 Hive 分区外部表中的分区信息

从 hdfs 中删除文件是不是会删除相应的 hive 外部表分区?

Hive常用命令