Redshift UPDATE令人望而却步

use*_*760 6 sql-update amazon-redshift

我在Redshift集群中有一个表,行数约为10亿.我有一个作业试图根据一些过滤器更新一些列值.在此表中更新任何内容都非常慢.这是一个例子:

SELECT col1, col2, col3
FROM SOMETABLE
WHERE col1 = 'a value of col1'
  AND col2 = 12;
Run Code Online (Sandbox Code Playgroud)

上面的查询在不到一秒的时间内返回,因为我有sortkeys col1col2.只有一行符合此条件,因此结果集只有一行.但是,如果我跑:

UPDATE SOMETABLE
SET col3 = 20
WHERE col1 = 'a value of col1'
  AND col2 = 12;
Run Code Online (Sandbox Code Playgroud)

此查询需要一段未知的时间(我在20分钟后停止了).同样,它应该更新一行的一个列值.

我还尝试按照此处的文档:http://docs.aws.amazon.com/redshift/latest/dg/merge-specify-a-column-list.html,其中讨论了如何创建临时临时表以进行更新主表,但得到了相同的结果.

知道这里发生了什么吗?

Joe*_*ris 10

您没有提到要更新的表的百分比,但重要的是要注意UPDATERedshift中的一个步骤是两个步骤:

  1. 必须首先将要更改的每一行标记为删除
  2. 然后,必须为表中的每列写入新版本的数据

如果您有大量列和/或正在更新大量行,则此过程对于数据库来说可能非常耗费人力.

您可以尝试使用CREATE TABLE AS语句创建表的新"更新"版本,然后删除现有表并重命名新表.这样做的另一个好处是可以为您提供完全排序的表格.