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

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

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

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

【问题讨论】:

    标签: cloudera impala hue


    【解决方案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' 是填充新列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-17
      • 2010-09-08
      • 2018-07-31
      • 1970-01-01
      • 2016-09-08
      相关资源
      最近更新 更多