我有一个包含3个分区列(a、b、c)的配置单元外部表,现在我想从分区中删除b和c列。可以这样做吗?我试过使用alter tab \u name drop col \u name;--但是它抛出了一个错误,声明分区列不能被删除。
kuuvgm7e1#
要删除分区列,应重新创建表。步骤如下:删除表,删除外部表不会删除数据文件。重新组织数据文件夹以反映新的分区结构。分区是物理层上的文件夹,按层次结构组织。如果删除上层分区,则所有子文件夹都应移到上层,依此类推。如果删除的是两个上部分区列,并且只剩下一个,那么它应该是表位置下的一级子文件夹。在旧位置上创建具有新分区架构的表。跑 MSCK repair table . 它将为所有找到的分区文件夹创建分区元数据。如果所有这些步骤看起来太复杂或太难执行,那么只需创建新表并加载数据:使用新分区架构创建新表。将数据加载到新表中。删除旧表并重命名新表这样地:
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;
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 .
ALTER TABLE table_name RENAME TO new_table_name
1条答案
按热度按时间kuuvgm7e1#
要删除分区列,应重新创建表。步骤如下:
删除表,删除外部表不会删除数据文件。
重新组织数据文件夹以反映新的分区结构。分区是物理层上的文件夹,按层次结构组织。如果删除上层分区,则所有子文件夹都应移到上层,依此类推。如果删除的是两个上部分区列,并且只剩下一个,那么它应该是表位置下的一级子文件夹。
在旧位置上创建具有新分区架构的表。
跑
MSCK repair table
. 它将为所有找到的分区文件夹创建分区元数据。如果所有这些步骤看起来太复杂或太难执行,那么只需创建新表并加载数据:
使用新分区架构创建新表。
将数据加载到新表中。
删除旧表并重命名新表
这样地:
最后,在删除旧表之后,可以使用
ALTER TABLE table_name RENAME TO new_table_name
.