在大型数据集上使用ADD COLUMN的含义

时间:2014-06-02 14:35:49

标签: amazon-redshift

Redshift的文件说:

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

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

3 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:3)

我最近在Redshift中添加了一个默认为大约65M行的表的整数列,并且需要大约一秒的时间来处理。这是在dw2.large(SSD类型)单节点集群上。

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

答案 2 :(得分:1)

我个人认为重建桌面效果最好。 我是按照以下方式做的

  1. 创建新表N_OLD_TABLE表
  2. 在新表中定义数据类型/压缩编码
  3. 将数据插入N_OLD(old_columns)select(old_columns)from old_table Rename OLD_Table to OLD_TABLE_BKP
  4. 将N_OLD_TABLE重命名为OLD_TABLE
  5. 这是一个更快的过程。不阻止任何表,并且你总是有旧表的备份,以防出现任何问题