【问题标题】:Is it possible to run queries in parallel in Redshift?是否可以在 Redshift 中并行运行查询?
【发布时间】:2021-09-09 10:07:17
【问题描述】:

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

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

【问题讨论】:

    标签: amazon-web-services amazon-redshift


    【解决方案1】:

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

    需要注意的一些事项 - 如果您的连接处于自动提交模式,那么您可能会提前中断事务并提交部分结果。此外,当您在事务中工作时,您的源表信息是不变的(因此您在事务期间会看到一致的数据),并且不允许您更改此信息。这意味着,如果您有多个会话更改表数据,则需要注意它们提交的顺序,以便将正确版本的数据呈现给彼此。

    【讨论】:

      【解决方案2】:
      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;
      

      见:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多