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
- Usado "Com cláusula" para computação otimizada em nível de cluster
- Use as associações da maneira correta e certifique-se de que as associações à esquerda/direita são importantes com base em dados.
- Usado date_range com tabela de cláusulas para tipo de orientação a objetos.
- 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