1 SQL Model Clausule 28 november 2006 Rob van Wijk
2 Onderwerpen Introductie Syntax Pauze Voorbeelden op internet Prestaties Alternatieven Conclusie
3 Introductie Uitbreiding op SQL’s SELECT-commando Behandel data als multidimensionale arrays Complexe berekeningen over rijen heen Syntax die lijkt op logisch programmeren (Prolog) Voorkom exporteren naar externe applicaties zoals Excel Geen meerdere uit de pas lopende kopieën op verschillende PC’s meer
4 Syntax: het basisconcept verdeel de kolommen in drie groepen: PARTITION, DIMENSION en MEASURES Iedere partitie is een apart array (vergelijk partitie bij analytische functie), partitie is optioneel De dimensies identificeren iedere cel in iedere partitie, bijvoorbeeld: sal[7839] = 3000; 7839 is de dimensie De meetwaarden zijn analoog aan de feitentabellen in een gegevenspakhuis: typisch numerieke kolommen, bijvoorbeeld: sal[7839] = 3000; sal is meetwaarde De regels (RULES) vertellen hoe de data gemanipuleerd moet worden
5 Syntax: eenvoudige voorbeelden Een model clausule die niets doet Toevoegen van een extra rij aan het resultaat RETURN UPDATED ROWS Verschil tussen MEASURES en PARTITION mc1.sql mc2.sql mc3.sql mc4.sql
6 Concept in een plaatje
7 Syntax: meer voorbeelden ANY CV() FOR Itereren Referentiemodellen Verschil NULL en NAV IS PRESENT, PRESENTV en PRESENTNNV mc5.sql mc6.sql mc7.sql mc8.sql mc9.sql mc10.sql mc11.sql
8 Syntax: het complete plaatje MODEL [ ] [MAIN ] [PARTITION BY ( )] DIMENSION BY ( ) MEASURES ( ) [ ] [RULES] (,,.., ) ::= ::= RETURN {ALL|UPDATED} ROWS ::= [IGNORE NAV | [KEEP NAV] [UNIQUE DIMENSION | UNIQUE SINGLE REFERENCE] ::= [UPDATE | UPSERT | UPSERT ALL] [AUTOMATIC ORDER | SEQUENTIAL ORDER] [ITERATE ( ) [UNTIL ]] ::= REFERENCE ON ON ( ) DIMENSION BY ( ) MEASURES ( )
9 Voorbeelden op internet Draaitabel (Lucas Jellema) Financieel plaatje (Mark Rittman) Fibonacci (Anthony Molinaro) Nummergenerator (Ant/AskTom) OTN-vraag mc12.sql mc13.sql mc14.sql mc15.sql mc16.sql
10 Prestaties Interne hash-tabellen Explain plan MODEL {ORDERED [FAST] | ACYCLIC [FAST] | CYCLIC} WINDOW (IN MODEL) SORT mc17.sql
11 Alternatieven Vorige voorbeelden mc2a.sql t/m mc16a.sql
12 Conclusies Hoge leercurve Belasting van CPU en geheugen, niet van de schijven Er is ontzettend veel meer mogelijk in SQL, dankzij de modelclausule Geschikt voor vooruitberekeningen / budgetteringen SQL is zonder de modelclausule vaak al goed genoeg voor de dagelijkse praktijk