PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como posso escrever esta consulta postgres no Amazon redshift de forma que seja tão otimizada quanto no postgres?


A otimização do Redshift Query vem de Cluster, Table Design, DataLoading, Data Vacuuming &Analysis sobre a tabela.

Deixe-me responder a alguns pontos de contato principais na lista acima.1. Certifique-se de que sua tabela mytable, detail, client tenha SORT_KEY, DIST_KEY2. Certifique-se de que todas as suas tabelas em join sejam analisadas e esvaziadas corretamente.

Aqui está outra versão do seu mesmo SQL escrito no formato Redshift.

Alguns ajustes que fiz são
  1. Usado "Com cláusula" para computação otimizada em nível de cluster
  2. Use as associações da maneira correta e certifique-se de que as associações à esquerda/direita são importantes com base em dados.
  3. Usado date_range com tabela de cláusulas para tipo de orientação a objetos.
  4. Usado Group By no SQL principal abaixo.

Minha versão do Redshift SQL
/** Date Range Computation **/
with date_range as (
    select ( current_Date - interval '2 weeks' ) as two_weeks
),
/** Filter main ResultSet**/
myGroupSet as (
    SELECT b.val AS myGroup,
           c.username,
           a.someCode,
           a.timeTaken,
           (case when (b.name == 'name1') THEN b.val::INTEGER ELSE 0 END ) as name11,
           (case when (b.name == 'name2') THEN b.val::INTEGER ELSE 0 END ) as name12
      FROM database.myTable a,
      join date_range dr on a.date > dr.two_weeks
      join database.detail b on b.id = a.id
      join database.client c on c.c_id = a.c_id
     where a.date > current_Date - interval '2 weeks'
)
/** Apply Aggregation **/
select myGroup, username, someCode, timeTaken, date,
       sum(name1), sum(name2)
  from myGroupSet
  group by myGroup, username, someCode, timeTaken, date