从另一个表(包括配置单元中的分区列)创建临时表

u5rb5r59  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(294)

我正在用另一个表创建一个临时表 AS 子句,其中包括另一个表的分区列也是temp表的一部分,然后得到以下错误。下表是create语句,其中 col4 是表的分区列 xyz .
在运行create语句时,我得到以下错误。当我移除 col4 在create语句中运行良好。
错误:
编译语句时出错:失败:输入字符串的numberformatexception:“配置单元\默认\分区”(状态=42000,代码=40000)
请帮忙。
例子:

CREATE TEMPORARY TABLE abc STORED AS PARQUET AS SELECT
col1 AS col1,
col2 AS col2,
col3 AS col3,
col4 AS col4
FROM xyz;
xlpyo6sf

xlpyo6sf1#

这是源表的问题 xyz 因为它包含分区 __HIVE_DEFAULT_PARTITION__ 配置单元创建具有值的分区 __HIVE_DEFAULT_PARTITION__ 在动态分区模式下,插入的分区值为空。
隔板 __HIVE_DEFAULT_PARTITION__ 与数值类型不兼容,这会导致错误,因为无法将其转换为数值类型。
要删除或查询此分区,需要先将列类型更改为string:

ALTER TABLE xyz PARTITION COLUMN (col4 string);

当然,您可能需要备份表并在删除之前检查数据,然后决定如何处理这些数据。
要删除分区:

ALTER TABLE xyz DROP PARTITION (col4 = '__HIVE_DEFAULT_PARTITION__');

删除分区后,可以将分区列的类型改回数字类型。

相关问题