PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come posso scrivere questa query postgres in Amazon redshift in modo che sia ottimizzata come in postgres?

L'ottimizzazione della query Redshift deriva da Cluster, Table Design, DataLoading, Data Vacuuming &Analyzing sul tavolo.

Consentitemi di rispondere ad alcuni punti di contatto fondamentali nell'elenco precedente.1. Assicurati che la tabella, il dettaglio, il client della tabella abbia SORT_KEY, DIST_KEY2 corretto. Assicurati che tutte le tue tabelle in join siano analizzate e svuotate correttamente.

Ecco un'altra versione del tuo stesso SQL scritta in formato Redshift.

Poche modifiche che ho apportato sono

  1. Utilizzato "Con clausola" per ottimizzare il calcolo a livello di cluster
  2. Usato Join nel modo corretto e assicurati che il join sinistro/destro sia valido in base ai dati.
  3. Usato intervallo_data con tabella delle clausole per tipo di orientamento agli oggetti.
  4. Utilizzato Raggruppa per nell'SQL principale di seguito.

La mia versione di 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