Hive 1.1.0将表分区类型从int更改为string

时间:2015-07-17 12:54:48

标签: hadoop hive partitioning ddl

我有一个表有一个类型为int的分区,但我想将其转换为字符串。但是,我无法弄清楚如何做到这一点。

表格描述为:

Col1 timestamp
Col2 string
Col3 string
Col4 string
Part_col int

# Partition information
# col_name data_type comment

Part_col int

我创建的分区是Part_col = 0,Part_col = 1,...,Part_col = 23

我想将它们更改为Part_col ='0'等

我在hive中运行此命令:

set hive.exec.dynamic.partitions = true;
Alter table tbl_name partition (Part_col=0) Part_col Part_col string;

我也尝试使用“partition(Part_col)”一次更改所有分区。

我收到错误“无效的列引用Part_col”

我使用https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types中的示例来转换十进制列,但无法弄清楚dec_column_name代表什么。

由于

2 个答案:

答案 0 :(得分:13)

有点挖掘发现,有一个配置单元 JIRA 可以完全命令更新分区列数据类型(https://issues.apache.org/jira/browse/HIVE-3672

alter table {table_name} partition column ({column_name} {column_type});

根据 JIRA ,该命令已经实施,但很明显它从未在Hive Wiki上记录过。

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

答案 1 :(得分:-1)

我认为你应该重新定义表的架构并重新定义你的分区值不再是一个整数,现在这将是一个字符串类型。

我建议你做的是:

  1. 使您的表外部(如果您将其定义为非外部表)。在这种情况下,您可以删除表而不删除目录中的数据。
  2. 放下桌子。
  3. 使用新架构再次创建表(分区值为字符串)。
  4. 上面的步骤,物理上(结构文件夹)不会对你已经拥有的结构产生任何影响。不同之处在于Hive Metastore,特别是在"虚拟列"在制作分区时创建。

    此外,现在改为查询:part_col = 1,现在您将能够进行如下查询:part_col =' 1'。

    试试这个并告诉我这是怎么回事。