繁体   English   中英

如何更改Hive分区列名称

[英]How to alter Hive partition column name

我必须更改分区列名称(而不是分区规范),我在配置单元Wiki和某些Google页面中查找了命令。 我可以找到用于更改分区规范的选项,

即例如

在/ table / country ='US'中,我可以将US更改为USA,但我想将国家更改为Continental

我觉得唯一可用于更改分区列名称的选项是删除并重新创建表。 还有其他可用的选项,请帮助我。

提前致谢。

您可以通过以下方式更改元数据中的列名称: https : //cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-ChangeColumnName/Type/Position/Comment

但是正如文档所说,它仅更改元数据。 配置单元分区被实现为具有命名模式columnName = spec的目录。 因此,您还需要使用“ hadoop fs”命令来更改HDFS上这些目录的名称。

您已经使用简单的交换方法更改了分区列。

  • 创建一个新的临时表,该表与当前表的架构相同。
  • 将旧表中的所有文件移动到新创建的表位置。

    hadoop fs -mv <current_table_name> <temp_table_name>

  • 更改原始表的架构(重命名或删除分区)
  • 使用适当的分区值将临时表数据重新复制/加载到原始表中。

    hadoop fs -mv <temp_table_name> <current_table_name>

  • msck修复原始表并删除temp_table。

注意: mv命令可将文件从一个位置移动到另一位置,从而减少了复制时间。 或者,我们可以使用LOAD DATA INPATH将数据复制到原始表。

您不能在配置单元中更改分区列实际上配置单元不支持更改分区列

您可以这样想-Hive通过在hdfs中创建一个具有分区列值的文件夹来存储数据-由于如果尝试更改hive分区,则意味着您正在尝试更改hive表的整个目录结构和数据,即如果您对年份进行了分区,则不可能exp这是目录结构的样子

tab1/clientdata/**2009**/file2
tab1/clientdata/**2010**/file3

如果要更改分区列,可以执行以下步骤

创建另一个配置单元表,在分区列中进行必要的更改

Create table new_table ( A int, B String.....)

从上表加载数据

Insert into new_table partition ( B ) select A,B from table Prev_table

如您所说,重命名分区的值非常简单:

hive> ALTER TABLE test.usage PARTITION (country ='US') RENAME TO PARTITION (date='USA');

我知道这不是您想要的。 不幸的是,鉴于您的数据已按国家/地区进行分区,您唯一的选择是删除表,从HDFS中删除数据(假设您的表位于外部),然后使用大洲作为分区重新插入数据。

在您的情况下,我要做的是具有多个分区级别,以便您的文件夹结构如下所示:

/path/to/the/data/continent='america'/country='usa'
/path/to/the/data/continent='america'/country='mexico'
/path/to/the/data/continent='europe'/country='spain'
/path/to/the/data/continent='europe'/country='italy'
...

这样,您可以查询数据以获取不同级别的粒度(在这种情况下为continentcountry )。

在此处添加解决方案供以后使用:

  • 用例:将分区列从STRING更改为INT

     set hive.mapred.mode=norestrict; alter table {table_name} partition column ({column_name} {column_type}); eg ALTER TABLE employee PARTITION COLUMN dept INT; 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM