我正在使用AS
子句从另一个表创建一个临时表,其中包含另一个表的分区列也属于临时表,然后出现以下错误。下面是表create语句,其中col4
是表xyz
的分区列。
在运行create语句时,出现以下错误。当我从create语句中删除col4
时,它运行正常。
错误:
编译语句时出错:FAILED:NumberFormatException为 输入字符串:“ HIVE_DEFAULT_PARTITION”(状态= 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;
答案 0 :(得分:0)
这是源表xyz
的问题,因为它包含分区__HIVE_DEFAULT_PARTITION__
在动态分区模式下,Hive创建的分区值为__HIVE_DEFAULT_PARTITION__
,插入的分区值为NULL。
分区__HIVE_DEFAULT_PARTITION__
与数字类型不兼容,这会导致错误,因为它不能转换为数字类型。
要删除或查询此分区,您需要先将列类型更改为字符串:
ALTER TABLE xyz PARTITION COLUMN (col4 string);
当然,您可能需要备份表并检查数据,然后再删除并决定如何处理此数据。
要删除分区:
ALTER TABLE xyz DROP PARTITION (col4 = '__HIVE_DEFAULT_PARTITION__');
删除分区后,您可以将分区列的类型改回数字类型。