Académique Documents
Professionnel Documents
Culture Documents
5 6
7 8
Traduction de la jointure Traduction requête complexe
SELECT sum(l_extendedprice) / 7.0 AS avg_yearly
• Jointure par partitionnement FROM (SELECT l_partkey, 0.2* avg(l_quanTty) AS t1
FROM lineitem GROUP BY l_partkey) AS inner,
(SELECT l_partkey,l_quanTty,l_extendedprice
– Map : étiqueter chaque relation, exposer attribut(s) FROM lineitem, part
WHERE p_partkey = l_partkey) AS outer
de jointure comme clé WHERE outer.l_partkey = inner.l_partkey; AND outer.l_quanTty <
inner.t1;
– Reduce : fusionner les valeurs de la même clé
La requête R et son arbre algébrique
John, eng, Paris (eng, John) (eng, John) John, 35K Agg1
Emp Liz, doc, Lyon (doc, Liz) (eng, 35K) Map : lineitemà(l_partkey,l_quanTty)
Ben, music, Paris (music,Ben) Reduce : v = 0.2* avg(l_quanTty)
Liz, 50K Join1
Traduction de R
(doc, Liz) Map : lineitemà(l_partkey, (l_quanTty, l_extendedprice) )
eng, 35K (eng, 35K) (doc, 50K) partà(l_partkey, null) en MapReduce
Reduce : jointure
Sal doc, 50K (doc, 50K) Ben, 20K Join2
music, 20K (music,20K) (music,Ben) Map : innerà(l_partkey,v)
(music,20K) outer à(l_partkey,(l_quanTty , l_extendedprice))
Reduce : jointure
Entrée Map Reduce Agg2 …
Shuffle
9 10
Agg1
Join2
Map : lineitemà(l_partkey,l_quanTty) Map : innerà(l_partkey,v)
Reduce : v = 0.2* avg(l_quanTty) – partitionnement final outer à(l_partkey,(l_quanTty ,
Join1 l_extendedprice))
Map : lineitemà(l_partkey, (l_quanTty, l_extendedprice) )
Traduction de R
partà(l_partkey, null) en MapReduce Reduce : jointure
Reduce : jointure
Agg2 …
Join2
Map : innerà(l_partkey,v)
outer à(l_partkey,(l_quanTty , l_extendedprice))
Coût communication !! La traduction de R
Reduce : jointure
Agg2 …
11 12
Traduction optimisée
• Redondance Agg1
– Lectures Map : lineitemà(l_partkey,l_quanTty)
Agg2 1 seul job à Input correlation (IC) Reduce : 0.2* avg =v
Join Join1
Map : l_extendedprice Map : lineitemà(l_partkey, (l_quanTty,
lineitemà(p_partkey , (l_quanTty l_extendedprice) )
l_extendedprice)) Join 2 partà(l_partkey, null)
– partitionnement initial
partà(l_partkey, null) l_partkey à transit correlation (TC) Reduce : jointure
Reduce : l_partkey
Join2
agg1 sur l_quanTty Agg1 Map : innerà(l_partkey,v)
join1 sur l_partkey = p_partkey
Join 1 outer à(l_partkey,(l_quanTty ,
l_partkey – partitionnement final : l_extendedprice))
join2 sur l_partkey = l_partkey l_partkey p_partkey
à Jobflow correlation (JFC) Reduce : jointure
Agg 2
lineitem lineitem part Agg2 …
…
La traduction de R
13 14
Gain
15 16
Règle 1 Règle 2
si IC (J1, J2) et TC (J1, J2) alors Fusionner (J1, J2) si J2 : agrégation, JFC(J1,J2) et J2 parent de J1 alors
Fusionner (J1, J2)
J2
J1
J1 J2
lineitem orders
18
lineitem orders
lineitem orders lineitem lineitem orders
17 18
Règle 3 Exemple
R(A,B) S(B,C) et T(B,D) trois schémas de relations
Q = R S agg(T) agg(S)
si JFC(J3,J1), JFC(J3,J2), TC(J1,J2) et J1<J2<J3
Les corrélations : TC(T1,T4), JFC(T3,T1), JFC(T5,T3), JFC(T5,T4)
alors exécuter J3 pendant reduce de J1,J2 T5 JOIN3
T3 JOIN2
R1
si IC (J1, J2) et TC (J1, J2) alors T4 AGG2
Fusionner (J1, J2)
J3
Si J2 : agrégation, JFC(J1,J2) et T1 JOIN1
R2 J2 parent J1 alors Fusionner (J1, T2 AGG1
J1 J2
J2) S
lineitem orders
19 R3
si JFC(J3,J1), JFC(J3,J2),
TC(J1,J2) et J1<J2<J3 T R S
lineitem orders lineitem 19 alors exécuter J3 pendant reduce
de J1,J2
Résultat : T2, T1435
(2 tâches)
19 20
Exemple Autres techniques d’optimisation
R(A,B) S(B,C) et T(B,D) trois schémas de relations
• Logiques
Q = R S agg(T) agg(S)
Les corrélations : TC(T1,T4), JFC(T3,T1), JFC(T5,T3), JFC(T5,T4) – Jointures n-aires en une seule tache
T5 JOIN3
– Pousser sélection et projetions
si IC (J1, J2) et TC (J1, J2) alors
R1 Fusionner (J1, J2)
T3 JOIN2
– Réécriture de requêtes avec corrélation
T4 AGG2
R2
Si J2 : agrégation, JFC(J1,J2) et
J2 parent J1 alors Fusionner (J1, • Basées sur le coût
J2) T2 AGG1
si JFC(J3,J1), JFC(J3,J2),
T1 JOIN1
S – Développements en cours
TC(J1,J2) et J1<J2<J3
R3 alors exécuter J3 pendant reduce
de J1,J2
T
R4
si JFC(J3,J1), JFC(J3,J2) et J2<J1 R S
alors fusionner (J1, J3)
Résultat : T14, T2, T35
(3 tâches) 22