Impala 添加具有默认值的列

Posted

技术标签:

【中文标题】Impala 添加具有默认值的列【英文标题】:Impala add column with default value 【发布时间】:2020-07-24 19:23:52 【问题描述】:

我想用默认值向现有的 impala 表(和视图)添加一列(这样现有的行也有一个值)。该列不应允许空值。

ALTER TABLE dbName.tblName ADD COLUMNS (id STRING NOT NULL '-1')

我浏览了文档,但找不到专门执行此操作的示例。我如何在 Impala 中执行此操作?色调下划线/无法识别 NOT NULL 命令

【问题讨论】:

【参考方案1】:

您是否使用 Kudu 作为您的表的存储层?因为如果没有,那么根据Impala docs,

注意: Impala 只允许 PRIMARY KEY 子句和 NOT NULL 约束 Kudu 表的列。这些限制在 Kudu 上强制执行 一边。

...

对于非 Kudu 表,Impala 允许任何列包含 NULL 值, 因为在 HDFS 上强制执行“非空”约束是不切实际的 可以使用外部工具和 ETL 准备的数据文件 进程。

Impala 的 ALTER TABLE 语法也不支持指定默认列值(通常,非 Kudu)。

【讨论】:

不使用 Kudu。在 Impala 表中添加列后,我可以为该列插入一个值吗?就像使整个列具有特定的值 ALTER TABLE 在非 Kudu 存储上仅更新表元数据而不影响底层数据。所以不幸的是,除非你重写整个表格,否则我认为你想要的东西是不可能的。 我想知道您或任何人是否有关于在 Impala 表中添加新列时如何处理现有行的建议。我不希望该列具有空值。 嗨@user2441441,你的餐桌怎么样? 如果您不想重写表格,作为临时措施, 可以在上面加上CREATE VIEW 并在其中使用IFNULL(id,'-1') id【参考方案2】:

Impala 你可以尝试如下

添加列


ALTER TABLE dbName.tblName ADD COLUMNS(id STRING);

添加列后,您可以使用同一张表填充该列,如下所示

INSERT OVERWRITE dbName.tblName SELECT col1,...,coln, '-1' FROM dbName.tblName;

其中 col1,...,coln 是 add columns 命令之前的前列,'-1' 是填充新列。

【讨论】:

以上是关于Impala 添加具有默认值的列的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 迁移:添加具有现有列默认值的列

将具有默认值的列添加到 SQL Server 中的现有表

如果源文件中不存在,ssis 添加具有默认值的列

实体框架不包括插入查询中具有默认值的列

使用默认值添加不可为空的列时的 Oracle 错误

Hibernate / JPA在合并后获取数据库中具有默认值的列的值