Analytische Funktionen leicht gemachtData Cartridges fürData WarehousesGero KnapsteinSolution ArchitectOPITZ CONSULTING Gu...
Leistungs-               Kunden                                               Tätigkeits-            Faktenangebot        ...
Agenda1.   Funktionen im Vergleich2.   Grundlage für den Eigenbau:     Das Oracle Data Cartridge Interface (ODCI)3.   Erst...
1   Funktionen im Vergleich        Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ C...
Funktionen im VergleichFunktionstyp             Single Row                             Aggregate                          ...
Zeilenbasierte Funktion Select  MY_FUNCTION („Quelle“)                                      Quelle                       ...
Aggregierende Funktion Select  SUM („Quelle“)                                               Quelle                       ...
Analytische Funktion Select  SUM („Quelle“)                                               Quelle                         ...
Grundlage für den Eigenbau:3   Oracle Data Cartridge Interface         Analytische Funktionen leicht gemacht – Data Cartri...
Oracle Data Cartridge Interface (ODCI) Basiert auf „Oracle Extensibility Architecture“-Framework Ermöglicht funktionalen...
Oracle Data Cartridge Interface (ODCI) Interfaces   ODCIIndex     Implementiert eigene Domain-Indexes     Beispiel: Or...
Data Cartridges – Eigenschaften Bedarfsspezifische Implementierung eines ODCI-Interface Pluggable DB Server Extension P...
Data Cartridges – Einsatzmöglichkeiten Unternehmenslösung generisch nutzen atomare Logik kapseln / modularisieren Oracl...
Erstellung einer3   analytischen Funktion (Data Cartridge)        Analytische Funktionen leicht gemacht – Data Cartridges ...
Zwei Stored Objects erstellen … Create Type my_aggregate_type …  (Spec nach festen Interface-Vorgaben) Create Type Body ...
ODCIAggregate fordert … ODCIAggregateInitialize                                           (mandatory static function) OD...
ODCIAggregate Für jede Ergebniszeile wird     ein „Aggregate Kontext“ erstellt:     ein oder mehrere Objekte (Parallelv...
Aggregation Kontext Select my_sum(…)                                                                                     ...
3   MY_SUM()       Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH 2...
MY_SUM() Create Type MY_SUM_TYPE is object ( SUM Number , Static Function ODCIAggregateINITIALIZE(…)return                ...
MY_SUM() (Type Specification) Create Type MY_SUM_TYPE is object ( SUM Number , Static Function ODCIAggregateINITIALIZE(…)r...
MY_SUM() (Type Body hier nur angedeutet) Create Type MY_SUM_TYPE is object ( SUM Number , Static Function ODCIAggregateINI...
MY_SUM() (Stored Function) Create Type MY_SUM_TYPE is object ( SUM Number , Static Function ODCIAggregateINITIALIZE(…)retu...
MY_SUM() (Return„s) Create Type MY_SUM_TYPE is object ( SUM Number , Static Function ODCIAggregateINITIALIZE(…)return     ...
MY_SUM() (In / Out) Create Type MY_SUM_TYPE is object ( SUM Number , … , Member Function ODCIAggregateITERATE   (…, val IN...
MY_SUM() (Instanz-Referenz) Create Type MY_SUM_TYPE is object ( SUM Number , …INITIALIZE(INST in out MY_SUM_TYPE          ...
MY_SUM() (Initialize) Create Type MY_SUM_TYPE is object ( SUM Number , …INITIALIZE(INST in out MY_SUM_TYPE                ...
MY_SUM() (Iterate) Create Type MY_SUM_TYPE is object ( SUM Number , …INITIALIZE(INST in out MY_SUM_TYPE                   ...
MY_SUM() (Merge) Create Type MY_SUM_TYPE is object ( SUM Number , …INITIALIZE(INST in out MY_SUM_TYPE                    )...
MY_SUM() (Terminate) Create Type MY_SUM_TYPE is object ( SUM Number , …INITIALIZE(INST in out MY_SUM_TYPE                 ...
Demo 013   MY_SUM()       Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING...
3   Parametrisierung        Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTI...
Objekte als IN/OUT-Parameter ODCIAggregateITERATE, ODCIAggregateDELETE   Erlaubt nur EINEN Input-Parameter ODCIAggregat...
Demo 023   MY_SUM()        mit Objektparametern        mit/ohne Parallelisierung       Analytische Funktionen leicht gemac...
4   Eigene nützliche Data Cartridges        Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   ...
HistCheck() Ist bedarfsspezifisch !!!! (aber leicht anzupassen) Prüft Historisierung (gueltig_von, gueltig_bis) Prüfung...
Demo 3:4   HistCheck()        Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSUL...
DistListAgg() Seit Oracle 11.2 existiert Function: LISTAGG()   Konkateniert Eingangsspalte als Komma (o.ä.) -separierte ...
Demo 4:4   DistListAgg()         Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CON...
5   Nutzung im OWB        Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING...
Einbau als analytische Function im Mapping Als Attribut  im Expression-Operator Im nachfolgenden  Filter-Operator nutzen...
Aggregate Function im OWB deklarieren Import aus Datenbank importiert nur Object-Types Function wird nicht übernommen (G...
Einbau als aggregierende Function im Mapping Als Funktion auf Spalte  im Aggregate-Operator OWB kennt keine  Aggregate-D...
Online-Dokumentation:6   Data Cartridge Developers Guide        Analytische Funktionen leicht gemacht – Data Cartridges fü...
ODCI-Online-Dokumentationhttp://www.oracle.com/pls/db112/portal.portal_db?selected=3             Analytische Funktionen le...
6   Fazit            Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTING GmbH...
Fazit Pro   Bedarfsspezifische zeilenübergreifende SQL-Algorhythmen als integrative    Datenbankerweiterung   Upgrade-S...
Fragen & Antworten         Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses   © OPITZ CONSULTIN...
KontaktGero KnapsteinSenior ArchitektOPITZ CONSULTING Gummersbach GmbHKirchstraße 681677 Gummersbachgero.knapstein@opitz-c...
Besuchen Sie auch die anderen Vorträge vonOPITZ CONSULTING und den Stand auf Ebene 2Dienstag, 16.11.2010                  ...
Nächste SlideShare
Wird geladen in …5
×

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

2.038 Aufrufe

Veröffentlicht am

In diesem Vortrag wird ein Vergleich analytischer Funktionen vorgenommen und auf die Grundlage für selbstgebaute Funktionen, das Oracle Data Cartridge Interface (ODCI) näher eingegegangen. Auch eigene nützliche Data Cartridges werden demonstriert und des Weiteren die Data Cartridge Nutzung im Oracle Warehouse Builder (OWB) vorgestellt. OPITZ CONSULTING Senior Architect Gero Kanpstein hielt diesen Vortrag im Rahmen der DOAG Konferenz 2010.

Veröffentlicht in: Technologie
0 Kommentare
1 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

Keine Downloads
Aufrufe
Aufrufe insgesamt
2.038
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
5
Aktionen
Geteilt
0
Downloads
0
Kommentare
0
Gefällt mir
1
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

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

  1. 1. Analytische Funktionen leicht gemachtData Cartridges fürData WarehousesGero KnapsteinSolution ArchitectOPITZ CONSULTING Gummersbach GmbHDOAG Konferenz, November 2010, Nürnberg Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 1
  2. 2. Leistungs- Kunden Tätigkeits- Faktenangebot 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. 3. Agenda1. Funktionen im Vergleich2. 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  Demos4. Eigene nützliche Data Cartridges  Demo: DISTLISTAGG und HISTCHECK5. Data Cartridge Nutzung im OWB Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 3
  4. 4. 1 Funktionen im Vergleich Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 4
  5. 5. Funktionen im VergleichFunktionstyp Single Row Aggregate Analytic Function Function FunctionQuellzeilen 1 group by partition Group by Partition (unsortiert) (sortiert, Window-Submenge)Rückgabezeilen 1 1 Group by PartitionImplementierung 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. 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. 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. 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. 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. 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. 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. 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. 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. 14. Erstellung einer3 analytischen Funktion (Data Cartridge) Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 14
  15. 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. 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. 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. 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. 19. 3 MY_SUM() Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 20
  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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 31. Demo 013 MY_SUM() Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 32
  32. 32. 3 Parametrisierung Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 33
  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. 34. Demo 023 MY_SUM() mit Objektparametern mit/ohne Parallelisierung Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 35
  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. 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. 37. Demo 3:4 HistCheck() Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 39
  38. 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. 39. Demo 4:4 DistListAgg() Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 41
  40. 40. 5 Nutzung im OWB Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 42
  41. 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. 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. 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. 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. 45. ODCI-Online-Dokumentationhttp://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. 46. 6 Fazit Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 48
  47. 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. 48. Fragen & Antworten Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 50
  49. 49. KontaktGero KnapsteinSenior ArchitektOPITZ CONSULTING Gummersbach GmbHKirchstraße 681677 Gummersbachgero.knapstein@opitz-consulting.comPhone +49 22061 6001 - 0Besuchen 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. 50. Besuchen Sie auch die anderen Vorträge vonOPITZ CONSULTING und den Stand auf Ebene 2Dienstag, 16.11.2010 Mittwoch, 17.11.2010 Donnerstag, 18.11.201010: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. Petersburg11g im SOA-Umfeld Prozessautomatisierung mit der BPM Suite ASMFS & ADVM – Oracle Home im ASM 11g11:00 bis 11:45 Uhr, Raum Neu Delhi 09:00 bis 09:45 Uhr, Raum Oslo 10:00 bis 10:45 Uhr, Raum IstanbulSecurity Hardening SOA Suite 11g Planung und Konfiguration von Oracle VM Forms 11g und das iPhone Clustern für HA11:00 bis 11:45 Uhr, Raum Prag 09:00 bis 09:45 Uhr, Raum Istanbul 12:00 bis 12:45 Uhr, Raum SydneyOracle BI Suite EE 11g ApEx effektiv: Lösungen für Migration einer datenbanknahenHat sich das Warten gelohnt? Standardanforderungen mit Köpfchen Anwendung in eine Java RIA11:00 bis 11:45 Uhr, Raum Budapest 10:00 bis 10:45 Uhr, Raum Kiew 13:00 bis 13:45 Uhr, Raum SeoulSCA & SDO Konzepte und Design Volle Übersicht über Metadaten und Oracle Advanced Compression Prozessdaten mit Oracle BAM12:00 bis 12:45 Uhr, Raum Oslo 13:00 bis 13:45 Uhr, Raum Singapur 13:00 bis 13:45 Uhr, Raum RigaBenutzeroberflächen in SOA-Landschaften Spezialitäten zur Oracle Lizenzierung Strategien auf dem Weg zum Cloud Computing12:00 bis 12:45 Uhr, Raum Budapest 16:00 bis 16:45 Uhr, Raum Singapur 15:00 bis 15:45 Uhr, Raum KiewSOA Antipatterns eine wilde Reise durch die Welt Modeling the business – Integration und Betriebsüberwachung mit derder SOA Projekte Oracle BPA Suite and BPM Suite in Practice Oracle SOA Suite 11g13:00 bis 13:45 Uhr, Raum Budapest 16:00 bis 16:45 Uhr, Raum KiewFormulare in Papierform ablösen SOA-Testingmit der BPM Suite 11g14:00 – 14:45 Uhr, Raum HelsinkiPlan-Build-Run Oracle BPA Suite undOracle Grid Control kombiniert14:00 bis 14:45 Uhr, Raum PragAnalytische Funktionen selbst gemacht16:00 bis 16:45 Uhr, Raum BudapestProzessautomatisierung am Beispiel: Wie passenBPMN und BPEL zusammen? Analytische Funktionen leicht gemacht – Data Cartridges für Data Warehouses © OPITZ CONSULTING GmbH 2010 Seite 52

×