我有一个数据库,其中包含超过3000万条记录,并且需要向数据库中添加两个新列。问题是我需要这些列为NOT NULL,并且没有默认值。我以为我只会添加没有NOT NULL约束的这些列,用数据填充它们,然后添加约束,但是Redshift不支持该列。我心中还有其他解决方案,但是我想知道是否有比这更简单的解决方案?
答案 0 :(得分:0)
我建议:
Table-A
Table-B
以及与customer_id
相匹配的标识列(例如Table-A
)。Table-B
(2列+身份列)CREATE TABLE AS
同时创建新的Table-C
(指定DISTKEY和SORTKEY),同时通过标识列上的JOIN查询Table-A
和Table-B
Table-C
的内容Table-C
(不必,但以防万一,应该很快)Table-A
和Table-B
Table-C
重命名为所需的表名(可能与Table-A
相同) 摘要::Table-A
中的现有列+ Table-B
➞Table-C
中的多余列
理由:
UPDATE
语句在Redshift中不能很好地运行。它要求将每列的现有数据行标记为“已删除”,然后将新行追加到每列的末尾。进行许多UPDATES操作将耗尽表的大小,并且它将变得无法排序。它也相对较慢。之后,您需要对表进行Deep Copy或VACUUM修复。CREATE TABLE AS
与JOIN一起使用将在一个查询中生成所有“最终状态”数据,并且结果表将被排序并处于“干净”状态Table-C
的内容。非常方便调试过程!