【问题标题】:Creating temp table from another table including partition column in hive从另一个表创建临时表,包括配置单元中的分区列
【发布时间】:2019-01-10 08:58:06
【问题描述】:

我正在使用AS 子句从另一个表创建一个临时表,其中我包括另一个表的分区列也是临时表的一部分,然后我收到以下错误。下面是表创建语句,其中col4是表xyz的分区列。

在运行 create 语句时,我收到以下错误。当我从 create 语句中删除 col4 时,它运行良好。

错误:

编译语句时出错:FAILED: NumberFormatException For 输入字符串:“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;

【问题讨论】:

  • 从 xyz 中选择会发生什么?
  • 它工作正常,只有当我从分区表创建 tmp 表时才会出错。现在问题得到了解决,因为我在上述脚本中的分区列上添加了 where 条件。 FROM xyz where col4>201802

标签: sql hadoop hive hiveql partition


【解决方案1】:

这是源表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__');

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多