Строки таблицы RedShift дублируются после обновления с использованием другой таблицы - PullRequest
0 голосов
/ 19 октября 2018

Основная таблица:

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;

После этого я побежал vacuum и analyze.После этого я проверил таблицу статистики и строки удвоились.

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

В Amazon Redshift

Update = DELETE + INSERT

Следовательно, размер ваших строк удваивается.Поскольку вы, возможно, обновляете все строки.

После каждого обновления или по расписанию вы должны делать full Vaccum, как предложено в одном из комментариев.

VACUUM FULL cln_trans_base

Это уменьшитразмер до половины.Надеюсь, это поможет вам.

0 голосов
/ 20 октября 2018

Расширяя предложение @ 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 с практическим примером

...