1 sql model clausule 28 november 2006 rob van wijk

Post on 04-Jun-2015

216 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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[<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>

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

top related