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

时间:2018-08-02 14:30:17

标签: sql hadoop hive hiveql partition

我正在使用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;

1 个答案:

答案 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__');

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