在 Impala 中使用 NULL 列创建表作为 Select

Posted

技术标签:

【中文标题】在 Impala 中使用 NULL 列创建表作为 Select【英文标题】:Create Table As Select in Impala with NULL column 【发布时间】:2021-01-07 14:24:18 【问题描述】:

上下文

我从表中选择一些数据并初始化一个虚拟列以与NULL 连接。

SELECT
    col_a as a,
    NULL  as b
FROM dummy_table;

-- Output
+---+----+
| a | b  |
+---+----+
| 1 |NULL|
|...|NULL|
+---+----+

这工作并产生正确的输出。

问题

我想将该输出存储在表中以进行进一步处理。

CREATE TABLE IF NOT EXISTS temp_table STORED AS parquet AS
    SELECT
        col_a as a,
        NULL  as b
    FROM dummy_table;

当第一个查询运行时,第二个查询没有运行并失败并出现以下错误:

AnalysisException:表“temp_table”的“b”列中不支持的类型“null_type”原因:TableLoadingException:表“temp_table”的“b”列中不支持的类型“null_type”

为什么在选择部分实际工作时创建表会失败?

【问题讨论】:

由于您只提供 NULL,因此数据库无法确定您想要为该新表列使用哪种数据类型。尝试将 NULL 值转换为您想要的类型 很好,这就是解决方案! :) 有趣的是,当只执行查询时 Impala 将其转换为布尔值本身,但表创建需要一个特定的类型。发表您的评论作为答案,我会接受它:) 【参考方案1】:

由于您仅提供 NULL 作为值,因此您的数据库无法确定该新表列所需的数据类型。

只需将 NULL 值转换为您想要的类型。

【讨论】:

以上是关于在 Impala 中使用 NULL 列创建表作为 Select的主要内容,如果未能解决你的问题,请参考以下文章

当列数不相等而不将每个列定义为 NuLL 时,有没有办法在 Impala SQL 中合并两个表

在 impala 中更改表:使列成为主键

在 Impala DB 中创建表作为选择百分比子查询

Parquet 支持的 Hive 表:Impala 中不可查询的数组列

在现有表中插入 NOT NULL 列

在 Impala 中创建外部表 - 错误