ОШИБКА: НЕ МОЖЕТ РАСПАРАЛЛИЗОВАТЬ ЗАЯВЛЕНИЕ ОБНОВЛЕНИЯ, КОТОРОЕ ОБНОВЛЯЕТ СТОЛБЦЫ РАСПРЕДЕЛЕНИЯ

При попытке скопировать данные из источника (MSSQLSERVER) В цель (базу данных greenplum) с помощью сервера talend ETL.

Описание: при выполнении оператора UPDATE для GreenPlum выдается указанная ошибка.

ДАННО

Количество записей, загружаемых в цель, составляет ~ 0,3 миллиона.

Обновление завершается с ошибкой

 ERROR: CANNOT PARALLELIZE AN UPDATE STATEMENT THAT UPDATES THE DISTRIBUTION COLUMNS current transaction is aborted, commands ignored until end of transaction block

Любая помощь в этом будет высоко оценена

Решение, которое я пробовал:

Когда ON_ERROR_ROLLBACK включен, psql будет выдавать SAVEPOINT перед каждой командой, которую вы отправляете в greenplum.

gpadmin=# \set ON_ERROR_ROLLBACK interactive

Но после этого мы попытались запустить ту же работу, и это не решило проблему.

введите здесь описание изображения


person NEO    schedule 28.04.2017    source источник


Ответы (1)


1) Обновление не поддерживается в Hawq. 2) Обновление поддерживается только для кучи, но не для таблицы AO в GPDB. GPDB/HAWQ используются в качестве хранилища данных/BI и для исследования данных.

person Sung Yu-wei    schedule 28.04.2017
comment
В GPDB Когда я использую синтаксис хранилища кучи, подобный этому CREATE TABLE foo (a int, b text) DISTRIBUTED BY (a); - person NEO; 28.04.2017
comment
Также задание завершается с зависанием, а через некоторое время выдает ошибку - person NEO; 28.04.2017
comment
вы не можете обновить ключ распространения. так работает МПП. - person Sung Yu-wei; 28.04.2017
comment
Обновление поддерживается в таблицах AO, так как они оптимизированы для добавления :) - person Balazs Gunics; 01.05.2017
comment
@BalazsGunics, поэтому хранилище таблиц должно быть АО, а не кучей? тогда обновление будет работать на нем - person NEO; 01.05.2017
comment
Мне нужно обновлять ~ 0,3 миллиона строк при каждом запуске задания. когда я пытаюсь выполнить задание. Ни одна строка не обновляется из-за ОШИБКИ: НЕ МОЖЕТ РАСПАРАЛЛИЗОВАТЬ ЗАЯВЛЕНИЕ ОБНОВЛЕНИЯ, КОТОРОЕ ОБНОВЛЯЕТ СТОЛБЦЫ РАСПРЕДЕЛЕНИЯ - person NEO; 01.05.2017
comment
ключ распределения используется, чтобы решить, какой сегмент должен хранить строки вашей таблицы. Обновлять дистрибутив не имеет смысла. Зачем менять ключ распределения? вы пытаетесь перетасовать данные? - person Sung Yu-wei; 01.05.2017
comment
salesorder является первичным ключом, а также ключом распределения. Для обновления схема должна иметь ключ. - person NEO; 01.05.2017