【问题标题】:Implications of using ADD COLUMN on large dataset在大型数据集上使用 ADD COLUMN 的含义
【发布时间】:2014-06-02 14:35:49
【问题描述】:

Redshift 的文档说:

ALTER TABLE locks the table for reads and writes until the operation completes.

我的问题是:
假设我有一个包含 5 亿行的表,并且我想添加一列。这听起来像是一个繁重的操作,可能会长时间锁定表 - 是吗?或者它实际上是一个快速操作,因为 Redshift 是一个柱状数据库?还是取决于列是否可为空/具有默认值?

【问题讨论】:

    标签: amazon-redshift


    【解决方案1】:

    我发现添加(和删除)列是一种非常快速的操作,即使在具有数十亿行的表上也是如此,无论是否存在默认值或它只是 NULL。

    正如您所建议的,我相信这是它作为列式数据库的一个特性,因此表的其余部分不受干扰。它只是为每个节点上的新列创建空(或几乎空)列块。

    【讨论】:

      【解决方案2】:

      我最近在 Redshift 中为大约 6500 万行的表添加了一个默认整数列,处理过程大约需要一秒钟。这是在 dw2.large(SSD 类型)单节点集群上。

      请记住,您只能在表的末尾(右侧)添加一列,如果您想在中间某处插入一列,则必须使用临时表等。

      【讨论】:

        【解决方案3】:

        我个人认为重建表效果最好。 我通过以下方式做到这一点

        1. 新建表N_OLD_TABLE表
        2. 在新表中定义数据类型/压缩编码
        3. 将数据插入 N_OLD(old_columns) select(old_columns) from old_table 将 OLD_Table 重命名为 OLD_TABLE_BKP
        4. 将 N_OLD_TABLE 重命名为 OLD_TABLE

        这是一个更快的过程。不会阻塞任何表,并且您始终拥有旧表的备份,以防出现任何问题

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-07-09
          • 2020-04-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-25
          • 2016-08-01
          • 2013-02-11
          相关资源
          最近更新 更多