私は次のようなクエリを持っています
sel
tb1.col1,
tb4.col2,
(case WHEN t4.col4 in (<IN LIST with more than 1000 values!>) then T4.Col7
Else "Flag" ) as "Dcol1",
Sum ( tb3.col1),
sum (tb3.col2 ),
sum (tb2.col4)
etc
from
tb1 left outer join tb2 <condition> LOJ tb3 <conditions>
where tb1 condition and tb2 condition and tb3 condition
group by ( case <condition> , colx.tb2,coly.tb1
問題は、TB3 と TB4 が巨大なファクト テーブルであることです。ファクト テーブルの PI は、ここでの結合またはクエリには含まれません。
これまでに行ったこと
揮発性テーブル( IN LIST と同じ pi )を作成し、具体化しようとしました。VT1 には TB4 と同じ PI があり、where 句に IN LIST が含まれます。私はアプローチを使用してこれをLOJします
select
....
CASE WHEN Dtb1.c1 IS NOT NULL
THEN ft."CustomColumName"
ELSE 'ALL OTHER'
end as "CustomColumName"
from "Db"."FACTTablew5MillionRows" as ft
left join VolatileTable Dtb1
on Dtb1.c1=ft.C1
これらの種類のクエリを最適化する方法 tb3 と tb2 が巨大なファクト テーブルであるとします。PI TB3 は C4、c6 であり、tb2 の PI は C6、C7 です。TB3 にはパーティション列 Cp がありますが、どのような where 句にも使用されません。同じ PI を持たない結合の 1 つで使用されますが、PI の行数内で共通の列を持つ可能性があります。元のクエリは、スプールアウトしないと実行できません。幸いなことに、夜は 80K Impact C で実行できました。tb2 と同じ PI で VT2 を作成し、それを使用して参加した後、クエリを < 200 Impact でのみ実行できました。TD についてスクワットを知っている BO ユーザーが使用する VT の束を作成したくありません。この Q を改善するにはどうすればよいですか