我从Amanzon Redshift开始。
我刚加载了一张大桌子,数百万行和171个字段。数据质量很差,必须删除很多字符。
我已为每列准备更新,因为redshift以列模式存储,我认为按列更快。
UPDATE MyTable SET Field1 = REPLACE(Field1,'〜','');
UPDATE MyTable SET Field2 = REPLACE(Field2,'〜','');
。 。
更新MyTable设置FieldN =替换(FieldN,'〜','');
第一次更新'花了1分钟。第二个花了1分40秒...
每次运行其中一个更新时,都需要比最后一个更多的时间。我跑了19分,最后一分钟差不多25分钟。每次更新所消耗的时间。一个接一个地增加。
另一件事是,第一次更新时,cpu利用率很低,现在最后一次更新需要100%
我有一个3节点的dc1.large实例集群。
我重新启动了群集,但问题仍在继续。
拜托,我需要找到解决问题的原因。
答案 0 :(得分:1)
更新列时,Redshift实际上会删除所有这些行,并使用新值插入新行。所以需要回收一大堆空间。所以你需要在更新后对你的表进行VACUUM。
他们还建议您在每次更新后运行ANALYZE以更新查询计划程序的统计信息。
答案 1 :(得分:0)
更优化的方式可能是
vacuum delete only <name_of_first_table>
Refrences
copy table from 's3://<your-bucket-name>/load/key_prefix' credentials 'aws_access_key_id=<Your-Access-Key-ID>;aws_secret_access_key=<Your-Secret-Access-Key>' options;