是否可以在 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 数据,您需要注意它们提交的顺序,以便相互呈现正确版本的数据。
我想在 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 数据,您需要注意它们提交的顺序,以便相互呈现正确版本的数据。