是否可以在 Redshift 中并行 运行 查询?

Is it possible to run queries in parallel in Redshift?

我想在 Redshift 中同时进行插入和更新。为此,我将数据插入临时 table,从原始 table 中删除更新的条目并插入所有新的和更新的条目。由于 Redshift 使用并发,有时条目会重复,因为删除在插入完成之前开始。为每个操作使用非常大的睡眠不会发生这种情况,但是脚本非常慢。是否可以在 Redshift 中并行 运行 查询?

希望有人能帮助我,在此先感谢!

begin transaction;

<run the queries in parallel>

end transaction;

在这种特定情况下执行此操作:

create temp table stage (like target); 

insert into stage 
select * from source 
where source.filter = 'filter_expression'; 

begin transaction;

delete from target 
using stage 
where target.primarykey = stage.primarykey; 
insert into target 
select * from stage;

end transaction;

drop table stage;

参见:

您应该阅读 MVCC(多版本一致性控制)和事务。 Redshift 一次只能 运行 一个查询(对于一个会话),但这不是问题所在。您希望同时提交这两个更改(提交是使更改对其他人显而易见的操作)。您可以通过将 SQL 语句包装在一个事务 (BEGIN ... COMMIT) 中并在同一个会话中执行(不清楚您是否使用多个会话)来执行此操作。在事务中所做的所有更改仅对进行更改的会话可见,直到提交时事务所做的所有更改将同时对所有人可见。

需要注意的几件事 - 如果您的连接处于 AUTOCOMMIT 模式,那么您可能会提前中断事务并提交部分结果。此外,当您处理交易时,您的来源 table 信息是不变的(因此您在交易期间看到一致的数据)并且此信息不允许为您更改。这意味着如果您有多个会话更改 table 数据,您需要注意它们提交的顺序,以便相互呈现正确版本的数据。