我创建了一个带有两个分区列的hive表,例如col 1和col2,现在出于某种分析目的,我希望删除col2分区。
基本上我希望从分区列列表中删除列-col2,但我不应该丢失col2中的数据。
显然,最终表应该只保留col1分区,而col2也应该存在于最终的分区表中,但是作为普通列而不是分区列。
请建议前进的方向。
答案 0 :(得分:1)
以下是最好的方法之一。 只需更新配置单元分区:
ALTER TABLE <table_anme> PARTITION(year = 2018, month = 05)
SET LOCATION 'hdfs://some/temp/location/tale_name/2018/05';
它会将分区设置为新位置,并且不会移动或删除您的数据文件。
现在删除分区,
ALTER TABLE <table_name> DROP IF EXISTS PARTITION(year = 2018, month = 05);
一切顺利!!!
答案 1 :(得分:0)
没有明确的命令来删除配置单元中的列。但是,您可以使用REPLACE命令执行此操作。
ALTER TABLE <table_name> REPLACE COLUMNS(column1 <type>, column2 <type>);
假设你有一个表TEST
CREATE TABLE TEST(a int, b int, c int);
现在您要删除列c,然后您可以按如下方式执行:
ALTER TABLE TEST REPLACE COLUMNS (a int, b int);