簡體   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