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

Ane*_*pic 5 amazon-redshift

Redshift的文件说:

ALTER TABLE locks the table for reads and writes until the operation completes.
Run Code Online (Sandbox Code Playgroud)

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

Joe*_*ris 5

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

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


nov*_*ket 3

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

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