hive1.1.0将表分区类型从int改为string

zzoitvuj  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(346)

我有一个表,它有一个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\u col='0'等
我在配置单元中运行此命令:

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

我还尝试使用“partition(part\ col)”一次更改所有分区。
我得到错误“无效的列引用part\u col”
我使用的例子来自https://cwiki.apache.org/confluence/display/hive/languagemanual+types 用于十进制列的转换,但无法计算dec\u column\u name代表什么。
谢谢

gwbalxhn

gwbalxhn1#

我认为应该重新定义表的模式,重新定义分区值不再是整数,现在将是字符串类型。
我建议你做的是:
使表成为外部表(如果将其定义为非外部表)。在这种情况下,可以删除表而不删除目录中的数据。
放下table。
用新模式(分区值作为字符串)再次创建表。
上面的步骤,在物理上(结构文件夹)不会与您已有的结构有任何区别。不同之处在于配置单元元存储,特别是在创建分区时创建的“虚拟列”。
另外,现在可以进行如下查询:part\u col=1,现在可以进行如下查询:part\u col='1'。
试试这个,告诉我进展如何。

91zkwejq

91zkwejq2#

经过一番挖掘发现,有一个配置单元jira拥有一个用于更新分区列数据类型的命令(https://issues.apache.org/jira/browse/hive-3672)

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

根据jira的说法,这个命令是实现的,但是很明显,它从来没有在hivewiki上记录过。
我在我的hive0.14系统上使用了它,它工作正常。

相关问题