Alles over groeperen Rollups, Cubes, Grouping Sets en hun interne werking Rob van Wijk 22 september 2014
Wie ben ik Rob van Wijk 22 september 2014 Oracle ontwikkelaar Utrecht
Alles Over Groeperen Inleiding GROUPING SETS ROLLUP CUBE Combineren / rekenen Ondersteunende functies Interne werking Onderwerpen 22 september 2014
Alles Over Groeperen Inleiding 22 september 2014 aog1.sql
Alles Over Groeperen GROUP BY col 1, …, col n ≡ GROUP BY GROUPING SETS ( (col 1, …, col n ) ) GROUPING SETS (1) 22 september 2014 aog2.sql
Alles Over Groeperen GROUP BY GROUPING SETS ( (col 11, …, col 1n ), …, (col x1, …, col xm ) ) ≡ GROUP BY col 11, … col 1n UNION ALL … UNION ALL GROUP BY col x1, …, col xm GROUPING SETS (2) 22 september 2014 aog3.sql
Alles Over Groeperen GROUP BY ROLLUP ( set 1, …, set n ) ≡ GROUP BY GROUPING SETS ( (set 1, …, set n ), (set 1, …, set n-1 ), …, set 1, () ) ROLLUP (1) 22 september 2014
Alles Over Groeperen ROLLUP (set 1, …, set N ) met N ≥ 1 leidt tot N+1 GROUPING SETS ROLLUP (2) 22 september 2014
Alles Over Groeperen Voorbeeld: GROUP BY ROLLUP ( (deptno), (job,mgr), (empno) ) ≡ GROUP BY GROUPING SETS ( (deptno,job,mgr,empno), (deptno,job,mgr), (deptno), () ) ROLLUP (3) 22 september 2014 aog4.sql
Alles Over Groeperen GROUP BY CUBE ( set 1, …, set n ) ≡ GROUP BY GROUPING SETS (alle mogelijke combinaties tussen () en (set 1, …, set n ) ) CUBE (1) 22 september 2014
Alles Over Groeperen CUBE (set 1, …, set N ) met N ≥ 1 leidt tot 2 N GROUPING SETS CUBE (2) 22 september 2014
Alles Over Groeperen CUBE (3) 22 september sets X 1 set 2 sets 3 sets 4 sets Volgens de driehoek van Pascal
Alles Over Groeperen Voorbeeld: GROUP BY CUBE ( (deptno), (job,mgr), (empno) ) ≡ GROUP BY GROUPING SETS ( (deptno,job,mgr,empno), (deptno,job,mgr), (deptno,empno), (job,mgr,empno), (deptno), (job,mgr), (empno), () ) CUBE (4) 22 september 2014 aog5.sql
Alles Over Groeperen GROUP BY deptno, ROLLUP(empno) ? Combineren / rekenen (1) 22 september 2014
Alles Over Groeperen GROUP BY deptno, ROLLUP(empno) ≡ GROUP BY GROUPING SETS (deptno), GROUPING SETS ( empno, () ) Combineren / rekenen (2) 22 september 2014
Alles Over Groeperen Cartesisch product ! GROUP BY deptno, ROLLUP(empno) ≡ GROUP BY GROUPING SETS (deptno), GROUPING SETS ( (empno), () ) ≡ GROUP BY GROUPING SETS ( (deptno,empno), (deptno) ) Combineren / rekenen (3) 22 september 2014 aog6.sql
Alles Over Groeperen Vraag: Hoeveel grouping sets levert dit op? GROUP BY ROLLUP(deptno,job), CUBE(mgr,hiredate) Antwoord: 3 * 4 = 12 Combineren / rekenen (4) 22 september 2014 aog7.sql
Alles Over Groeperen GROUPING GROUPING_ID GROUP_ID Ondersteunende functies 22 september 2014 aog8.sql
Alles Over Groeperen SORT GROUP BY versus HASH GROUP BY Interne werking 22 september 2014
Alles Over Groeperen Interne werking: ROLLUP (deptno,empno) 22 september NULL NULL NULL NULL inkomende verzameling grouping set ( (deptno,empno) ) grouping set ( () ) grouping set ( (deptno) ) SORT GROUP BY aog9.sql
Alles Over Groeperen Interne werking: CUBE(deptno,job) 22 september 2014 SORT GROUP BY GENERATE CUBE SORT GROUP BY inkomende verzameling grouping set (deptno,job) 14 rijen 9 rijen 36 rijen 18 rijen aog10.sql
Alles Over Groeperen Interne werking: GROUPING SETS (1) 22 september 2014 LOAD AS SELECT (into input table) TABLE ACCESS FULL (EMP) TEMP TABLE TRANSFORMATION VIEW TABLE ACCESS FULL (output table) tijdelijke inputtabel SYS_TEMP_... tijdelijke outputtabel SYS_TEMP_... LOAD AS SELECT (into outputtabel) HASH GROUP BY TABLE ACCESS FULL (input tabel) itereer zo vaak als dat er grouping sets zijn aog11.sql
Alles Over Groeperen Optimalisatie naar ROLLUP of CUBE executie indien mogelijk ? Interne werking: GROUPING SETS (2) 22 september 2014 aog12.sql
Alles Over Groeperen Vragen? 22 september 2014