[英]Redshift UPDATE prohibitively slow
我在Redshift集群中有一個表,行數約為10億。 我有一個作業試圖根據一些過濾器更新一些列值。 在這個表中更新任何東西都非常慢。 這是一個例子:
SELECT col1, col2, col3
FROM SOMETABLE
WHERE col1 = 'a value of col1'
AND col2 = 12;
上面的查詢在不到一秒的時間內返回,因為我在col1
和col2
上有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
是一個兩步過程:
如果您有大量列和/或正在更新大量行,則此過程對於數據庫來說可能非常耗費人力。
您可以嘗試使用CREATE TABLE AS
語句CREATE TABLE AS
的新“更新”版本,然后刪除現有表並重命名新表。 這樣做的另一個好處是可以為您提供完全排序的表格。
實際上我不認為RedShift是為批量更新而設計的,RedShift是專為OLAP而不是OLTP而設計的,RedShift的更新操作本質上是低效的。
在這個用例中,我建議執行INSERT而不是UPDATE,同時添加TIMESTAMP的另一列,當您對RedShift進行分析時,您需要額外的邏輯來獲取最新的TIMESTAMP以消除可能的重復數據條目。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.