Redshiftクエリの最適化は、クラスター、テーブルデザイン、DataLoading、データバキューム、およびテーブルの分析から行われます。
上記のリストのいくつかのコアタッチポイントに答えさせてください。テーブルがmytable、detail、クライアントに適切なSORT_KEY、DIST_KEY2があることを確認してください。結合しているすべてのテーブルが適切に分析され、空になっていることを確認してください。
これは、Redshift形式で記述された同じSQLの別のバージョンです。
私が行った微調整はほとんどありません
- 「WithClause」を使用してクラスターレベルの計算を最適化
- 使用済み結合は適切な方法で行われ、データに基づいて左右の結合が重要であることを確認してください。
- オブジェクト指向の種類に句テーブルとともにdate_rangeを使用しました。
- 以下のメインSQLで使用されるGroupBy。
私のバージョンのRedshiftSQL
/** 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