Business Intelligence mit Oracle9i

Werbung
Dr. Jens Albrecht
Berater
Business Intelligence & Warehousing
Oracle Deutschland GmbH
Business
Intelligence
mit Oracle9i
Ein Überblick
Agenda
Oracle9i BI&W Architektur
ETL Funktionen
Materialized Views
Oracle Warehouse Builder
Discoverer mit Analytical Functions
Klassische BI Architektur
OLAP
Engine
ETL Tool
Analytic Apps
Transformation
Engine
ETLTool
Lineage
Mining
Engine
Query &
Analysis
Database
Transformation
Engine
Name/Address
Scrubbing
Reporting
Engine
Enterprise
Reporting
P
o
r
t
a
l
Oracle BI Architektur
Oracle BI Architektur
Oracle 9i Business Intelligence
Operational
Data
Discoverer
Oracle9i
BI Beans
ERP
Data
Warehouse
Builder
ETL
Data
Mining
Analytic
Functions
OLAP
Services
Clickstream
Personalization
External
Data
CWM and Repository
Enterprise
Enterprise Manager
Manager and
and Workflow
Workflow
Oracle 9i New Features
(relationales) Datenbanksystem
–
–
–
–
ETL
Partitioning (LIST)
Materialized Views
Analytical Functions
Tools
–
OWB, Discoverer, iAS, OLAP Services,
Agenda
Oracle9i BI&W Architektur
ETL Funktionen
Materialized Views
Oracle Warehouse Builder
Discoverer mit Analytical Functions
Klassischer ETL Prozess
DWH
OLTP
Extraktion
xtraktion
relevanter
relevanter
Daten
Daten
Transport
ransport
der
der
Daten
Daten
Cleaning
Cleaning
Transformation
ransformation
Einfügen
Einfügen //
Laden
aden
in
in das
das
DWH
DWH
„Transform-then-Load“
Einbindung externer Programme
–
aufwändig, ineffizient, langwierig, teuer
Oracle9i ETL
DWH 9i
OLTP
Extraktion
xtraktion
relevanter
relevanter
Daten
Daten
Transport
ransport
der
der
Daten
Daten
Cleaning
Cleaning
Transformation
ransformation
Einfügen
Einfügen //
Laden
aden
in
in das
das
DWH
DWH
Change
Data Capture
Transport. TS
External Tables
„Load-then-Transform“
Table Functions
Multi Table
INSERT &
MERGE
Externe Tabellen
Flat-Files als Read-Only Tabellen
Zugriff mit SELECT wie auf reguläre Tabellen
–
schneller Full-Table-Scan, aber keine Indizes
Definition über
CREATE TABLE .. ORGANIZATION EXTERNAL
Vorteile zu SQL*Loader
–
–
–
Selektion mit WHERE
Joins mit anderen (externen) Tabellen
Paralleles Lesen aus einer Datei
Externe Tabellen
CREATE TABLE Neukunden_Ext (
Vorname
CHAR(30),
Nachname
CHAR(30),
Geb_Tag
CHAR(12))
ORGANIZATION EXTERNAL (
TYPE oracle_loader
DEFAULT DIRECTORY ’/home/HRLoad’
ACCESS PARAMETERS (
RECORDS DELIMITED BY NEWLINE
FIELDS TERMINATED BY ’,’
BADFILE ’Neukunden_Ext.bad’
LOGFILE ’Neukunden_Ext.log’
MISSING FIELDS ARE NULL)
LOCATION (’Neukunden.txt’))
PARALLEL 4
REJECT LIMIT UNLIMITED
Externe Tabellen
SELECT * FROM Neukunden_Ext
INSERT INTO Kunden
SELECT
Ku_Seq.NEXTVAL, -- z.B. künstl. Schlüssel
Vorname,
Nachname,
TO_DATE(Geb_Tag, ’DD.MM.YY’)
FROM Neukunden_Ext
Table Functions
Funktionen, die eine Tabelle (= Menge von
Sätzen) zurückliefern
–
FROM Klausel eines SELECT Statements
Erlauben komplexe Transformationen von
Quelldaten
Ausführung durch Parallelisierung und
Pipelining beschleunigt
Implementierung in PL/SQL, JAVA, C
Table Functions
CREATE TYPE Ref_Cur_Type REF CURSOR;
CREATE TYPE Kunden_Type Kunden%ROWTYPE;
CREATE OR REPLACE FUNCTION Transform_Neukunden(c Ref_Cur_Type)
RETURN Kunden_Type
PIPELINED
PARALLEL_ENABLE (PARTITION c BY ANY) IS
v_Kunde Kunden_Type;
BEGIN
FOR rec IN c LOOP
/* Transformation Konsistenzprüfungen */
...
/* Befüllen des Datensatzes */
v_Kunde.Nr := ...;
PIPE ROW(v_kunde);
END LOOP;
RETURN;
END;
Table Functions & Ext. Table
f(x)
LOAD
FLAT FILES
STAGE
DW
Table Functions & Ext. Table
External
Table
FLAT FILES
Table
Function
NO STAGE!
INSERT /*+ APPEND, PARALLEL */
INTO Kunden
SELECT *
FROM TABLE(
Transform_Neukunden(
CURSOR(
SELECT *
FROM Neukunden_Ext)));
DW
Multi-Table INSERT
Einfügen in mehrere Tabellen mit einer
INSERT-Anweisung
–
–
Früher nur mit PL/SQL-Cursor möglich
Erspart mehrfaches Scannen der Quelldaten
Ausprägungen
–
–
Unconditional
Conditional FIRST, ALL
Intern für Refresh von MV’s verwendet
Proprietär, noch kein SQL Standard
Uncond‘l INSERT ALL Pivoting
Host_Quartal_Verkauf(
Produkt_Nr,
Jahr,
Umsatz_Q1, Umsatz_Q2,
Umsatz_Q3, Umsatz_Q4)
Quartal_Verkauf(
Produkt_Nr,
Quartal,
Umsatz)
INSERT ALL /*+ APPEND */
INTO Quartal_Verkauf VALUES
(Produkt_Nr,Jahr || ’/Q1’, Umsatz_Q1)
INTO Quartal_Verkauf VALUES
(Produkt_Nr,Jahr || ’/Q2’, Umsatz_Q2)
INTO Quartal_Verkauf VALUES
(Produkt_Nr, Jahr || ’/Q3’, Umsatz_Q3)
INTO Quartal_Verkauf VALUES
(Produkt_Nr, Jahr || ’/Q4’, Umsatz_Q4)
SELECT * FROM Host_Quartal_Verkauf
Conditional INSERT FIRST
INSERT FIRST
WHEN Umsatz > 1000
INTO Top_Produkte VALUES (Produkt_Nr)
WHEN Umsatz > 500
INTO Mittelmaessige_Produkte VALUES (Produkt_Nr)
ELSE
INTO Ladenhueter_Produkte VALUES (Produkt_Nr)
SELECT Produkt_Nr, SUM(Umsatz) AS Umsatz
FROM Quartal_Verkauf
GROUP BY Produkt_Nr, Quartal
MERGE
Insert bzw. Update
–
–
–
Abhängig davon, ob Match-Kriterium erfüllt
(Datensatz schon vorhanden) oder nicht
Früher nur mit PL/SQL-Cursor möglich
Erspart mehrfaches Scannen der Quelldaten
Standardoperation im DWH
Vorgeschlagen für SQL Standard
MERGE
Neukunden(
Name, Vorname,
Geb_Dat)
Update / Insert
Kunden(
Ku_ID,
Name, Vorname,
Geb_dat)
MERGE INTO Kunden K
USING Neukunden N
ON (N.Name = K.Name AND
N.Geb_Dat = K.Geb_Dat)
WHEN MATCHED THEN
UPDATE SET K.Name = N.Name,
K.Vorname=N.Vorname,
K.Geb_Dat=N.Geb_Dat
WHEN NOT MATCHED THEN
INSERT VALUES (Ku_Seq.NEXTVALUE,
N.Name, N.Vorname, N.Geb_Dat)
Fazit – Oracle9i ETL
Viele Aktivitäten innerhalb der Datenbank
–
Einfach und performant
Features
–
Change Data Capture, External Tables, Table
Functions, Multi-Table INSERT, Merge
Oracle 9i ermöglicht in einem Schritt
–
–
–
Paralleles Laden von Flat-Files
Filtern, Transformieren
Insert in verschiedene Zieltabellen oder Merge in
eine Zieltabelle
Agenda
Oracle9i BI&W Architektur
ETL Funktionen
Materialized Views
Oracle Warehouse Builder
Discoverer mit Analytical Functions
Materialized Views
Summen-Tabellen“
–
–
vorberechnete Aggregate
vorberechnete Joins
Ziele
–
–
–
Performance-Steigerung
Transparent für
Anwendungen („Query
Rewriting“)
möglichst inkrementelle
Wartung („Fast Refresh“)
Store
Product
Time
Sales
Data
Sum of
Sales by
Product
and
Store
Skip
Materialized View Definition
CREATE MATERIALIZED VIEW product_sales_mv
PCTFREE 0 TABLESPACE demo
BUILD DEFERRED
REFRESH FAST
ENABLE QUERY REWRITE
AS SELECT p.prod_name, SUM(amount) AS dollar_sales
FROM sales s, products p
WHERE s.prod_id = p.prod_id
GROUP BY prod_name;
MV – Einfaches Rewriting
SELECT p.prod_name, SUM(amount) AS dollar_sales
FROM sales s, products p
WHERE s.prod_id = p.prod_id
GROUP BY prod_name;
SELECT prod_name, dollar_sales
FROM product_sales_mv;
MVs - Query Rewriting
Arten von Rewriting
Exact Match
Join Bedingungen und Grouping
Columns stimmen überein
Aggregation to All
Teilmenge der Grouping Columns
werden angefragt, z.B. MV auf
month, product; Anfrage auf
month
Rollup
Anfrage nach Aggregat auf höhrer
Ebene als MV, z.B. MV auf
month und Anfrage auf quarter
Join Back
Spalte in Anfrage kann durch Join
der MV mit Dim.Tabelle ermittelt
werden
MV – Oracle9i New Features
Query Rewrite auch bei
WHERE Klausel in Definition von MV
Weniger Restriktionen für Fast Refresh
Verbesserter Summary Advisor
Package Explain Materialized View
MV mit Restriktionen
CREATE
CREATE MATERIALIZED
MATERIALIZED VIEW
VIEW product_sales_mv2
product_sales_mv2
ENABLE
ENABLE QUERY
QUERY REWRITE
REWRITE
AS
AS SELECT
SELECT p.prod_name,
p.prod_name, SUM(amount)
SUM(amount) AS
AS dollar_sales
dollar_sales
FROM
FROM sales
sales s,
s, products
products pp WHERE
WHERE s.prod_id
s.prod_id == p.prod_id
p.prod_id
AND
AND prod_name
prod_name >> 'B'
'B' AND
AND prod_name
prod_name << 'D'
'D'
GROUP
GROUP BY
BY prod_name;
prod_name;
Anfrage
SELECT
SELECT p.prod_name,
p.prod_name,
SUM(amount)
SUM(amount)
FROM
FROM sales
sales s,
s, products
products pp
WHERE
WHERE s.prod_id
s.prod_id ==
p.prod_id
p.prod_id AND
AND
prod_name
prod_name >> 'B'
'B' AND
AND
prod_name
prod_name <'C'GROUP
<'C'GROUP BY
BY
prod_name;
prod_name;
REWRITE
SELECT
SELECT prod_name,
prod_name,
SUM(dollar_sales)
SUM(dollar_sales)
FROM
FROM
product_sales_mv2
product_sales_mv2
WHERE
WHERE prod_name
prod_name >>
'B'
'B' AND
AND prod_name
prod_name
<'C'GROUP
<'C'GROUP BY
BY
prod_name;
prod_name;
Skip
Explain_MV in OEM
Summary Advisor und OEM
Summary Advisor und OEM
Fazit – Oracle9i MV‘s
Vorteile
–
–
Beschleunigung für DW-Anfragen
Einfache Wartbarkeit
Verbessert
–
–
–
Query Rewrite
Fast Refresh
Auswahl und Management
Agenda
Oracle9i BI&W Architektur
ETL Funktionen
Materialized Views
Oracle Warehouse Builder
Discoverer mit Analytical Functions
Oracle Warehouse Builder 3i
Graphisches Entwicklungswerkzeug für
–
–
Data Warehouse Modellierung (CWM)
Load Management
Daten-Extraktion
–
–
–
–
Relational
Flat File
Oracle Apps
SAP
Oracle Warehouse Builder 3i
Common Warehouse Metamodel
–
OMG-Standard
Integration mit anderen Produkten
–
–
–
–
–
OLAP Services (CWM)
Discoverer
iAS Portal
Oracle Workflow
Oracle Enterprise Manager
OWB Architecture
User
Code
Integrators
Integrators
Interface Generator
Runtime
API
Code
Repository
Target Schema
Development Environment
Runtime Environment
OWB Features
Generiert
–
–
–
–
SQL*Loader
PL/SQL
DDL
TCL für OEM
Sehr schnell, da
–
–
–
alles Datenbank-intern (PL/SQL)
Set-Based / Row-Based / Row-Failover Set
Bulk Load
D E M O N S T R A T I O N
Oracle Warehouse
Builder
Agenda
Oracle9i BI&W Architektur
ETL Funktionen
Materialized Views
Oracle Warehouse Builder
Discoverer mit Analytical Functions
Discoverer
Interaktives Analysewerkzeug
Rein relational (nicht Express)
Admin + User Edition
Drei Varianten
–
–
–
Discoverer 4i Desktop
Discoverer 4i Java (9iAS)
Discoverer 4i Viewer (9iAS)
Analytical Functions: Wofür?
Rangfolgen
–
RANK, NTILE, ...
Kumulative und laufende Aggregate
Ermittlung von Anteilswerten
Werten in bestimmten Abstand zum aktuellen
Wert gemäß einer Sortierung
–
LAG, LEAD, FIRST, LAST
Statistische Funktionen
–
Lineare Regression, Slope, Intercept
Analytical Functions: 9i
Inverse Percentile
–
Ermittlung des Wertes in einer Datenmenge, der
einem bestimmten Percentil entspricht
Hypothetischer Rang und Distribution
–
Der Rang oder das Percentil, das eine Zeile
zugewiesen bekäme, wenn sie in eine
spezifizierte Datenmenge eingefügt würde
Analytic Function - Template
Function OVER ( Partition Clause
Order by Clause
Window Clause )
Function - the analytic function being used
Partition Clause - arrange the result set into groups
Order by Clause - how data is ordered in partition
Window Clause - define set of rows to calculate result
Discoverer - Rank
Business analysis requirement
–
A ranking report of the cities by region where the
video rental store has outlets based upon sales
figures for the year
Discoverer reporting solution
–
Create a RANK() function
Discoverer - Rank
Rank function
Rank Sales =
RANK() OVER
(PARTITION BY
Calendar Year, Region
ORDER BY
Sales SUM DESC)
D E M O N S T R A T I O N
Discoverer
Skip
Discoverer - Top N / Bottom N
Business analysis requirement
–
A report which shows the top n / bottom n
products by year, region and city
Discoverer reporting solution
–
A modification of the RANK() report
Discoverer - Top N / Bottom N
Create 2 rank calculations
(1) Top N=
RANK() OVER
(PARTITION BY Calendar Year, Region, City
ORDER BY Sales SUM DESC )
(2) Bottom N=
RANK() OVER
(PARTITION BY Calendar Year, Region, City
ORDER BY Sales SUM ASC )
Discoverer - Moving Average
Moving average calculation
Sales 3 Month Moving Avg =
AVG(Sales SUM) OVER
(PARTITION BY Calendar Year
ORDER BY Calendar Month
RANGE INTERVAL '2' MONTH PRECEDING )
Fragen
Whitepaper
[email protected]
Q U E S T I O N S
A N S W E R S
Herunterladen