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

Posted

技术标签:

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

Redshift 的文档说:

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

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

以上是关于在大型数据集上使用 ADD COLUMN 的含义的主要内容,如果未能解决你的问题,请参考以下文章

在大型数据集上使用 rpart 包

在大型数据集上使用 JOIN 运行 SQL 查询

pandas to_parquet 在大型数据集上失败

在大型数据集上删除 Postgres 中的列

如何在 python 中的大型数据集上训练随机森林?

大型数据集上的 R 中的 hclust()