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 添加具有默认值的列的主要内容,如果未能解决你的问题,请参考以下文章