Hadoop 配置单元1.1.0将表分区类型从int改为string

Hadoop 配置单元1.1.0将表分区类型从int改为string,hadoop,hive,partitioning,ddl,Hadoop,Hive,Partitioning,Ddl,我有一个表,它有一个int类型的分区,但我想把它转换成string。然而,我不知道该怎么做 表格说明如下: Col1 timestamp Col2 string Col3 string Col4 string Part_col int # Partition information # col_name data_type comment Part_col int 我创建的分区是Part\u col=0、Part\u col=1、…、Part\u col=23 我想把它们改成Part_co

我有一个表,它有一个int类型的分区,但我想把它转换成string。然而,我不知道该怎么做

表格说明如下:

Col1 timestamp
Col2 string
Col3 string
Col4 string
Part_col int

# Partition information
# col_name data_type comment

Part_col int
我创建的分区是Part\u col=0、Part\u col=1、…、Part\u col=23

我想把它们改成Part_col='0'等

我在配置单元中运行此命令:

set hive.exec.dynamic.partitions = true;
Alter table tbl_name partition (Part_col=0) Part_col Part_col string;
我还尝试使用“partition(Part_col)”一次更改所有分区

我得到错误“无效列引用部分\u col”

我使用的是来自的示例来转换十进制列,但无法理解dec_column_name代表什么


谢谢

我认为您应该重新定义表的模式,并重新定义分区值不再是整数,而是字符串类型

我建议您做的是:

  • 将表设置为外部(如果将其定义为非外部表)。在这种情况下,您可以在不删除目录中的数据的情况下删除表
  • 放下桌子
  • 使用新模式(分区值为字符串)再次创建表
  • 上面的步骤,物理上(结构文件夹)不会对您已有的结构产生任何影响。区别在于配置单元元存储,特别是在创建分区时创建的“虚拟列”

    另外,现在可以进行如下查询:part\u col=1,现在可以进行如下查询:part\u col='1'


    试试这个,告诉我这是怎么回事

    一点挖掘发现,有一个配置单元JIRA拥有一个用于更新分区列数据类型()的命令

    根据JIRA的说法,这个命令已经实现了,但是很明显,它从来没有在HiveWiki上记录过


    我在我的Hive 0.14系统上使用了它,它按预期工作。

    太棒了!这起作用了。我很好奇如何使用ALTERTABLE语句实现这一点。我只有几个分区,所以这不太难。但我可以想象一个有大量专栏的情况。是的,您可能可以编写一个程序或脚本来实现这一点,但命令不应该“正常工作”吗?在一行中完成这项工作会很好。@ChrisNjuguna想一想,您告诉metastore您的表是由一个特定的列进行分区的,并且该列是一个int。现在您已经定义了表架构,您可以添加或删除您想要的所有分区,但它们将是“字符串”类型。我认为最好的方法就是按照我告诉你的去做,一旦定义了新的表模式,就可以运行命令msck repair table(感谢@dbustosp,我得到了你的解决方案,这对我的情况来说是一个完美的快速修复。但是根据我发布的URL中的文章,可以用一个命令更改分区数据类型。我想你会同意这可能是最好的方法。记住分区列与数据完全独立,所以我应该可以在不删除和重新创建表和分区的情况下执行此操作。请查看我在原始问题中发布的链接。为什么“alter table partition”命令不起作用?我做错了吗?
    alter table {table_name} partition column ({column_name} {column_type});