使用另一个表进行更新后,RedShift表行将重复

时间:2018-10-19 13:27:32

标签: amazon-web-services sql-update amazon-redshift

主表:

CREATE TABLE ca_ger.cln_trans_base (
  store_code VARCHAR(25),
  year_week varchar(25),
  division VARCHAR(25) encode lzo,
  market_share_code VARCHAR(25) encode bytedict,
  pon   VARCHAR(25) encode lzo,
  osp_price REAL encode bytedict
)
diststyle key distkey(store_code)
sortkey(store_code,year_week); 

COMMIT;

第二张表:

CREATE TABLE ca_ger.divisions(
  store_code VARCHAR(25),
  year_week varchar(25),
  division VARCHAR(25) encode lzo
)
diststyle key distkey(store_code)
sortkey(store_code,year_week); 

COMMIT; 

alter table ca_ger.cln_Trans_base
add column division(varchar 25);

加入条款:

update ca_ger.cln_trans_base 
 set division=b.division 
from ca_Ger.cln_trans_base a 
  join divisions b on a.year_week=b.year_week;

此后,我运行了vacuumanalyze。之后,我检查了统计信息表,并将行加倍。

2 个答案:

答案 0 :(得分:1)

扩展@a_horse的建议,UPDATE语句不应重复要更新的表。而是使用:

UPDATE ca_ger.cln_trans_base a
SET division = b.division 
FROM divisions b
WHERE a.year_week = b.year_week;

请参阅:PostgreSQL UPDATE Join with A Practical Example

答案 1 :(得分:0)

在Amazon Redshift中,

  

Update = DELETE + INSERT

因此您的行大小增加了一倍。因为您可能正在更新所有行。

在每次更新后或按计划进行,您应该按照注释之一的建议进行full Vaccum

VACUUM FULL cln_trans_base

它将尺寸减小一半。 希望对您有帮助。