SlideShare ist ein Scribd-Unternehmen logo
1 von 50
Analytische Funktionen leicht gemacht

Data Cartridges für
Data Warehouses


Gero Knapstein
Solution Architect
OPITZ CONSULTING Gummersbach GmbH


DOAG Konferenz, November 2010, Nürnberg

                  Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 1
Leistungs-               Kunden                                               Tätigkeits-            Fakten
angebot                                                                       felder
Java                    Branchen-                                           IT-Strategie          Gründung 1990
SOA/BPM                  übergreifend                                        Beratung              400 Mitarbeiter
ORACLE                  Über 600                                            Implementierung       8 Standorte in
BI/DWH                   Kunden                                              Betrieb                D/PL/CH
Outtasking                                                                   Training
                       Industrie / Versorger /          Handel / Logistik /
                         Telekommunikation              Dienstleistungen
                                         29%            29%




                                                 42%
                                      Öffentliche Auftraggeber /
                                     Banken & Versicherungen /
                                         Vereine & Verbände




              Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 2
Agenda
1.   Funktionen im Vergleich

2.   Grundlage für den Eigenbau:
     Das Oracle Data Cartridge Interface (ODCI)

3.   Erstellung einer analytischen Funktion (Data Cartridge)
      Wann sollte ich analytische Funktionen selbst schreiben?
      ODCIAggregate und Data-Cartridge-Komponenten
      Demos


4.   Eigene nützliche Data Cartridges
      Demo: DISTLISTAGG und HISTCHECK


5.   Data Cartridge Nutzung im OWB


                 Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 3
1   Funktionen im Vergleich




        Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 4
Funktionen im Vergleich
Funktionstyp             Single Row                             Aggregate                              Analytic
                          Function                              Function                               Function
Quellzeilen                        1                      group by partition                   Group by Partition
                                                             (unsortiert)                          (sortiert,
                                                                                              Window-Submenge)

Rückgabezeilen                     1                                      1                    Group by Partition

Implementierung       Create                            create type <type> … ODCIAggregate…
                      Function
                      as <body>                         create Function … aggregate using <type>

Nutzung in SQL               Fkt (col)                             Fkt (col)                        Fkt (col) over
                                                                      …                           (partition by col2
                                                                [group by …]                        order by col3
                                                                                                 rows between …)

               Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 5
Zeilenbasierte Funktion
 Select
  MY_FUNCTION („Quelle“)                                      Quelle                                       Ziel
  as „Ziel“
                                                                   2                                         2‘
  …
                                                                   3                                         3‘
                                                                   1                                         1‘
                                                                   5                                         5‘
                                                                   4                                         4‘
                                                                   2                                         2‘
                                                                   3                                         3‘




          Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 6
Aggregierende Funktion
 Select
  SUM („Quelle“)                                               Quelle                                       Ziel
  as „Ziel“
                                                                    2
  …
                                                                    3
                                                                    1
                                                                    5                                        20‘
                                                                                                             17‘
                                                                                                             15‘
                                                                                                             11‘
                                                                                                              6‘
                                                                                                              5‘
                                                                                                              2‘
                                                                    4
                                                                    2
                                                                    3




           Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 7
Analytische Funktion
 Select
  SUM („Quelle“)                                               Quelle                                       Ziel
  as „Ziel“                                                         1                                         2‘
                                                                    4                                         5‘
  OVER ( )
                                                                    2                                         6‘
         PARTITION BY …
                                                                    3                                        11‘
         ORDER BY …
                                                                    2                                        15‘
  ROWS BETWEEN                                                      5                                        17‘
  UNBOUNDED PRECEDING                                               3                                        20‘
  AND CURRENT ROW




           Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 8
Grundlage für den Eigenbau:
3   Oracle Data Cartridge Interface




         Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 9
Oracle Data Cartridge Interface (ODCI)
 Basiert auf „Oracle Extensibility Architecture“-Framework
 Ermöglicht funktionalen Ausbau des DB-Servers
  mit Data Cartridges
 Seit Oracle 8; einmalige Signatur-Änderungen mit 9i




            Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 10
Oracle Data Cartridge Interface (ODCI)
 Interfaces

   ODCIIndex
     Implementiert eigene Domain-Indexes
     Beispiel: Oracle TEXT Option


   ODCIStats
     Implementiert CBO-Statistiken für Domain-Indexes


   ODCITable
     In PLSQL nativ integriert
     Implementiert Table Functions für andere Dialekte


   ODCIAggregate
     Implementiert Aggregate / Analytic Functions


               Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 11
Data Cartridges – Eigenschaften
 Bedarfsspezifische Implementierung eines ODCI-Interface
 Pluggable DB Server Extension
 Packaged: Sourcen können gewrapped werden
  (Urheberschutz)
 Hohe Uprade-Sicherheit (stabile API seit Oracle9i)
 Generisch nutzbar nach SQL-Standards
 Unterstützt DB-Wartungsmaßnahmen (z. B. Export, Import)




            Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 12
Data Cartridges – Einsatzmöglichkeiten

 Unternehmenslösung generisch nutzen

 atomare Logik kapseln / modularisieren

 Oracle bietet keine vergleichbare Lösung

 leichte Wartbarkeit ist wichtig

 Vereinfachung komplexer SQL-Statement

 leicht verständliche Anwendbarkeit in SQL




             Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 13
Erstellung einer
3   analytischen Funktion (Data Cartridge)




        Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 14
Zwei Stored Objects erstellen …
 Create Type my_aggregate_type …
  (Spec nach festen Interface-Vorgaben)

 Create Type Body my_aggregate_type …

 Create Function my_agg (…) return <type>
  [deterministic] [parallel_enable]
  aggregate using my_aggregate_type;

  (nur Deklaration; kein Body)


 Fertig!

            Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 15
ODCIAggregate fordert …
 ODCIAggregateInitialize                                           (mandatory static function)

 ODCIAggregateIterate                                              (mandatory member function)

 ODCIAggregateMerge                                                (mandatory member function)

 ODCIAggregateTerminate                                            (mandatory member function)



 ODCIAggregateDelete                                               (optional member function)




 ODCIAggregateWrapContext                                           (für externe Algorithmen)



            Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 16
ODCIAggregate
 Für jede Ergebniszeile wird
     ein „Aggregate Kontext“ erstellt:
     ein oder mehrere Objekte (Parallelverarbeitung) erzeugt (initialize),
     Eingangswerte verarbeitet (iterate, delete),
     Parallelverarbeitungen zu einem Objekt zusammengeführt (merge), und
     ein Ergebnis zurückgegeben (terminate).


       Initialize                       Iterate


                                                                                       Merge                     Terminate


       Initialize                       Iterate



                    Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 17
Aggregation Kontext
 Select my_sum(…)                                                                                                     Output
                                             Terminate Terminate Terminate
                                                  0
                                                  6
                                                  2          0
                                                             7
                                                             6           0
                                                                         8
                                                                         5
                                                                         7
                                              Initialize Initialize Initialize                        Terminate
                                                                                                           0
                                                                                                           4
                                                                                                           8
                                                                                                       Initialize
  over                                                                                                                    Input
  (partition by …                             Iterate                                    Delete                             2
   order by …                                  Copy
   rows between                               Iterate                Copy                              Delete               4
   1 preceding and
   1 following)                                                     Iterate              Copy                               1
  from …
                                                                                         Iterate                            3




 Implementierung von ODCIAggregateDelete macht Sinn!



           Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses       © OPITZ CONSULTING GmbH 2010   Seite 19
3   MY_SUM()




       Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 20
MY_SUM()

 Create Type MY_SUM_TYPE is object
 ( SUM Number
 , Static Function ODCIAggregateINITIALIZE(…)return                                                          number
 , Member Function ODCIAggregateITERATE   (…)return                                                          number
 , Member Function ODCIAggregateMERGE     (…)return                                                          number
 , Member Function ODCIAggregateTERMINATE (…)return                                                          number
 );

 Create Type Body MY_SUM_TYPE IS
   …
 END;


 Create Function MY_SUM (val IN number) return number
 parallel_enable
 aggregate using MY_SQL_TYPE;

           Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 21
MY_SUM() (Type Specification)

 Create Type MY_SUM_TYPE is object
 ( SUM Number
 , Static Function ODCIAggregateINITIALIZE(…)return                                                          number
 , Member Function ODCIAggregateITERATE   (…)return                                                          number
 , Member Function ODCIAggregateMERGE     (…)return                                                          number
 , Member Function ODCIAggregateTERMINATE (…)return                                                          number
 );

 Create Type Body MY_SUM_TYPE IS
   …
 END;


 Create Function MY_SUM (val IN number) return number
 parallel_enable
 aggregate using MY_SQL_TYPE;

           Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 22
MY_SUM() (Type Body hier nur angedeutet)

 Create Type MY_SUM_TYPE is object
 ( SUM Number
 , Static Function ODCIAggregateINITIALIZE(…)return                                                          number
 , Member Function ODCIAggregateITERATE   (…)return                                                          number
 , Member Function ODCIAggregateMERGE     (…)return                                                          number
 , Member Function ODCIAggregateTERMINATE (…)return                                                          number
 );

 Create Type Body MY_SUM_TYPE IS
   …
 END;

 Create Function MY_SUM (val IN number) return number
 parallel_enable
 aggregate using MY_SQL_TYPE;


           Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 23
MY_SUM() (Stored Function)

 Create Type MY_SUM_TYPE is object
 ( SUM Number
 , Static Function ODCIAggregateINITIALIZE(…)return                                                          number
 , Member Function ODCIAggregateITERATE   (…)return                                                          number
 , Member Function ODCIAggregateMERGE     (…)return                                                          number
 , Member Function ODCIAggregateTERMINATE (…)return                                                          number
 );

 Create Type Body MY_SUM_TYPE IS
   …
 END;


 Create Function MY_SUM (val IN number) return number
 parallel_enable
 aggregate using MY_SQL_TYPE;

           Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 24
MY_SUM() (Return„s)

 Create Type MY_SUM_TYPE is object
 ( SUM Number
 , Static Function ODCIAggregateINITIALIZE(…)return                                                          number
 , Member Function ODCIAggregateITERATE   (…)return                                                          number
 , Member Function ODCIAggregateMERGE     (…)return                                                          number
 , Member Function ODCIAggregateTERMINATE (…)return                                                          number
 );

 Create Type Body MY_SUM_TYPE IS
   … Function … begin … return ODCICONST.SUCCESS; end; …
 END;

 Create Function MY_SUM (val IN number) return number
 parallel_enable
 aggregate using MY_SQL_TYPE;


           Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 25
MY_SUM() (In / Out)

 Create Type MY_SUM_TYPE is object
 ( SUM Number
 , …
 , Member Function ODCIAggregateITERATE   (…, val IN NUMBER)…
 , …
 , Member Function ODCIAggregateTERMINATE (…, val OUT NUMBER)…
 );

 Create Type Body MY_SUM_TYPE IS
   …
 END;


 Create Function MY_SUM (val IN number) return number
 parallel_enable
 aggregate using MY_SQL_TYPE;

           Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 26
MY_SUM() (Instanz-Referenz)

 Create Type MY_SUM_TYPE is object
 ( SUM Number
 , …INITIALIZE(INST in out MY_SUM_TYPE                    )…
 , …ITERATE   (SELF in out MY_SUM_TYPE, VAL in NUMBER     )…
 , …MERGE     (SELF in out MY_SUM_TYPE, OTH in MY_SUM_TYPE)…
 , …TERMINATE (SELF in out MY_SUM_TYPE, VAL out NUMBER    )…
 );

 Create Type Body MY_SUM_TYPE IS
   …INITIALIZE … INST := MY_SUM_TYPE (SUM => 0); …
   …ITERATE    … SUM := SUM + VAL;               …
   …MERGE      … SUM := SUM + OTH.SUM;           …
   …TERMINATE … VAL := SUM;                      …
 END;



           Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 27
MY_SUM() (Initialize)

 Create Type MY_SUM_TYPE is object
 ( SUM Number
 , …INITIALIZE(INST in out MY_SUM_TYPE                    )…
 , …ITERATE   (SELF in out MY_SUM_TYPE, VAL in NUMBER     )…
 , …MERGE     (SELF in out MY_SUM_TYPE, OTH in MY_SUM_TYPE)…
 , …TERMINATE (SELF in out MY_SUM_TYPE, VAL out NUMBER    )…
 );

 Create Type Body MY_SUM_TYPE IS
   …INITIALIZE … INST := MY_SUM_TYPE (SUM => 0); …
   …ITERATE    … SUM := SUM + VAL;               …
   …MERGE      … SUM := SUM + OTH.SUM;           …
   …TERMINATE … VAL := SUM;                      …
 END;



           Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 28
MY_SUM() (Iterate)

 Create Type MY_SUM_TYPE is object
 ( SUM Number
 , …INITIALIZE(INST in out MY_SUM_TYPE                    )…
 , …ITERATE   (SELF in out MY_SUM_TYPE, VAL in NUMBER     )…
 , …MERGE     (SELF in out MY_SUM_TYPE, OTH in MY_SUM_TYPE)…
 , …TERMINATE (SELF in out MY_SUM_TYPE, VAL out NUMBER    )…
 );

 Create Type Body MY_SUM_TYPE IS
   …INITIALIZE … INST := MY_SUM_TYPE (SUM => 0); …
   …ITERATE    … SUM := SUM + VAL;               …
   …MERGE      … SUM := SUM + OTH.SUM;           …
   …TERMINATE … VAL := SUM;                      …
 END;



           Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 29
MY_SUM() (Merge)

 Create Type MY_SUM_TYPE is object
 ( SUM Number
 , …INITIALIZE(INST in out MY_SUM_TYPE                    )…
 , …ITERATE   (SELF in out MY_SUM_TYPE, VAL in NUMBER     )…
 , …MERGE     (SELF in out MY_SUM_TYPE, OTH in MY_SUM_TYPE)…
 , …TERMINATE (SELF in out MY_SUM_TYPE, VAL out NUMBER    )…
 );

 Create Type Body MY_SUM_TYPE IS
   …INITIALIZE … INST := MY_SUM_TYPE (SUM => 0); …
   …ITERATE    … SUM := SUM + VAL;               …
   …MERGE      … SUM := SUM + OTH.SUM;           …
   …TERMINATE … VAL := SUM;                      …
 END;



           Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 30
MY_SUM() (Terminate)

 Create Type MY_SUM_TYPE is object
 ( SUM Number
 , …INITIALIZE(INST in out MY_SUM_TYPE                    )…
 , …ITERATE   (SELF in out MY_SUM_TYPE, VAL in NUMBER     )…
 , …MERGE     (SELF in out MY_SUM_TYPE, OTH in MY_SUM_TYPE)…
 , …TERMINATE (SELF in out MY_SUM_TYPE, VAL out NUMBER    )…
 );

 Create Type Body MY_SUM_TYPE IS
   …INITIALIZE … INST := MY_SUM_TYPE (SUM => 0); …
   …ITERATE    … SUM := SUM + VAL;               …
   …MERGE      … SUM := SUM + OTH.SUM;           …
   …TERMINATE … VAL := SUM;                      …
 END;



           Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 31
Demo 01
3   MY_SUM()




       Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 32
3   Parametrisierung




        Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 33
Objekte als IN/OUT-Parameter
 ODCIAggregateITERATE, ODCIAggregateDELETE
   Erlaubt nur EINEN Input-Parameter

 ODCIAggregateTERMINATE
   Erlaubt nur EINEN Rückgabewert



 Aber:
  Input-Parameter / Rückgabe kann sein:
   nicht nur: skalarer Typ (Number, Varchar2, Date, o.ä.)
   sondern auch: Object-Type (!)
   und: Collection




               Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 34
Demo 02
3   MY_SUM()
        mit Objektparametern
        mit/ohne Parallelisierung




       Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 35
4   Eigene nützliche Data Cartridges




        Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 37
HistCheck()
 Ist bedarfsspezifisch !!!! (aber leicht anzupassen)
 Prüft Historisierung (gueltig_von, gueltig_bis)
 Prüfung innerhalb der Zeile
 Prüfung auf Zeilen-Set


 Rückgabewert
   positive Werte für fehlerfreie Sätze

   Negative Werte für Fehler wie:
       Überlappungen
       Gueltig_von >= Gueltig_bis
       Gueltig-Datum liegt außerhalb von Minus-Unendlich und Unendlich
       …

                Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 38
Demo 3:
4   HistCheck()




        Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 39
DistListAgg()
 Seit Oracle 11.2 existiert Function: LISTAGG()

   Konkateniert Eingangsspalte als Komma (o.ä.) -separierte Liste

   Keine Distinct-Variante
   Proprietäre SQL-Klausel
    LISTAGG(last_name, '; ')
    WITHIN GROUP (ORDER BY hire_date, last_name)
    OVER (PARTITION BY department_id)
   Kein Windowing möglich
   Arbeitet fehlerhaft!!!! (z. B. bei großen Group-By-Partitions)


 Komma-separierte Liste mit distinkten Werten
  erzeugt von Data Cartridge “DistListAgg()”
  (s.a. Demo)

                Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 40
Demo 4:
4   DistListAgg()




         Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 41
5   Nutzung im OWB




        Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 42
Einbau als analytische Function im Mapping
 Als Attribut
  im Expression-Operator
 Im nachfolgenden
  Filter-Operator nutzen




             Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 43
Aggregate Function im OWB deklarieren
 Import aus Datenbank importiert nur Object-Types
 Function wird nicht übernommen (Grund: Body fehlt?)


 Also Handarbeit:
     Transformations -> Functions: New Function
     OUT-Parameter typisieren (ggf. gewünschter OUT-Object-Type)
     IN-Parameter anlegen (ggf. gewünschter IN-Object-Type)
     Function -> Configure -> Identification -> Deployable: false


 Geht auch: Function weglassen ->
   Validierung in Expression schlägt fehlt
   Aber: Deployment und Ausführung funktioniert !




                 Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 44
Einbau als aggregierende Function im Mapping
 Als Funktion auf Spalte
  im Aggregate-Operator
 OWB kennt keine
  Aggregate-Data-Cartridges
  (s.a. Drop-Down-Liste)
 Workaround:
  Expression als Freitext erfassen




             Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 45
Online-Dokumentation:
6   Data Cartridge Developers Guide




        Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 46
ODCI-Online-Dokumentation
http://www.oracle.com/pls/db112/portal.portal_db?selected=3




             Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 47
6   Fazit




            Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 48
Fazit
 Pro
   Bedarfsspezifische zeilenübergreifende SQL-Algorhythmen als integrative
    Datenbankerweiterung
   Upgrade-Sicherheit: Mitnahme der DB-Verbesserungen ohne
    Anpassungsbedarf
   Geringer Implementierungsaufwand
   Leichte und generische Nutzbarkeit (entspricht „Oracle“-SQL-Standard)



 Contra
   Performance-Einbußen durch Kontext-Switches (Oracle verspricht
    Gegenmaßnahmen: höhere Integration SQL-Engine PLSQL-Engine)
   OWB kennt User-defined Aggregate-Function nicht (Workaround existiert)
   Gewöhnungsbedürftig: Mehrere Input-Parameter nur über Input-Object-Type
    möglich

              Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 49
Fragen & Antworten




         Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 50
Kontakt
Gero Knapstein
Senior Architekt
OPITZ CONSULTING Gummersbach GmbH
Kirchstraße 6
81677 Gummersbach
gero.knapstein@opitz-consulting.com
Phone +49 22061 6001 - 0


Besuchen Sie uns im Internet:
www.opitz-consulting.com




                Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2010   Seite 51
Besuchen Sie auch die anderen Vorträge von
OPITZ CONSULTING und den Stand auf Ebene 2
Dienstag, 16.11.2010                                  Mittwoch, 17.11.2010                                 Donnerstag, 18.11.2010

10:00 bis 10:45 Uhr, Raum Oslo                        09:00 bis 09:45 Uhr, Raum Kiew                       10:00 bis 10:45 Uhr,
Alles geregelt: Einsatz der Oracle Rules Engines      Vorgehensmodell für die                              Raum St. Petersburg
11g im SOA-Umfeld                                     Prozessautomatisierung mit der BPM Suite             ASMFS & ADVM – Oracle Home im ASM
                                                      11g

11:00 bis 11:45 Uhr, Raum Neu Delhi                   09:00 bis 09:45 Uhr, Raum Oslo                       10:00 bis 10:45 Uhr, Raum Istanbul
Security Hardening SOA Suite 11g                      Planung und Konfiguration von Oracle VM              Forms 11g und das iPhone
                                                      Clustern für HA

11:00 bis 11:45 Uhr, Raum Prag                        09:00 bis 09:45 Uhr, Raum Istanbul                   12:00 bis 12:45 Uhr, Raum Sydney
Oracle BI Suite EE 11g                                ApEx effektiv: Lösungen für                          Migration einer datenbanknahen
Hat sich das Warten gelohnt?                          Standardanforderungen mit Köpfchen                   Anwendung in eine Java RIA


11:00 bis 11:45 Uhr, Raum Budapest                    10:00 bis 10:45 Uhr, Raum Kiew                       13:00 bis 13:45 Uhr, Raum Seoul
SCA & SDO Konzepte und Design                         Volle Übersicht über Metadaten und                   Oracle Advanced Compression
                                                      Prozessdaten mit Oracle BAM

12:00 bis 12:45 Uhr, Raum Oslo                        13:00 bis 13:45 Uhr, Raum Singapur                   13:00 bis 13:45 Uhr, Raum Riga
Benutzeroberflächen in SOA-Landschaften               Spezialitäten zur Oracle Lizenzierung                Strategien auf dem Weg zum Cloud Computing

12:00 bis 12:45 Uhr, Raum Budapest                    16:00 bis 16:45 Uhr, Raum Singapur                   15:00 bis 15:45 Uhr, Raum Kiew
SOA Antipatterns eine wilde Reise durch die Welt      Modeling the business –                              Integration und Betriebsüberwachung mit der
der SOA Projekte                                      Oracle BPA Suite and BPM Suite in Practice           Oracle SOA Suite 11g

13:00 bis 13:45 Uhr, Raum Budapest                                                                         16:00 bis 16:45 Uhr, Raum Kiew
Formulare in Papierform ablösen                                                                            SOA-Testing
mit der BPM Suite 11g
14:00 – 14:45 Uhr, Raum Helsinki
Plan-Build-Run Oracle BPA Suite und
Oracle Grid Control kombiniert

14:00 bis 14:45 Uhr, Raum Prag
Analytische Funktionen selbst gemacht

16:00 bis 16:45 Uhr, Raum Budapest
Prozessautomatisierung am Beispiel: Wie passen
BPMN und BPEL zusammen?
                             Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses        © OPITZ CONSULTING GmbH 2010       Seite 52

Weitere ähnliche Inhalte

Ähnlich wie Analytische Funktionen leicht gemacht - DOAG Konferenz 2010 - OPITZ CONSULTING - Gero Knapstein

Professionelle Anforderungsanalyse am Beispiel einer Java-Anwendung zur Betri...
Professionelle Anforderungsanalyse am Beispiel einer Java-Anwendung zur Betri...Professionelle Anforderungsanalyse am Beispiel einer Java-Anwendung zur Betri...
Professionelle Anforderungsanalyse am Beispiel einer Java-Anwendung zur Betri...GFU Cyrus AG
 
Audit Vault. Auditiert, und dann? - DOAG Regio Essen 2011 - OPITZ CONSULTING ...
Audit Vault. Auditiert, und dann? - DOAG Regio Essen 2011 - OPITZ CONSULTING ...Audit Vault. Auditiert, und dann? - DOAG Regio Essen 2011 - OPITZ CONSULTING ...
Audit Vault. Auditiert, und dann? - DOAG Regio Essen 2011 - OPITZ CONSULTING ...OPITZ CONSULTING Deutschland
 
Fine tuning Lotus Script (german)
Fine tuning Lotus Script (german)Fine tuning Lotus Script (german)
Fine tuning Lotus Script (german)dominion
 
Tom Gansor: Agile Business Intelligence
Tom Gansor: Agile Business IntelligenceTom Gansor: Agile Business Intelligence
Tom Gansor: Agile Business IntelligenceStephan Trahasch
 
dictaJet im Produktinformationsmanagement
dictaJet im ProduktinformationsmanagementdictaJet im Produktinformationsmanagement
dictaJet im ProduktinformationsmanagementdictaJet
 
OOP 2012 - Udo Pracht - DevOps Einführung und Überblick
OOP 2012 - Udo Pracht - DevOps Einführung und ÜberblickOOP 2012 - Udo Pracht - DevOps Einführung und Überblick
OOP 2012 - Udo Pracht - DevOps Einführung und ÜberblickUdo Pracht
 
Grips - Felix Ried
Grips - Felix RiedGrips - Felix Ried
Grips - Felix Riedtecom
 
Lotus Notes Client Performance - Probleme verstehen und beheben (We4IT)
Lotus Notes Client Performance - Probleme verstehen und beheben (We4IT)Lotus Notes Client Performance - Probleme verstehen und beheben (We4IT)
Lotus Notes Client Performance - Probleme verstehen und beheben (We4IT)We4IT Group
 

Ähnlich wie Analytische Funktionen leicht gemacht - DOAG Konferenz 2010 - OPITZ CONSULTING - Gero Knapstein (13)

2011 05 11 12-15 untersee_11.24 monitore und cockpits
2011 05 11 12-15 untersee_11.24 monitore und cockpits2011 05 11 12-15 untersee_11.24 monitore und cockpits
2011 05 11 12-15 untersee_11.24 monitore und cockpits
 
Professionelle Anforderungsanalyse am Beispiel einer Java-Anwendung zur Betri...
Professionelle Anforderungsanalyse am Beispiel einer Java-Anwendung zur Betri...Professionelle Anforderungsanalyse am Beispiel einer Java-Anwendung zur Betri...
Professionelle Anforderungsanalyse am Beispiel einer Java-Anwendung zur Betri...
 
Audit Vault. Auditiert, und dann? - DOAG Regio Essen 2011 - OPITZ CONSULTING ...
Audit Vault. Auditiert, und dann? - DOAG Regio Essen 2011 - OPITZ CONSULTING ...Audit Vault. Auditiert, und dann? - DOAG Regio Essen 2011 - OPITZ CONSULTING ...
Audit Vault. Auditiert, und dann? - DOAG Regio Essen 2011 - OPITZ CONSULTING ...
 
Fine tuning Lotus Script (german)
Fine tuning Lotus Script (german)Fine tuning Lotus Script (german)
Fine tuning Lotus Script (german)
 
Tom Gansor: Agile Business Intelligence
Tom Gansor: Agile Business IntelligenceTom Gansor: Agile Business Intelligence
Tom Gansor: Agile Business Intelligence
 
Ec13 xpages-basic
Ec13 xpages-basicEc13 xpages-basic
Ec13 xpages-basic
 
dictaJet im Produktinformationsmanagement
dictaJet im ProduktinformationsmanagementdictaJet im Produktinformationsmanagement
dictaJet im Produktinformationsmanagement
 
ADF Software Factory
ADF Software FactoryADF Software Factory
ADF Software Factory
 
OOP 2012 - Udo Pracht - DevOps Einführung und Überblick
OOP 2012 - Udo Pracht - DevOps Einführung und ÜberblickOOP 2012 - Udo Pracht - DevOps Einführung und Überblick
OOP 2012 - Udo Pracht - DevOps Einführung und Überblick
 
Überwachung und inHouse-Archiv mit DEPAROM-Profil
Überwachung und inHouse-Archiv mit DEPAROM-ProfilÜberwachung und inHouse-Archiv mit DEPAROM-Profil
Überwachung und inHouse-Archiv mit DEPAROM-Profil
 
Grips - Felix Ried
Grips - Felix RiedGrips - Felix Ried
Grips - Felix Ried
 
Lotus Notes Client Performance - Probleme verstehen und beheben (We4IT)
Lotus Notes Client Performance - Probleme verstehen und beheben (We4IT)Lotus Notes Client Performance - Probleme verstehen und beheben (We4IT)
Lotus Notes Client Performance - Probleme verstehen und beheben (We4IT)
 
Release 5.7.0 Recherche Client
Release 5.7.0 Recherche ClientRelease 5.7.0 Recherche Client
Release 5.7.0 Recherche Client
 

Mehr von OPITZ CONSULTING Deutschland

Architecture Room Stuttgart - "Cloud-native ist nur ein Teil des Spiels!"
Architecture Room Stuttgart - "Cloud-native ist nur ein Teil des Spiels!"Architecture Room Stuttgart - "Cloud-native ist nur ein Teil des Spiels!"
Architecture Room Stuttgart - "Cloud-native ist nur ein Teil des Spiels!"OPITZ CONSULTING Deutschland
 
OC|Webcast: Oracle Lizenzierung - Die größten Fallen in der Praxis
OC|Webcast: Oracle Lizenzierung - Die größten Fallen in der PraxisOC|Webcast: Oracle Lizenzierung - Die größten Fallen in der Praxis
OC|Webcast: Oracle Lizenzierung - Die größten Fallen in der PraxisOPITZ CONSULTING Deutschland
 
OC|Webcast: Oracle Lizenzierung - Virtualisierung und Cloud
OC|Webcast: Oracle Lizenzierung - Virtualisierung und CloudOC|Webcast: Oracle Lizenzierung - Virtualisierung und Cloud
OC|Webcast: Oracle Lizenzierung - Virtualisierung und CloudOPITZ CONSULTING Deutschland
 
OC|Weekly Talk: Inspect’n’Adapt – Make Change come true!
OC|Weekly Talk: Inspect’n’Adapt – Make Change come true!OC|Weekly Talk: Inspect’n’Adapt – Make Change come true!
OC|Weekly Talk: Inspect’n’Adapt – Make Change come true!OPITZ CONSULTING Deutschland
 
OC|Webcast: Schnell und clever in die AWS Cloud – Migrationsszenarien und Han...
OC|Webcast: Schnell und clever in die AWS Cloud – Migrationsszenarien und Han...OC|Webcast: Schnell und clever in die AWS Cloud – Migrationsszenarien und Han...
OC|Webcast: Schnell und clever in die AWS Cloud – Migrationsszenarien und Han...OPITZ CONSULTING Deutschland
 
OC|Weekly Talk: "Das müsste man mal digitalisieren" - Mit Low-Code schnell zu...
OC|Weekly Talk: "Das müsste man mal digitalisieren" - Mit Low-Code schnell zu...OC|Weekly Talk: "Das müsste man mal digitalisieren" - Mit Low-Code schnell zu...
OC|Weekly Talk: "Das müsste man mal digitalisieren" - Mit Low-Code schnell zu...OPITZ CONSULTING Deutschland
 
OC|Weekly Talk: Service Management – Was hat sich durch Corona geändert?
OC|Weekly Talk: Service Management – Was hat sich durch Corona geändert?OC|Weekly Talk: Service Management – Was hat sich durch Corona geändert?
OC|Weekly Talk: Service Management – Was hat sich durch Corona geändert?OPITZ CONSULTING Deutschland
 
OC|Weekly Talk - Digitales Coaching & Smart Sparring
OC|Weekly Talk - Digitales Coaching & Smart Sparring OC|Weekly Talk - Digitales Coaching & Smart Sparring
OC|Weekly Talk - Digitales Coaching & Smart Sparring OPITZ CONSULTING Deutschland
 
Effiziente Betriebsoptimierung durch Cloud Nutzung
Effiziente Betriebsoptimierung durch Cloud NutzungEffiziente Betriebsoptimierung durch Cloud Nutzung
Effiziente Betriebsoptimierung durch Cloud NutzungOPITZ CONSULTING Deutschland
 

Mehr von OPITZ CONSULTING Deutschland (20)

OC|Webcast: Grundlagen der Oracle Lizenzierung
OC|Webcast: Grundlagen der Oracle LizenzierungOC|Webcast: Grundlagen der Oracle Lizenzierung
OC|Webcast: Grundlagen der Oracle Lizenzierung
 
OC|Webcast "Java heute" vom 28.09.2021
OC|Webcast "Java heute" vom 28.09.2021OC|Webcast "Java heute" vom 28.09.2021
OC|Webcast "Java heute" vom 28.09.2021
 
OC|Webcast "Java heute" vom 24.08.2021
OC|Webcast "Java heute" vom 24.08.2021OC|Webcast "Java heute" vom 24.08.2021
OC|Webcast "Java heute" vom 24.08.2021
 
OC|Webcast "Daten wirklich nutzen"
OC|Webcast "Daten wirklich nutzen"OC|Webcast "Daten wirklich nutzen"
OC|Webcast "Daten wirklich nutzen"
 
Architecture Room Stuttgart - "Cloud-native ist nur ein Teil des Spiels!"
Architecture Room Stuttgart - "Cloud-native ist nur ein Teil des Spiels!"Architecture Room Stuttgart - "Cloud-native ist nur ein Teil des Spiels!"
Architecture Room Stuttgart - "Cloud-native ist nur ein Teil des Spiels!"
 
OC|Webcast "Willkommen in der Cloud!"
OC|Webcast "Willkommen in der Cloud!"OC|Webcast "Willkommen in der Cloud!"
OC|Webcast "Willkommen in der Cloud!"
 
OC|Webcast "Die neue Welt der Virtualisierung"
OC|Webcast "Die neue Welt der Virtualisierung"OC|Webcast "Die neue Welt der Virtualisierung"
OC|Webcast "Die neue Welt der Virtualisierung"
 
10 Thesen zur professionellen Softwareentwicklung
10 Thesen zur professionellen Softwareentwicklung10 Thesen zur professionellen Softwareentwicklung
10 Thesen zur professionellen Softwareentwicklung
 
OC|Webcast: Oracle Lizenzierung - Lizenznews 2021
OC|Webcast: Oracle Lizenzierung - Lizenznews 2021OC|Webcast: Oracle Lizenzierung - Lizenznews 2021
OC|Webcast: Oracle Lizenzierung - Lizenznews 2021
 
OC|Webcast: Oracle Lizenzierung - Die größten Fallen in der Praxis
OC|Webcast: Oracle Lizenzierung - Die größten Fallen in der PraxisOC|Webcast: Oracle Lizenzierung - Die größten Fallen in der Praxis
OC|Webcast: Oracle Lizenzierung - Die größten Fallen in der Praxis
 
OC|Webcast: Oracle Lizenzierung - Virtualisierung und Cloud
OC|Webcast: Oracle Lizenzierung - Virtualisierung und CloudOC|Webcast: Oracle Lizenzierung - Virtualisierung und Cloud
OC|Webcast: Oracle Lizenzierung - Virtualisierung und Cloud
 
OC|Webcast: Grundlagen der Oracle-Lizenzierung
OC|Webcast: Grundlagen der Oracle-LizenzierungOC|Webcast: Grundlagen der Oracle-Lizenzierung
OC|Webcast: Grundlagen der Oracle-Lizenzierung
 
OC|Weekly Talk: Inspect’n’Adapt – Make Change come true!
OC|Weekly Talk: Inspect’n’Adapt – Make Change come true!OC|Weekly Talk: Inspect’n’Adapt – Make Change come true!
OC|Weekly Talk: Inspect’n’Adapt – Make Change come true!
 
OC|Webcast: Schnell und clever in die AWS Cloud – Migrationsszenarien und Han...
OC|Webcast: Schnell und clever in die AWS Cloud – Migrationsszenarien und Han...OC|Webcast: Schnell und clever in die AWS Cloud – Migrationsszenarien und Han...
OC|Webcast: Schnell und clever in die AWS Cloud – Migrationsszenarien und Han...
 
OC|Weekly Talk The Power of DevOps…
OC|Weekly Talk  The Power of DevOps…OC|Weekly Talk  The Power of DevOps…
OC|Weekly Talk The Power of DevOps…
 
OC|Weekly Talk: "Das müsste man mal digitalisieren" - Mit Low-Code schnell zu...
OC|Weekly Talk: "Das müsste man mal digitalisieren" - Mit Low-Code schnell zu...OC|Weekly Talk: "Das müsste man mal digitalisieren" - Mit Low-Code schnell zu...
OC|Weekly Talk: "Das müsste man mal digitalisieren" - Mit Low-Code schnell zu...
 
OC|Weekly Talk: Service Management – Was hat sich durch Corona geändert?
OC|Weekly Talk: Service Management – Was hat sich durch Corona geändert?OC|Weekly Talk: Service Management – Was hat sich durch Corona geändert?
OC|Weekly Talk: Service Management – Was hat sich durch Corona geändert?
 
OC|Weekly Talk - Digitales Coaching & Smart Sparring
OC|Weekly Talk - Digitales Coaching & Smart Sparring OC|Weekly Talk - Digitales Coaching & Smart Sparring
OC|Weekly Talk - Digitales Coaching & Smart Sparring
 
OC|Weekly Talk - Beratung remote
OC|Weekly Talk - Beratung remoteOC|Weekly Talk - Beratung remote
OC|Weekly Talk - Beratung remote
 
Effiziente Betriebsoptimierung durch Cloud Nutzung
Effiziente Betriebsoptimierung durch Cloud NutzungEffiziente Betriebsoptimierung durch Cloud Nutzung
Effiziente Betriebsoptimierung durch Cloud Nutzung
 

Analytische Funktionen leicht gemacht - DOAG Konferenz 2010 - OPITZ CONSULTING - Gero Knapstein

  • 1. Analytische Funktionen leicht gemacht Data Cartridges für Data Warehouses Gero Knapstein Solution Architect OPITZ CONSULTING Gummersbach GmbH DOAG Konferenz, November 2010, Nürnberg Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 1
  • 2. Leistungs- Kunden Tätigkeits- Fakten angebot felder Java Branchen- IT-Strategie Gründung 1990 SOA/BPM übergreifend Beratung 400 Mitarbeiter ORACLE Über 600 Implementierung 8 Standorte in BI/DWH Kunden Betrieb D/PL/CH Outtasking Training Industrie / Versorger / Handel / Logistik / Telekommunikation Dienstleistungen 29% 29% 42% Öffentliche Auftraggeber / Banken & Versicherungen / Vereine & Verbände Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 2
  • 3. Agenda 1. Funktionen im Vergleich 2. Grundlage für den Eigenbau: Das Oracle Data Cartridge Interface (ODCI) 3. Erstellung einer analytischen Funktion (Data Cartridge)  Wann sollte ich analytische Funktionen selbst schreiben?  ODCIAggregate und Data-Cartridge-Komponenten  Demos 4. Eigene nützliche Data Cartridges  Demo: DISTLISTAGG und HISTCHECK 5. Data Cartridge Nutzung im OWB Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 3
  • 4. 1 Funktionen im Vergleich Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 4
  • 5. Funktionen im Vergleich Funktionstyp Single Row Aggregate Analytic Function Function Function Quellzeilen 1 group by partition Group by Partition (unsortiert) (sortiert, Window-Submenge) Rückgabezeilen 1 1 Group by Partition Implementierung Create create type <type> … ODCIAggregate… Function as <body> create Function … aggregate using <type> Nutzung in SQL Fkt (col) Fkt (col) Fkt (col) over … (partition by col2 [group by …] order by col3 rows between …) Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 5
  • 6. Zeilenbasierte Funktion  Select MY_FUNCTION („Quelle“) Quelle Ziel as „Ziel“ 2 2‘ … 3 3‘ 1 1‘ 5 5‘ 4 4‘ 2 2‘ 3 3‘ Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 6
  • 7. Aggregierende Funktion  Select SUM („Quelle“) Quelle Ziel as „Ziel“ 2 … 3 1 5 20‘ 17‘ 15‘ 11‘ 6‘ 5‘ 2‘ 4 2 3 Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 7
  • 8. Analytische Funktion  Select SUM („Quelle“) Quelle Ziel as „Ziel“ 1 2‘ 4 5‘ OVER ( ) 2 6‘ PARTITION BY … 3 11‘ ORDER BY … 2 15‘ ROWS BETWEEN 5 17‘ UNBOUNDED PRECEDING 3 20‘ AND CURRENT ROW Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 8
  • 9. Grundlage für den Eigenbau: 3 Oracle Data Cartridge Interface Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 9
  • 10. Oracle Data Cartridge Interface (ODCI)  Basiert auf „Oracle Extensibility Architecture“-Framework  Ermöglicht funktionalen Ausbau des DB-Servers mit Data Cartridges  Seit Oracle 8; einmalige Signatur-Änderungen mit 9i Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 10
  • 11. Oracle Data Cartridge Interface (ODCI)  Interfaces  ODCIIndex  Implementiert eigene Domain-Indexes  Beispiel: Oracle TEXT Option  ODCIStats  Implementiert CBO-Statistiken für Domain-Indexes  ODCITable  In PLSQL nativ integriert  Implementiert Table Functions für andere Dialekte  ODCIAggregate  Implementiert Aggregate / Analytic Functions Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 11
  • 12. Data Cartridges – Eigenschaften  Bedarfsspezifische Implementierung eines ODCI-Interface  Pluggable DB Server Extension  Packaged: Sourcen können gewrapped werden (Urheberschutz)  Hohe Uprade-Sicherheit (stabile API seit Oracle9i)  Generisch nutzbar nach SQL-Standards  Unterstützt DB-Wartungsmaßnahmen (z. B. Export, Import) Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 12
  • 13. Data Cartridges – Einsatzmöglichkeiten  Unternehmenslösung generisch nutzen  atomare Logik kapseln / modularisieren  Oracle bietet keine vergleichbare Lösung  leichte Wartbarkeit ist wichtig  Vereinfachung komplexer SQL-Statement  leicht verständliche Anwendbarkeit in SQL Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 13
  • 14. Erstellung einer 3 analytischen Funktion (Data Cartridge) Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 14
  • 15. Zwei Stored Objects erstellen …  Create Type my_aggregate_type … (Spec nach festen Interface-Vorgaben)  Create Type Body my_aggregate_type …  Create Function my_agg (…) return <type> [deterministic] [parallel_enable] aggregate using my_aggregate_type; (nur Deklaration; kein Body)  Fertig! Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 15
  • 16. ODCIAggregate fordert …  ODCIAggregateInitialize (mandatory static function)  ODCIAggregateIterate (mandatory member function)  ODCIAggregateMerge (mandatory member function)  ODCIAggregateTerminate (mandatory member function)  ODCIAggregateDelete (optional member function)  ODCIAggregateWrapContext (für externe Algorithmen) Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 16
  • 17. ODCIAggregate  Für jede Ergebniszeile wird  ein „Aggregate Kontext“ erstellt:  ein oder mehrere Objekte (Parallelverarbeitung) erzeugt (initialize),  Eingangswerte verarbeitet (iterate, delete),  Parallelverarbeitungen zu einem Objekt zusammengeführt (merge), und  ein Ergebnis zurückgegeben (terminate). Initialize Iterate Merge Terminate Initialize Iterate Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 17
  • 18. Aggregation Kontext  Select my_sum(…) Output Terminate Terminate Terminate 0 6 2 0 7 6 0 8 5 7 Initialize Initialize Initialize Terminate 0 4 8 Initialize over Input (partition by … Iterate Delete 2 order by … Copy rows between Iterate Copy Delete 4 1 preceding and 1 following) Iterate Copy 1 from … Iterate 3  Implementierung von ODCIAggregateDelete macht Sinn! Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 19
  • 19. 3 MY_SUM() Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 20
  • 20. MY_SUM() Create Type MY_SUM_TYPE is object ( SUM Number , Static Function ODCIAggregateINITIALIZE(…)return number , Member Function ODCIAggregateITERATE (…)return number , Member Function ODCIAggregateMERGE (…)return number , Member Function ODCIAggregateTERMINATE (…)return number ); Create Type Body MY_SUM_TYPE IS … END; Create Function MY_SUM (val IN number) return number parallel_enable aggregate using MY_SQL_TYPE; Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 21
  • 21. MY_SUM() (Type Specification) Create Type MY_SUM_TYPE is object ( SUM Number , Static Function ODCIAggregateINITIALIZE(…)return number , Member Function ODCIAggregateITERATE (…)return number , Member Function ODCIAggregateMERGE (…)return number , Member Function ODCIAggregateTERMINATE (…)return number ); Create Type Body MY_SUM_TYPE IS … END; Create Function MY_SUM (val IN number) return number parallel_enable aggregate using MY_SQL_TYPE; Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 22
  • 22. MY_SUM() (Type Body hier nur angedeutet) Create Type MY_SUM_TYPE is object ( SUM Number , Static Function ODCIAggregateINITIALIZE(…)return number , Member Function ODCIAggregateITERATE (…)return number , Member Function ODCIAggregateMERGE (…)return number , Member Function ODCIAggregateTERMINATE (…)return number ); Create Type Body MY_SUM_TYPE IS … END; Create Function MY_SUM (val IN number) return number parallel_enable aggregate using MY_SQL_TYPE; Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 23
  • 23. MY_SUM() (Stored Function) Create Type MY_SUM_TYPE is object ( SUM Number , Static Function ODCIAggregateINITIALIZE(…)return number , Member Function ODCIAggregateITERATE (…)return number , Member Function ODCIAggregateMERGE (…)return number , Member Function ODCIAggregateTERMINATE (…)return number ); Create Type Body MY_SUM_TYPE IS … END; Create Function MY_SUM (val IN number) return number parallel_enable aggregate using MY_SQL_TYPE; Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 24
  • 24. MY_SUM() (Return„s) Create Type MY_SUM_TYPE is object ( SUM Number , Static Function ODCIAggregateINITIALIZE(…)return number , Member Function ODCIAggregateITERATE (…)return number , Member Function ODCIAggregateMERGE (…)return number , Member Function ODCIAggregateTERMINATE (…)return number ); Create Type Body MY_SUM_TYPE IS … Function … begin … return ODCICONST.SUCCESS; end; … END; Create Function MY_SUM (val IN number) return number parallel_enable aggregate using MY_SQL_TYPE; Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 25
  • 25. MY_SUM() (In / Out) Create Type MY_SUM_TYPE is object ( SUM Number , … , Member Function ODCIAggregateITERATE (…, val IN NUMBER)… , … , Member Function ODCIAggregateTERMINATE (…, val OUT NUMBER)… ); Create Type Body MY_SUM_TYPE IS … END; Create Function MY_SUM (val IN number) return number parallel_enable aggregate using MY_SQL_TYPE; Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 26
  • 26. MY_SUM() (Instanz-Referenz) Create Type MY_SUM_TYPE is object ( SUM Number , …INITIALIZE(INST in out MY_SUM_TYPE )… , …ITERATE (SELF in out MY_SUM_TYPE, VAL in NUMBER )… , …MERGE (SELF in out MY_SUM_TYPE, OTH in MY_SUM_TYPE)… , …TERMINATE (SELF in out MY_SUM_TYPE, VAL out NUMBER )… ); Create Type Body MY_SUM_TYPE IS …INITIALIZE … INST := MY_SUM_TYPE (SUM => 0); … …ITERATE … SUM := SUM + VAL; … …MERGE … SUM := SUM + OTH.SUM; … …TERMINATE … VAL := SUM; … END; Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 27
  • 27. MY_SUM() (Initialize) Create Type MY_SUM_TYPE is object ( SUM Number , …INITIALIZE(INST in out MY_SUM_TYPE )… , …ITERATE (SELF in out MY_SUM_TYPE, VAL in NUMBER )… , …MERGE (SELF in out MY_SUM_TYPE, OTH in MY_SUM_TYPE)… , …TERMINATE (SELF in out MY_SUM_TYPE, VAL out NUMBER )… ); Create Type Body MY_SUM_TYPE IS …INITIALIZE … INST := MY_SUM_TYPE (SUM => 0); … …ITERATE … SUM := SUM + VAL; … …MERGE … SUM := SUM + OTH.SUM; … …TERMINATE … VAL := SUM; … END; Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 28
  • 28. MY_SUM() (Iterate) Create Type MY_SUM_TYPE is object ( SUM Number , …INITIALIZE(INST in out MY_SUM_TYPE )… , …ITERATE (SELF in out MY_SUM_TYPE, VAL in NUMBER )… , …MERGE (SELF in out MY_SUM_TYPE, OTH in MY_SUM_TYPE)… , …TERMINATE (SELF in out MY_SUM_TYPE, VAL out NUMBER )… ); Create Type Body MY_SUM_TYPE IS …INITIALIZE … INST := MY_SUM_TYPE (SUM => 0); … …ITERATE … SUM := SUM + VAL; … …MERGE … SUM := SUM + OTH.SUM; … …TERMINATE … VAL := SUM; … END; Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 29
  • 29. MY_SUM() (Merge) Create Type MY_SUM_TYPE is object ( SUM Number , …INITIALIZE(INST in out MY_SUM_TYPE )… , …ITERATE (SELF in out MY_SUM_TYPE, VAL in NUMBER )… , …MERGE (SELF in out MY_SUM_TYPE, OTH in MY_SUM_TYPE)… , …TERMINATE (SELF in out MY_SUM_TYPE, VAL out NUMBER )… ); Create Type Body MY_SUM_TYPE IS …INITIALIZE … INST := MY_SUM_TYPE (SUM => 0); … …ITERATE … SUM := SUM + VAL; … …MERGE … SUM := SUM + OTH.SUM; … …TERMINATE … VAL := SUM; … END; Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 30
  • 30. MY_SUM() (Terminate) Create Type MY_SUM_TYPE is object ( SUM Number , …INITIALIZE(INST in out MY_SUM_TYPE )… , …ITERATE (SELF in out MY_SUM_TYPE, VAL in NUMBER )… , …MERGE (SELF in out MY_SUM_TYPE, OTH in MY_SUM_TYPE)… , …TERMINATE (SELF in out MY_SUM_TYPE, VAL out NUMBER )… ); Create Type Body MY_SUM_TYPE IS …INITIALIZE … INST := MY_SUM_TYPE (SUM => 0); … …ITERATE … SUM := SUM + VAL; … …MERGE … SUM := SUM + OTH.SUM; … …TERMINATE … VAL := SUM; … END; Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 31
  • 31. Demo 01 3 MY_SUM() Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 32
  • 32. 3 Parametrisierung Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 33
  • 33. Objekte als IN/OUT-Parameter  ODCIAggregateITERATE, ODCIAggregateDELETE  Erlaubt nur EINEN Input-Parameter  ODCIAggregateTERMINATE  Erlaubt nur EINEN Rückgabewert  Aber: Input-Parameter / Rückgabe kann sein:  nicht nur: skalarer Typ (Number, Varchar2, Date, o.ä.)  sondern auch: Object-Type (!)  und: Collection Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 34
  • 34. Demo 02 3 MY_SUM() mit Objektparametern mit/ohne Parallelisierung Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 35
  • 35. 4 Eigene nützliche Data Cartridges Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 37
  • 36. HistCheck()  Ist bedarfsspezifisch !!!! (aber leicht anzupassen)  Prüft Historisierung (gueltig_von, gueltig_bis)  Prüfung innerhalb der Zeile  Prüfung auf Zeilen-Set  Rückgabewert  positive Werte für fehlerfreie Sätze  Negative Werte für Fehler wie:  Überlappungen  Gueltig_von >= Gueltig_bis  Gueltig-Datum liegt außerhalb von Minus-Unendlich und Unendlich  … Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 38
  • 37. Demo 3: 4 HistCheck() Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 39
  • 38. DistListAgg()  Seit Oracle 11.2 existiert Function: LISTAGG()  Konkateniert Eingangsspalte als Komma (o.ä.) -separierte Liste  Keine Distinct-Variante  Proprietäre SQL-Klausel LISTAGG(last_name, '; ') WITHIN GROUP (ORDER BY hire_date, last_name) OVER (PARTITION BY department_id)  Kein Windowing möglich  Arbeitet fehlerhaft!!!! (z. B. bei großen Group-By-Partitions)  Komma-separierte Liste mit distinkten Werten erzeugt von Data Cartridge “DistListAgg()” (s.a. Demo) Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 40
  • 39. Demo 4: 4 DistListAgg() Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 41
  • 40. 5 Nutzung im OWB Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 42
  • 41. Einbau als analytische Function im Mapping  Als Attribut im Expression-Operator  Im nachfolgenden Filter-Operator nutzen Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 43
  • 42. Aggregate Function im OWB deklarieren  Import aus Datenbank importiert nur Object-Types  Function wird nicht übernommen (Grund: Body fehlt?)  Also Handarbeit:  Transformations -> Functions: New Function  OUT-Parameter typisieren (ggf. gewünschter OUT-Object-Type)  IN-Parameter anlegen (ggf. gewünschter IN-Object-Type)  Function -> Configure -> Identification -> Deployable: false  Geht auch: Function weglassen ->  Validierung in Expression schlägt fehlt  Aber: Deployment und Ausführung funktioniert ! Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 44
  • 43. Einbau als aggregierende Function im Mapping  Als Funktion auf Spalte im Aggregate-Operator  OWB kennt keine Aggregate-Data-Cartridges (s.a. Drop-Down-Liste)  Workaround: Expression als Freitext erfassen Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 45
  • 44. Online-Dokumentation: 6 Data Cartridge Developers Guide Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 46
  • 45. ODCI-Online-Dokumentation http://www.oracle.com/pls/db112/portal.portal_db?selected=3 Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 47
  • 46. 6 Fazit Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 48
  • 47. Fazit  Pro  Bedarfsspezifische zeilenübergreifende SQL-Algorhythmen als integrative Datenbankerweiterung  Upgrade-Sicherheit: Mitnahme der DB-Verbesserungen ohne Anpassungsbedarf  Geringer Implementierungsaufwand  Leichte und generische Nutzbarkeit (entspricht „Oracle“-SQL-Standard)  Contra  Performance-Einbußen durch Kontext-Switches (Oracle verspricht Gegenmaßnahmen: höhere Integration SQL-Engine PLSQL-Engine)  OWB kennt User-defined Aggregate-Function nicht (Workaround existiert)  Gewöhnungsbedürftig: Mehrere Input-Parameter nur über Input-Object-Type möglich Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 49
  • 48. Fragen & Antworten Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 50
  • 49. Kontakt Gero Knapstein Senior Architekt OPITZ CONSULTING Gummersbach GmbH Kirchstraße 6 81677 Gummersbach gero.knapstein@opitz-consulting.com Phone +49 22061 6001 - 0 Besuchen Sie uns im Internet: www.opitz-consulting.com Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 51
  • 50. Besuchen Sie auch die anderen Vorträge von OPITZ CONSULTING und den Stand auf Ebene 2 Dienstag, 16.11.2010 Mittwoch, 17.11.2010 Donnerstag, 18.11.2010 10:00 bis 10:45 Uhr, Raum Oslo 09:00 bis 09:45 Uhr, Raum Kiew 10:00 bis 10:45 Uhr, Alles geregelt: Einsatz der Oracle Rules Engines Vorgehensmodell für die Raum St. Petersburg 11g im SOA-Umfeld Prozessautomatisierung mit der BPM Suite ASMFS & ADVM – Oracle Home im ASM 11g 11:00 bis 11:45 Uhr, Raum Neu Delhi 09:00 bis 09:45 Uhr, Raum Oslo 10:00 bis 10:45 Uhr, Raum Istanbul Security Hardening SOA Suite 11g Planung und Konfiguration von Oracle VM Forms 11g und das iPhone Clustern für HA 11:00 bis 11:45 Uhr, Raum Prag 09:00 bis 09:45 Uhr, Raum Istanbul 12:00 bis 12:45 Uhr, Raum Sydney Oracle BI Suite EE 11g ApEx effektiv: Lösungen für Migration einer datenbanknahen Hat sich das Warten gelohnt? Standardanforderungen mit Köpfchen Anwendung in eine Java RIA 11:00 bis 11:45 Uhr, Raum Budapest 10:00 bis 10:45 Uhr, Raum Kiew 13:00 bis 13:45 Uhr, Raum Seoul SCA & SDO Konzepte und Design Volle Übersicht über Metadaten und Oracle Advanced Compression Prozessdaten mit Oracle BAM 12:00 bis 12:45 Uhr, Raum Oslo 13:00 bis 13:45 Uhr, Raum Singapur 13:00 bis 13:45 Uhr, Raum Riga Benutzeroberflächen in SOA-Landschaften Spezialitäten zur Oracle Lizenzierung Strategien auf dem Weg zum Cloud Computing 12:00 bis 12:45 Uhr, Raum Budapest 16:00 bis 16:45 Uhr, Raum Singapur 15:00 bis 15:45 Uhr, Raum Kiew SOA Antipatterns eine wilde Reise durch die Welt Modeling the business – Integration und Betriebsüberwachung mit der der SOA Projekte Oracle BPA Suite and BPM Suite in Practice Oracle SOA Suite 11g 13:00 bis 13:45 Uhr, Raum Budapest 16:00 bis 16:45 Uhr, Raum Kiew Formulare in Papierform ablösen SOA-Testing mit der BPM Suite 11g 14:00 – 14:45 Uhr, Raum Helsinki Plan-Build-Run Oracle BPA Suite und Oracle Grid Control kombiniert 14:00 bis 14:45 Uhr, Raum Prag Analytische Funktionen selbst gemacht 16:00 bis 16:45 Uhr, Raum Budapest Prozessautomatisierung am Beispiel: Wie passen BPMN und BPEL zusammen? Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 52