12
1 SQL Model Clausule 28 november 2006 Rob van Wijk

1 SQL Model Clausule 28 november 2006 Rob van Wijk

Embed Size (px)

Citation preview

Page 1: 1 SQL Model Clausule 28 november 2006 Rob van Wijk

1

SQL Model Clausule

28 november 2006

Rob van Wijk

Page 2: 1 SQL Model Clausule 28 november 2006 Rob van Wijk

2

Onderwerpen

• Introductie

• Syntax

Pauze

• Voorbeelden op internet

• Prestaties

• Alternatieven

• Conclusie

Page 3: 1 SQL Model Clausule 28 november 2006 Rob van Wijk

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

Page 4: 1 SQL Model Clausule 28 november 2006 Rob van Wijk

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

Page 5: 1 SQL Model Clausule 28 november 2006 Rob van Wijk

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

Page 6: 1 SQL Model Clausule 28 november 2006 Rob van Wijk

6

Concept in een plaatje

Page 7: 1 SQL Model Clausule 28 november 2006 Rob van Wijk

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

Page 8: 1 SQL Model Clausule 28 november 2006 Rob van Wijk

8

Syntax: het complete plaatje

MODEL[<global reference options>][<reference models>][MAIN <main-name>] [PARTITION BY (<cols>)] DIMENSION BY (<cols>) MEASURES (<cols>) [<reference options>] [RULES] <rule options> (<rule>, <rule>,.., <rule>)

<global reference options> ::= <reference options> <ret-opt> <ret-opt> ::= RETURN {ALL|UPDATED} ROWS <reference options> ::= [IGNORE NAV | [KEEP NAV] [UNIQUE DIMENSION | UNIQUE SINGLE REFERENCE] <rule options> ::= [UPDATE | UPSERT | UPSERT ALL] [AUTOMATIC ORDER | SEQUENTIAL ORDER] [ITERATE (<number>) [UNTIL <condition>]] <reference models> ::= REFERENCE ON <ref-name> ON (<query>) DIMENSION BY (<cols>) MEASURES (<cols>) <reference options>

Page 9: 1 SQL Model Clausule 28 november 2006 Rob van Wijk

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

Page 10: 1 SQL Model Clausule 28 november 2006 Rob van Wijk

10

Prestaties

• Interne hash-tabellen

• Explain plan

• MODEL {ORDERED [FAST] | ACYCLIC [FAST] | CYCLIC}

• WINDOW (IN MODEL) SORT

mc17.sql

Page 11: 1 SQL Model Clausule 28 november 2006 Rob van Wijk

11

Alternatieven

• Vorige voorbeelden mc2a.sql t/m mc16a.sql

Page 12: 1 SQL Model Clausule 28 november 2006 Rob van Wijk

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