【发布时间】:2018-05-08 10:43:49
【问题描述】:
我创建了一个带有两个分区列 col 1 和 col2 的 hive 表,现在出于某种分析目的,我希望删除 col2 分区。
基本上我希望列 - col2 从分区列列表中删除,但我不应该丢失 col2 中的数据。
显然,最终表应仅由 col1 分区,而 col2 也应存在于最终分区表中,但作为普通列而不是分区列。
请提出前进的方向。
【问题讨论】:
标签: hadoop hive hiveql cloudera
我创建了一个带有两个分区列 col 1 和 col2 的 hive 表,现在出于某种分析目的,我希望删除 col2 分区。
基本上我希望列 - col2 从分区列列表中删除,但我不应该丢失 col2 中的数据。
显然,最终表应仅由 col1 分区,而 col2 也应存在于最终分区表中,但作为普通列而不是分区列。
请提出前进的方向。
【问题讨论】:
标签: hadoop hive hiveql cloudera
以下是最好的方法之一。 只需更新 hive 分区:
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);
万事如意!!!
【讨论】:
没有明确的命令可以删除 hive 中的列。但是,您可以使用下面的 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);
【讨论】: