繁体   English   中英

Redshift UPDATE令人望而却步

[英]Redshift UPDATE prohibitively slow

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

SELECT col1, col2, col3
FROM SOMETABLE
WHERE col1 = 'a value of col1'
  AND col2 = 12;

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

UPDATE SOMETABLE
SET col3 = 20
WHERE col1 = 'a value of col1'
  AND col2 = 12;

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

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

知道这里发生了什么吗?

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

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

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

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

实际上我不认为RedShift是为批量更新而设计的,RedShift是专为OLAP而不是OLTP而设计的,RedShift的更新操作本质上是低效的。

在这个用例中,我建议执行INSERT而不是UPDATE,同时添加TIMESTAMP的另一列,当您对RedShift进行分析时,您需要额外的逻辑来获取最新的TIMESTAMP以消除可能的重复数据条目。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM