我有一个表,它有一个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代表什么。
谢谢
2条答案
按热度按时间gwbalxhn1#
我认为应该重新定义表的模式,重新定义分区值不再是整数,现在将是字符串类型。
我建议你做的是:
使表成为外部表(如果将其定义为非外部表)。在这种情况下,可以删除表而不删除目录中的数据。
放下table。
用新模式(分区值作为字符串)再次创建表。
上面的步骤,在物理上(结构文件夹)不会与您已有的结构有任何区别。不同之处在于配置单元元存储,特别是在创建分区时创建的“虚拟列”。
另外,现在可以进行如下查询:part\u col=1,现在可以进行如下查询:part\u col='1'。
试试这个,告诉我进展如何。
91zkwejq2#
经过一番挖掘发现,有一个配置单元jira拥有一个用于更新分区列数据类型的命令(https://issues.apache.org/jira/browse/hive-3672)
根据jira的说法,这个命令是实现的,但是很明显,它从来没有在hivewiki上记录过。
我在我的hive0.14系统上使用了它,它工作正常。