我有一个有1.4B记录的大表。我每天都必须使用UPDATE语句像下面的(小,但不是非常小)来更新基于另一个表中的一些条件这个大表的一些记录:在Redshift中优化大表的更新
UPDATE my_large_table set a_field_that_needs_to_be_updated = 1 WHERE join_field IN (SELECT join_field FROM another_table where some_other_conditions
这需要有时超过30分钟,这是我们的超时值,这样就会中止作业。
- 一个简单的解决方案是增加超时值,但这不是我想要的路线。
- 另一个优化可能是在表模式中使用join_field作为distkey,但有更常见的连接用例,因此另一个字段设置为distkey。
所以我想知道如果我可以将此查询分解成多个分区查询。 join_field实际上是一个字母数字散列值,我可以看看字段的第一个字符,并使用LIKE在36个小块(0到9和A到Z)中运行语句。但我想知道是否有更好的方法。