Nützliche Oracler 12c Features für Data Warehousing

Werbung
Nützliche Oracle 12c Features
für Data Warehousing
DOAG BI, 8. Juni 2016
Dani Schnider, Trivadis AG
BASEL BERN BRUGG DÜSSELDORF
HAMBURG COPENHAGEN LAUSANNE
FRANKFURT A.M. FREIBURG I.BR. GENEVA
MUNICH STUTTGART VIENNA ZURICH
Dani Schnider
Principal Consultant und
DWH/BI Lead Architect
bei Trivadis in Zürich
  Kursleiter verschiedener
Trivadis-Kurse
  Co-Autor des Buches «Data
Warehousing mit Oracle –
Business Intelligence in der
Praxis»
2
08.06.2016
Nützliche Oracle 12c Features für Data Warehousing
Oracle 12c bringt viele Neuerungen – auch für DWH
Data Redaction
In-Memory Option
APPROX_COUNT_DISTINCT
Temporal Validity
SQL Query Row Limits
Adaptive Query Optimization
UTL_CALL_STACK
IDENTITY Columns
Asynchronous Global Index Maintanance
SQL Pattern Matching
PL/SQL in SQL WITH Clause
Vector Transformation
08.06.2016
Multitenant Databases
Online Statistics Gathering
JSON Support
Partial Indexing
Information Lifecycle Management
Out-of-Place Materialized Views
3
Invisible Columns
Default Values Enhancements
Nützliche Oracle 12c Features für Data Warehousing
Online Statistics Gathering
4
08.06.2016
Nützliche Oracle 12c Features für Data Warehousing
ETL-Prozesse und Statistiken
DBMS_STATS.gather_table_stats
(ownname => 'STG'
,tabname => 'T1');
T1
2000
ETL-Mapping
T3
1500
T2
DBMS_STATS.gather_table_stats
(ownname => 'STG'
,tabname => 'T2');
3000
|
|
|
|
|
1
2
3
4
5
| INSERT STATEMENT
|
| 1500 |
| INSERT
| T3 | 1500 |
|
HASH JOIN
|
| 1500 |
|
TABLE ACCESS FULL| T1 | 2000 |
|
TABLE ACCESS FULL| T2 | 3000 |
Siehe Vortrag „So beschleunigen Sie Ihre ETL-Prozesse“ (DOAG BI 2015)
5
08.06.2016
Nützliche Oracle 12c Features für Data Warehousing
Online Statistics Gathering
  Nach dem Laden einer Tabelle sollten immer Statistiken berechnet werden
  Ab Oracle 12c funktioniert dies automatisch in folgenden Fällen:
–  CREATE TABLE AS SELECT
CREATE TABLE T3 AS
SELECT ... FROM T1 JOIN T2 ON ...
–  Direct-Load INSERT in leere Tabelle (nach TRUNCATE)
INSERT /*+ append */ INTO T3
SELECT ...
FROM T1 JOIN T2 ON ...
6
08.06.2016
Nützliche Oracle 12c Features für Data Warehousing
Online Statistics Gathering
Anwendungsfälle:
  Zwischentabellen in ETL-Ablauf (Staging Area, Cleansing Area)
  Hilfstabellen für Zwischenresultate von Ladeprozessen
Einschränkungen:
  Keine Index-Statistiken
  Keine Histogramme
  Keine Statistiken auf Partitionen und Subpartitionen
Siehe: https://danischnider.wordpress.com/2015/12/23/online-statistics-gathering-in-oracle-12c/
7
08.06.2016
Nützliche Oracle 12c Features für Data Warehousing
Default Values
8
08.06.2016
Nützliche Oracle 12c Features für Data Warehousing
Fehlende Attribute durch „Singletons“ ersetzen
STG_PRODUCTS
CLS_PRODUCTS
Edradour 10 years
Glenfarclas 105
Black Bowmore 1964
NULL
Laphroaig 15 years
Edradour 10 years
Glenfarclas 105
Black Bowmore 1964
Unknown
Laphroaig 15 years
INSERT
SELECT
,
FROM
INTO cls_products (product_code, product_desc)
product_code
NVL(product_desc, 'Unknown')
stg_products;
Siehe Vortrag „Fehlertolerante Ladeprozesse in Oracle“ (DOAG BI 2012)
9
08.06.2016
Nützliche Oracle 12c Features für Data Warehousing
DEFAULT Erweiterungen
  DEFAULT ON NULL wird verwendet, wenn NULL eingefügt wird
  DEFAULT kann eine Sequence sein (endlich!)
CREATE TABLE
(dwh_id
,whisky_code
,whisky_name
,price
,age
,distillery
,region
10
08.06.2016
dwh_whisky
NUMBER(8)
VARCHAR2(8)
VARCHAR2(40)
NUMBER (6,2)
VARCHAR2(3)
VARCHAR2(30)
VARCHAR2(30)
DEFAULT seq_whisky.NEXTVAL
NOT NULL
NOT NULL
DEFAULT ON NULL 0
DEFAULT ON NULL '< 7'
DEFAULT ON NULL 'Unknown Distillery'
DEFAULT ON NULL 'Unknown Region')
Nützliche Oracle 12c Features für Data Warehousing
IDENTITY Columns
  Automatische Vergabe von Sequenznummern („auto increment column“)
  Im Hintergrund wird eine Sequence erstellt (ISEQ$$_nnnnn)
CREATE TABLE
(dwh_id
,whisky_code
,whisky_name
,...)
dwh_whisky
NUMBER(8)
GENERATED BY DEFAULT AS IDENTITY
VARCHAR2(8) NOT NULL
VARCHAR2(40) NOT NULL
  GENERATED BY DEFAULT AS IDENTITY
  GENERATED BY DEFAULT ON NULL AS IDENTITY
  GENERATED ALWAYS AS IDENTITY
11
08.06.2016
Nützliche Oracle 12c Features für Data Warehousing
APPROX_COUNT_DISTINCT
12
08.06.2016
Nützliche Oracle 12c Features für Data Warehousing
Funktion APPROX_COUNT_DISTINCT
Anzahl unterschiedliche Kunden in SALES Tabelle:
SELECT COUNT(DISTINCT cust_id) FROM sales
Ungefähre Anzahl unterschiedliche Kunden in SALES Tabelle:
SELECT APPROX_COUNT_DISTINCT(cust_id) FROM sales
Neue Funktion APPROX_COUNT_DISTINCT
  Gleicher Algorithmus wie bei AUTO_SAMPLE_SIZE in DBMS_STATS (Oracle 11g)
  Für grosse Datenmengen schneller als COUNT(DISTINCT)
  Resultat nur ungefähr (+/- 4%)
13
08.06.2016
Nützliche Oracle 12c Features für Data Warehousing
APPROX_COUNT_DISTINCT: Performance
Quelle: https://antognini.ch/2014/10/the-approx_count_distinct-function-a-test-case/
14
08.06.2016
Nützliche Oracle 12c Features für Data Warehousing
APPROX_COUNT_DISTINCT: Genauigkeit
Quelle: https://antognini.ch/2014/10/the-approx_count_distinct-function-a-test-case/
15
08.06.2016
Nützliche Oracle 12c Features für Data Warehousing
Partial Indexing
16
08.06.2016
Nützliche Oracle 12c Features für Data Warehousing
Partial Indexing – Anwendungsfälle
  Auf aktuellen Daten werden häufiger selektive Abfragen gemacht
  Index auf neuster Partition soll erst nach Abschluss des Ladens erstellt werden
  Partitionierung nach Statuswerten mit unterschiedlichen Abfragen
17
08.06.2016
Nützliche Oracle 12c Features für Data Warehousing
Erstellen von Tabelle mit Partial Indexing
  Default auf Tabellenebene: INDEXING ON / OFF
  Kann pro Partition überschrieben werden
CREATE TABLE t_part (n NUMBER,
INDEXING OFF
PARTITION BY RANGE (n)
(PARTITION p1 VALUES LESS THAN
,PARTITION p2 VALUES LESS THAN
,PARTITION p3 VALUES LESS THAN
,PARTITION p4 VALUES LESS THAN
,PARTITION p5 VALUES LESS THAN
,PARTITION p6 VALUES LESS THAN
)
18
08.06.2016
name VARCHAR2(40))
(100)
(200) INDEXING OFF
(300)
(400)
(500) INDEXING ON
(600) INDEXING ON
Nützliche Oracle 12c Features für Data Warehousing
Erstellen von Partial Indexes
Partial Local Index
CREATE INDEX idx_part_local
ON t_part (name)
LOCAL INDEXING PARTIAL
Partial Global Index
CREATE INDEX idx_part_local
ON t_part (name)
[GLOBAL] INDEXING PARTIAL
19
08.06.2016
Nützliche Oracle 12c Features für Data Warehousing
Partial Local Index
Index
Partition P1
Index
Partition P2
Index
Partition P3
Index
Partition P4
Index
Partition P5
Index
Partition P6
Table
Partition
P1
Table
Partitition
P2
Table
Partitition
P3
Table
Partitition
P4
Table
Partitition
P5
Table
Partitition
P6
INDEXING OFF
20
08.06.2016
Nützliche Oracle 12c Features für Data Warehousing
INDEXING ON
Partial Global Index
Global Index
Table
Partition
P1
Table
Partitition
P2
Table
Partitition
P3
Table
Partitition
P4
INDEXING OFF
21
08.06.2016
Nützliche Oracle 12c Features für Data Warehousing
Table
Partitition
P5
Table
Partitition
P6
INDEXING ON
Asynchronous Global Index
Maintenance
22
08.06.2016
Nützliche Oracle 12c Features für Data Warehousing
Globale Indizes im Data Warehouse
  DROP / TRUNCATE PARTITION setzt globale Indizes auf UNUSABLE
  Index Rebuild notwendig
  Problematisch bei rollenden Zeitfenstern (alte Partitionen werden gelöscht)
! Globale Indizes im DWH möglichst vermeiden
…
…
23
08.06.2016
Nützliche Oracle 12c Features für Data Warehousing
Asynchrones Nachführen von globalen Indizes
In Oracle 12c können globale Indizes asynchron aktualisiert werden:
  Schritt 1: Partition löschen (DROP oder TRUNCATE PARTITION)
ALTER TABLE sales DROP PARTITION p_2016_02 UPDATE INDEXES
  Index bleibt gültig, enthält aber „Orphaned Entries“
SELECT index_name, status, orphaned_entries
WHERE index_name = 'SALES_PK'
INDEX_NAME
STATUS
ORPHANED_ENTRIES
-------------- -------- ---------------SALES_PK
VALID
YES
24
08.06.2016
Nützliche Oracle 12c Features für Data Warehousing
Asynchrones Nachführen von globalen Indizes
  Schritt 2: Orphaned Entries aus Index löschen. Varianten:
–  Scheduler Job SYS.PMO_DEFERRED_GIDX_MAINT_JOB
–  dbms_part.cleanup_gidx
–  ALTER INDEX REBUILD [PARTITION]
–  ALTER INDEX [PARTITION] COALESCE CLEANUP
dbms_part.cleanup_gidx(schema_name_in => USER,
table_name_in => 'SALES’)
25
08.06.2016
Nützliche Oracle 12c Features für Data Warehousing
Müssen die Orphans überhaupt gelöscht werden?
  Ja
Orphans bleiben im Index und werden nicht überschrieben
  Index wächst, da Speicherplatz nicht freigegeben wird
  Ausnahme: Unique Indexes, falls gleicher Eintrag wieder eingefügt wird
Siehe Richard Foote‘s Oracle Blog
https://richardfoote.wordpress.com/2013/08/02/12c-asynchronous-global-index-maintenance-part-i-where-are-we-now/
https://richardfoote.wordpress.com/2013/08/06/12c-asynchronous-global-index-maintenance-part-ii-the-space-between/
https://richardfoote.wordpress.com/category/asynchronous-global-index-maintenance/
26
08.06.2016
Nützliche Oracle 12c Features für Data Warehousing
Vector Transformation
27
08.06.2016
Nützliche Oracle 12c Features für Data Warehousing
Vector Transformation
  Phase 1 (für jede Dimension mit Filterkriterien)
1.  Scan auf Dimensionstabelle (inkl. Filterung der Daten)
2.  Ermittlung von Key Vector
3.  Aggregation der Daten (In-Memory Accumulator)
4.  Erstellen von temporärer Tabelle
  Phase 2
5.  Full Table Scan auf Faktentabelle, Filterung anhand von Key Vectors
6.  Aggregation mittels HASH GROUP BY / VECTOR GROUP BY
7.  Join auf temporäre Tabellen (Join Back)
8.  Ev. Join von weiteren Dimensionen (ohne Filterkriterien)
28
08.06.2016
Nützliche Oracle 12c Features für Data Warehousing
Vector Transformation
FACTS
DIM1
11
12
13
14
15
16
17
18
Alpha
Alpha
Beta
Beta
Beta
Gamma
Delta
Delta
DIM2
21
22
23
24
25
26
29
08.06.2016
X
X
Y
Y
Y
Z
green
blue
green
blue
red
red
11
11
12
12
12
13
14
14
14
14
15
15
15
16
16
17
17
18
18
18
Nützliche Oracle 12c Features für Data Warehousing
22
24
21
22
24
22
21
24
25
26
23
24
26
22
23
22
25
21
24
26
1000
1200
300
3200
700
1100
2000
800
1600
700
1100
1200
500
2400
800
1300
1100
900
2100
600
SELECT
,
FROM
JOIN
JOIN
WHERE
D1, D21, D22
SUM(FACTS.F)
FACTS
DIM1 ON (...)
DIM2 ON (...)
D1 IN ('Beta',
'Gamma')
AND D21 = 'Y'
GROUP BY D1, D21, D22
Vector Transformation
FACTS
DIM1
11
12
13
14
15
16
17
18
KV1
Alpha
Alpha
Beta
Beta
Beta
Gamma
Delta
Delta
DIM2
21
22
23
24
25
26
30
08.06.2016
X
X
Y
Y
Y
Z
0
0
1
1
1
2
0
0
KV2
green
blue
green
blue
red
red
0
0
1
2
3
0
TMP1
1
2
Beta
Gamma
TMP2
1 Y green
2 Y blue
3 Y red
11
11
12
12
12
13
14
14
14
14
15
15
15
16
16
17
17
18
18
18
Nützliche Oracle 12c Features für Data Warehousing
22
24
21
22
24
22
21
24
25
26
23
24
26
22
23
22
25
21
24
26
1000
1200
300
3200
700
1100
2000
800
1600
700
1100
1200
500
2400
800
1300
1100
900
2100
600
0
0
0
0
0
1
1
1
1
1
1
1
1
2
2
0
0
0
0
0
0
2
0
0
2
0
0
2
3
0
1
2
0
0
1
0
3
0
2
0
Beta
Beta
Beta
Gamma
Y
Y
Y
Y
green 1100
blue 2000
red
1600
green 800
------------------------------------------------------------------|
0 | SELECT STATEMENT
|
|
|
1 | TEMP TABLE TRANSFORMATION
|
|
|
2 |
LOAD AS SELECT
| SYS_TEMP_0FD9D662E_84B3F4 |
|
3 |
VECTOR GROUP BY
|
|
|
4 |
KEY VECTOR CREATE BUFFERED| :KV0000
|
|* 5 |
TABLE ACCESS FULL
| PRODUCTS
|
|
6 |
LOAD AS SELECT
| SYS_TEMP_0FD9D662F_84B3F4 |
|
7 |
VECTOR GROUP BY
|
|
|
8 |
KEY VECTOR CREATE BUFFERED| :KV0001
|
|* 9 |
TABLE ACCESS FULL
| CUSTOMERS
|
| 10 |
HASH GROUP BY
|
|
|* 11 |
HASH JOIN
|
|
| 12 |
MERGE JOIN CARTESIAN
|
|
| 13 |
TABLE ACCESS FULL
| SYS_TEMP_0FD9D662E_84B3F4 |
| 14 |
BUFFER SORT
|
|
| 15 |
TABLE ACCESS FULL
| SYS_TEMP_0FD9D662F_84B3F4 |
| 16 |
VIEW
| VW_VT_83032D7B
|
| 17 |
VECTOR GROUP BY
|
|
| 18 |
HASH GROUP BY
|
|
| 19 |
KEY VECTOR USE
| :KV0000
|
| 20 |
KEY VECTOR USE
| :KV0001
|
| 21 |
PARTITION RANGE ALL |
|
|* 22 |
TABLE ACCESS FULL
| SALES
|
------------------------------------------------------------------31
08.06.2016
Nützliche Oracle 12c Features für Data Warehousing
1
2
3
------------------------------------------------------------------------|
0 | SELECT STATEMENT
|
|
|
1 | TEMP TABLE TRANSFORMATION
|
|
|
2 |
LOAD AS SELECT
| SYS_TEMP_0FD9D6696_84B3F4 |
|
3 |
VECTOR GROUP BY
|
|
|
4 |
KEY VECTOR CREATE BUFFERED
| :KV0000
|
|* 5 |
TABLE ACCESS INMEMORY FULL
| PRODUCTS
|
|
6 |
LOAD AS SELECT
| SYS_TEMP_0FD9D6697_84B3F4 |
|
7 |
VECTOR GROUP BY
|
|
|
8 |
KEY VECTOR CREATE BUFFERED
| :KV0001
|
|* 9 |
TABLE ACCESS INMEMORY FULL
| CUSTOMERS
|
| 10 |
HASH GROUP BY
|
|
|* 11 |
HASH JOIN
|
|
| 12 |
MERGE JOIN CARTESIAN
|
|
| 13 |
TABLE ACCESS FULL
| SYS_TEMP_0FD9D6696_84B3F4 |
| 14 |
BUFFER SORT
|
|
| 15 |
TABLE ACCESS FULL
| SYS_TEMP_0FD9D6697_84B3F4 |
| 16 |
VIEW
| VW_VT_83032D7B
|
| 17 |
VECTOR GROUP BY
|
|
| 18 |
HASH GROUP BY
|
|
| 19 |
KEY VECTOR USE
| :KV0000
|
| 20 |
KEY VECTOR USE
| :KV0001
|
| 21 |
PARTITION RANGE ALL
|
|
|* 22 |
TABLE ACCESS INMEMORY FULL| SALES
|
------------------------------------------------------------------------32
08.06.2016
Nützliche Oracle 12c Features für Data Warehousing
1
2
3
Vielen Dank.
Dani Schnider
Principal Consultant
Tel. +41 58 459 50 81
[email protected]
33
08.06.2016
Nützliche Oracle 12c Features für Data Warehousing
Herunterladen