如何删除Hive中的两个分区列之一?

时间:2018-05-08 10:43:49

标签: hadoop hive hiveql cloudera

我创建了一个带有两个分区列的hive表,例如col 1和col2,现在出于某种分析目的,我希望删除col2分区。

基本上我希望从分区列列表中删除列-col2,但我不应该丢失col2中的数据。

显然,最终表应该只保留col1分区,而col2也应该存在于最终的分区表中,但是作为普通列而不是分区列。

请建议前进的方向。

2 个答案:

答案 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);