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

Hive 1.1.0 Alter table partition type from int to string

我有一个 table,它有一个 int 类型的分区,但我想将其转换为字符串。但是,我不知道该怎么做。

table描述是:

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' 等等

我 运行 配置单元中的这个命令:

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

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

我收到错误 "Invalid column reference Part_col"

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

谢谢

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

我建议你做的是:

  1. 将您的 table 设为外部(以防您将其定义为非外部 table)。在这种情况下,您可以删除 table 而无需删除目录中的数据。
  2. 删除 table。
  3. 使用新架构(分区值作为字符串)再次创建 table。

上述步骤在物理上(结构文件夹)不会对您已有的结构产生任何影响。不同之处在于 Hive 元存储,特别是在创建分区时创建的 "virtual column"。

此外,现在您可以查询:part_col = 1,而不是查询:part_col = '1'。

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

一点挖掘发现有一个配置单元 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 系统上使用它,它按预期工作。