select文を通して複数回繰り返される複雑なサブクエリがある場合、Hiveでクエリを構造化/書き込む最良の方法は何ですか?ハイブ - 最適なパフォーマンスでハイブ内のサブクエリを再利用する方法
私はもともと、各実行前にリフレッシュされたサブクエリ用の一時テーブルを作成しました。次に、元のクエリの一部としてCTEを使用して(一時表を破棄して)、可読性とパフォーマンスの低下に気付きました。これにより、サブクエリを再利用する必要がある場合に、パフォーマンスに関してどの実装方法が最も良いかがわかりました。
私が扱っているデータには、1,000万件以上のレコードが含まれています。以下は、CTEを使用して作成したクエリの例です。
with temp as (
select
a.id,
x.type,
y.response
from sandbox.tbl_form a
left outer join sandbox.tbl_formStatus b
on a.id = b.id
left outer join sandbox.tbl_formResponse y
on b.id = y.id
left outer join sandbox.tbl_formType x
on y.id = x.typeId
where b.status = 'Completed'
)
select
a.id,
q.response as user,
r.response as system,
s.response as agent,
t.response as owner
from sandbox.tbl_form a
left outer join (
select * from temp x
where x.type= 'User'
) q
on a.id = q.id
left outer join (
select * from temp x
where x.type= 'System'
) r
on a.id = r.id
left outer join (
select * from temp x
where x.type= 'Agent'
) s
on a.id = s.id
left outer join (
select * from temp x
where x.type= 'Owner'
) t
on a.id = t.id;