Quelle est la meilleure façon de structurer/écrire une requête dans Hive quand j'ai une sous-requête complexe répétée plusieurs fois dans l'instruction select?Hive - comment réutiliser une sous-requête dans la ruche avec des performances optimales
J'ai créé à l'origine une table temporaire pour la sous-requête qui a été actualisée avant chaque exécution. Ensuite, j'ai commencé à utiliser un CTE dans le cadre de la requête d'origine (en supprimant la table temporaire) pour la lisibilité et j'ai remarqué une dégradation des performances. Cela m'a rendu curieux de savoir quelles méthodes d'implémentation sont les meilleures en termes de performances lorsque vous avez besoin de réutiliser des sous-requêtes.
Les données avec lesquelles je travaille contiennent plus de 10 millions d'enregistrements. Voici un exemple de la requête que j'ai écrite qui a fait usage d'un 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;