【发布时间】:2020-07-24 19:23:52
【问题描述】:
我想用默认值向现有的 impala 表(和视图)添加一列(这样现有的行也有一个值)。该列不应允许空值。
ALTER TABLE dbName.tblName ADD COLUMNS (id STRING NOT NULL '-1')
我浏览了文档,但找不到专门执行此操作的示例。我如何在 Impala 中执行此操作?色调下划线/无法识别 NOT NULL 命令
【问题讨论】:
我想用默认值向现有的 impala 表(和视图)添加一列(这样现有的行也有一个值)。该列不应允许空值。
ALTER TABLE dbName.tblName ADD COLUMNS (id STRING NOT NULL '-1')
我浏览了文档,但找不到专门执行此操作的示例。我如何在 Impala 中执行此操作?色调下划线/无法识别 NOT NULL 命令
【问题讨论】:
您是否使用 Kudu 作为您的表的存储层?因为如果没有,那么根据Impala docs,
注意: Impala 只允许 PRIMARY KEY 子句和 NOT NULL 约束 Kudu 表的列。这些限制在 Kudu 上强制执行 一边。
...
对于非 Kudu 表,Impala 允许任何列包含 NULL 值, 因为在 HDFS 上强制执行“非空”约束是不切实际的 可以使用外部工具和 ETL 准备的数据文件 进程。
Impala 的 ALTER TABLE 语法也不支持指定默认列值(通常,非 Kudu)。
【讨论】:
ALTER TABLE 在非 Kudu 存储上仅更新表元数据而不影响底层数据。所以不幸的是,除非你重写整个表格,否则我认为你想要的东西是不可能的。
CREATE VIEW 并在其中使用IFNULL(id,'-1') id。
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' 是填充新列。
【讨论】: