sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo puedo escribir esta consulta de postgres en Amazon redshift para que esté tan optimizada como en postgres?

La optimización de Redshift Query proviene de Cluster, Table Design, DataLoading, Data Vacuuming &Analyzing over the table.

Permítanme responder algunos puntos de contacto centrales en la lista anterior.1. Asegúrese de que su tabla mytable, detail, client tenga SORT_KEY, DIST_KEY2 correctos. Asegúrese de que todas sus tablas en combinación estén analizadas y limpiadas correctamente.

Aquí hay otra versión de su mismo SQL escrito en formato Redshift.

Algunos ajustes que hice son

  1. Usó "Con cláusula" para el cálculo de nivel de clúster optimizado
  2. Use las uniones de la manera adecuada y asegúrese de que la unión izquierda/derecha sea importante según los datos.
  3. Se usó el rango de fechas con la tabla de cláusulas para el tipo de orientación de objetos.
  4. Utilizó Agrupar por en el SQL principal a continuación.

Mi versión de 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