我必须更改分区列名称(不是分区规范),我在hive wiki和一些google页面中查找了命令。我可以找到改变分区规范的选项,
即。例如
在/ table / country ='美国'我可以将美国更改为美国,但我想将国家更改为大陆。
我觉得可用于更改分区列名的唯一选项是删除并重新创建表。有没有其他选择可以帮助我。
提前致谢。
答案 0 :(得分:2)
您可以通过以下方式更改元数据中的列名: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-ChangeColumnName/Type/Position/Comment
但正如文件所说,它只会改变元数据。 Hive分区实现为具有命名模式columnName = spec的目录。因此,您还需要使用“hadoop fs”命令更改HDFS上这些目录的名称。
答案 1 :(得分:0)
您已经使用简单的交换方法更改了分区列。
移动旧表中的所有文件以重新创建表位置。
table['number_index'] = table['number_' + str(table['index'])]
使用适当的分区值将临时表数据复制/加载到原始表中。
hadoop fs -mv <current_table_name> <temp_table_name>
msck修复原始表并删除temp_table。
注意: mv 命令将文件从一个位置移动到另一位置,从而减少了复制时间。或者,我们可以使用hadoop fs -mv <temp_table_name> <current_table_name>
将数据复制到原始表中。
答案 2 :(得分:0)
您不能在配置单元中更改分区列实际上配置单元不支持更改分区列
您可以这样考虑-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
答案 3 :(得分:-1)
在此处添加解决方案以供日后使用:
使用案例:将分区列从STRING更改为INT
set hive.mapred.mode=norestrict;
alter table {table_name} partition column ({column_name} {column_type});
e.g. ALTER TABLE employee PARTITION COLUMN dept INT;
答案 4 :(得分:-1)
正如您所说,重命名分区的值非常简单:
hive> ALTER TABLE test.usage PARTITION (country ='US') RENAME TO PARTITION (date='USA');
我知道这不是你想要的。遗憾的是,鉴于您的数据已经被国家/地区分区,您唯一的选择是删除表格,从HDFS中删除数据(假设您的表格是外部的),然后使用continent重新插入数据分区。
在您的情况下,我要做的是拥有多个分区级别,以便您的文件夹结构如下所示:
/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'
...
通过这种方式,您可以查询不同粒度级别的数据(在本例中为大陆和国家)。