Мой вариант использования заключается в том, чтобы извлекать, преобразовывать и загружать данные постепенно и в режиме реального времени из x числа функций Lambda.Я ожидаю, что несколько функций Lambda будут работать одновременно, а Redshift останется в живых для запросов на чтение.
Поскольку Redshift не применяет ограничения первичного ключа (-ей), я использую документацию aws Примеры слияния - Примерслияния, которое заменяет существующие строки для обеспечения уникальных строк.Этот метод отлично работает, когда работает только 1 экземпляр лямбда-функции.
-- Start a new transaction
begin transaction;
-- Delete any rows from SALES that exist in STAGESALES, because they are updates
-- The join includes a redundant predicate to collocate on the distribution key
-- A filter on saletime enables a range-restricted scan on SALES
delete from sales
using stagesales
where sales.salesid = stagesales.salesid
and sales.listid = stagesales.listid
and sales.saletime > '2008-11-30';
-- Insert all the rows from the staging table into the target table
insert into sales
select * from stagesales;
-- End transaction and commit
end transaction;
-- Drop the staging table
drop table stagesales;
Но как только> 1 лямбда-функция будет запущена одновременно и получит доступ к той же таблице, я получу:
"ERROR: 1023 DETAIL: Serializable isolation violation on table in Redshift" when performing operations in a transaction concurrently with another session.
Как мне изменить этот пример, чтобы он мог работать в параллельной среде?