Amazon redshift 在大型数据集上使用addcolumn的含义

Amazon redshift 在大型数据集上使用addcolumn的含义,amazon-redshift,Amazon Redshift,红移的文件说: ALTER TABLE locks the table for reads and writes until the operation completes. 我的问题是: 假设我有一个有5亿行的表,我想添加一列。这听起来像是一个沉重的操作,可能会锁定桌子很长时间-是吗?或者它实际上是一个快速操作,因为红移是一个柱状db?或者这取决于列是否可以为空/是否具有默认值?最近,我在一个大约6500万行的表中添加了一个带有默认值的整数列,并用了大约一秒钟的时间进行处理。这是在dw2.5

红移的文件说:

ALTER TABLE locks the table for reads and writes until the operation completes.
我的问题是:

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

最近,我在一个大约6500万行的表中添加了一个带有默认值的整数列,并用了大约一秒钟的时间进行处理。这是在dw2.5大型(SSD类型)单节点群集上

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

,我发现添加(和删除)列是一个非常快的操作,即使是在数十亿行的表上,不管是默认值还是空值


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

就我个人而言,重建表效果最好。 我用以下方法做这件事

  • 创建新表N_旧表
  • 在新表中定义数据类型/压缩编码
  • 将数据插入N_OLD(OLD_列)从OLD_表中选择(OLD_列)将OLD_表重命名为OLD_表
  • 将N_OLD_表重命名为OLD_表
  • 这是一个更快的过程。不阻塞任何表,并且您始终拥有旧表的备份,以防出现任何问题