Inhalt | 5 |
Geleitwort | 14 |
Über dieses Buch | 16 |
Die Autoren | 18 |
1 Einleitung | 20 |
1.1 Ziele dieses Buches | 21 |
1.2 Struktur dieses Buches | 22 |
1.3 Hinweis zur Anwendung dieses Buches | 23 |
2 Architektur | 24 |
2.1 Data Warehouse-Architektur | 24 |
2.1.1 Aufbau eines Data Warehouse | 25 |
2.1.2 Transformationsschritte | 28 |
2.1.3 Architekturgrundsätze | 29 |
2.2 Architektur BI-Anwendungen | 32 |
2.2.1 Die BI-Plattform zur Integration von Datenquellen | 34 |
2.2.2 Die BI-Plattform zur Vereinheitlichung der Frontends | 36 |
2.3 Datenhaltung | 37 |
2.3.1 Grenzen gängiger DWH/BI-Technologien | 38 |
2.3.2 Datenhaltung im Hadoop-Ecosystem | 39 |
2.3.3 In-Memory-Datenbanken | 42 |
3 Datenmodellierung | 46 |
3.1 Vorgehensweise | 46 |
3.1.1 Anforderungsgetriebene Modellierung | 46 |
3.1.2 Quellsystemgetriebene Modellierung | 48 |
3.1.3 Kombination der Ansätze | 49 |
3.2 Relationale Modellierung | 49 |
3.2.1 Darstellung von relationalen Datenmodellen | 50 |
3.2.2 Normalisierung | 50 |
3.2.3 Stammdaten und Bewegungsdaten | 51 |
3.2.4 Historisierung | 51 |
3.2.5 Relationales Core | 53 |
3.2.6 Corporate Information Factory | 54 |
3.2.7 Data Vault Modeling | 54 |
3.3 Dimensionale Modellierung | 56 |
3.3.1 Implementierung von dimensionalen Modellen | 57 |
3.3.1.1 Relationale Implementierung | 58 |
3.3.1.2 Multidimensionale Implementierung | 59 |
3.3.2 Dimensionen | 60 |
3.3.2.1 Fachliche Attribute | 60 |
3.3.2.2 Technische Attribute | 60 |
3.3.2.3 Hierarchien | 61 |
3.3.2.4 Conformed Dimensions | 62 |
3.3.2.5 Slowly Changing Dimensions | 63 |
3.3.2.6 Zeitdimension | 66 |
3.3.2.7 Bridge Tables | 67 |
3.3.2.8 Spezielle Dimensionen | 69 |
3.3.3 Fakten | 70 |
3.3.3.1 Kennzahlen | 70 |
3.3.3.2 Typen von Fakten | 70 |
3.3.4 Modellierung spezieller Problemstellungen | 72 |
3.3.4.1 Fakten unterschiedlicher Granularität und Rollen | 72 |
3.3.4.2 Gemeinsame Hierarchiestufen in verschiedenen Dimensionen | 73 |
3.3.4.3 Modellierungsgrundsätze für Dimensionen und Fakten | 74 |
3.3.5 Darstellung von dimensionalen Modellen | 75 |
3.3.5.1 ADAPT-Notation | 75 |
3.3.5.2 Entity-Relationship-Diagramme | 77 |
3.3.5.3 Data-Warehouse-Bus-Matrix | 77 |
3.3.6 Dimensionales Core | 78 |
3.4 Tools zur Datenmodellierung | 79 |
3.4.1 Tools für relationale Datenmodellierung | 79 |
3.4.2 Tools für dimensionale Datenmodellierung | 80 |
4 Datenintegration | 82 |
4.1 Data Profiling | 83 |
4.1.1 Probleme mangelnder Datenqualität | 83 |
4.1.2 Einsatz von Data Profiling | 84 |
4.2 ETL | 85 |
4.2.1 Aufgaben der ETL-Prozesse | 86 |
4.2.1.1 Extraktion aus Quellsystemen | 86 |
4.2.1.2 Transformationen | 86 |
4.2.1.3 Laden in die Zieltabellen | 87 |
4.2.2 ETL-Tools | 87 |
4.2.2.1 Funktionalität von ETL-Tools | 89 |
4.2.2.2 ETL oder ELT? | 89 |
4.2.2.3 Positionierung von ETL-Tools | 91 |
4.2.3 Performance-Aspekte | 91 |
4.2.3.1 Mengenbasierte statt datensatzbasierte Verarbeitung | 91 |
4.2.3.2 ELT-Tool statt ETL-Tool | 92 |
4.2.3.3 Reduktion der Komplexität | 93 |
4.2.3.4 Frühzeitige Mengeneinschränkung | 94 |
4.2.3.5 Parallelisierung | 95 |
4.2.4 Steuerung der ETL-Prozesse | 97 |
4.2.4.1 Protokollierung des ETL-Ablaufs | 97 |
4.2.4.2 Restartfähigkeit und Wiederaufsetzpunkte | 98 |
4.3 Extraktion und Delta-Ermittlung | 99 |
4.3.1 Delta-Extraktion im Quellsystem | 100 |
4.3.1.1 Änderungsmarker und Journaltabellen | 100 |
4.3.1.2 Delta-Ermittlung und Pending Commits | 101 |
4.3.1.3 Change Data Capture | 102 |
4.3.2 Voll-Extraktion und Delta-Abgleich im Data Warehouse | 103 |
4.3.2.1 Zwei Versionen des Vollabzugs in der Staging Area | 104 |
4.3.2.2 Vorteil einer Voll-Extraktion für die Delta-Ermittlung | 106 |
4.3.3 Wann verwende ich was? | 106 |
4.4 Fehlerbehandlung | 107 |
4.4.1 Fehlende Attribute | 108 |
4.4.1.1 Filtern von fehlerhaften Datensätzen | 108 |
4.4.1.2 Fehlerhafte Datensätze in Fehlertabelle schreiben | 108 |
4.4.1.3 Singletons auf Attributebene | 109 |
4.4.2 Unbekannte Codewerte | 109 |
4.4.2.1 Filtern von fehlerhaften Datensätzen | 110 |
4.4.2.2 Singletons auf Datensatzebene | 110 |
4.4.2.3 Generierung von Embryo-Einträgen | 110 |
4.4.3 Fehlende Dimensionseinträge | 111 |
4.4.3.1 Filtern von unvollständigen Fakten | 112 |
4.4.3.2 Referenz auf Singleton-Einträge | 113 |
4.4.3.3 Generieren von Embryo-Einträgen | 114 |
4.4.4 Doppelte Datensätze | 115 |
4.4.4.1 Verwendung von DISTINCT | 116 |
4.4.4.2 Nur ersten Datensatz übernehmen | 116 |
4.5 Qualitätschecks | 116 |
4.5.1 Qualitätschecks vor und während des Ladens | 117 |
4.5.2 Qualitätschecks nach dem Laden | 118 |
4.5.3 Qualitätschecks mithilfe von Test-Tools | 118 |
4.6 Real-Time BI | 119 |
4.6.1 Begriffsbestimmung | 120 |
4.6.2 Garantierte Verfügbarkeit von Informationen zu gegebenem Zeitpunkt | 120 |
4.6.3 Verfügbarkeit von Informationen simultan zur Entstehung | 121 |
4.6.4 Verfügbarkeit von Informationen kurz nach ihrer Entstehung | 123 |
4.6.4.1 Events und Batchverarbeitung | 124 |
4.6.4.2 Real-Time-Partitionen | 125 |
4.6.5 Zusammenfassung | 126 |
5 Design der DWH-Schichten | 128 |
5.1 Staging Area | 129 |
5.1.1 Gründe für eine Staging Area | 130 |
5.1.2 Struktur der Stage-Tabellen | 131 |
5.1.3 ETL-Logik für Stage-Tabellen | 132 |
5.1.3.1 Einschränkungen bei der Extraktion | 133 |
5.1.3.2 Transformation | 133 |
5.1.3.3 Sonstige Informationen | 134 |
5.2 Cleansing Area | 134 |
5.2.1 Gründe für eine Cleansing Area | 134 |
5.2.2 Struktur der Cleanse-Tabellen | 135 |
5.2.3 Beziehungen in der Cleansing Area | 137 |
5.2.4 ETL-Logik für Cleanse-Tabellen | 139 |
5.2.4.1 Einschränkungen bei der Extraktion | 140 |
5.2.4.2 Transformation | 140 |
5.2.4.3 Sonstige Informationen | 141 |
5.3 Core-Datenmodell allgemein | 141 |
5.3.1 Aufgaben und Anforderungen an das Core | 142 |
5.3.2 Stammdaten im Core | 143 |
5.3.3 Bewegungsdaten im Core | 143 |
5.3.4 Beziehungen im Core | 143 |
5.3.5 Datenmodellierungsmethoden für das Core | 144 |
5.4 Core-Datenmodell relational mit Kopf- und Versionstabellen | 145 |
5.4.1 Historisierung von Stammdaten mit Kopf- und Versionstabellen | 146 |
5.4.2 Struktur der Stammdatentabellen | 147 |
5.4.2.1 Tabellenspalten und Schlüssel | 148 |
5.4.2.2 Beziehungen (1:n) zwischen Stammdaten | 151 |
5.4.2.3 Beziehungen (m:n) zwischen Stammdaten | 152 |
5.4.3 ETL-Logik für Stammdatentabellen | 154 |
5.4.3.1 Lookups (Schritt 1) | 155 |
5.4.3.2 Outer Join (Schritt 2) | 156 |
5.4.3.3 Neue Datensätze (Schritt 3) | 160 |
5.4.3.4 Schließen einer Version/Fall 1 (Schritt 4) | 161 |
5.4.3.5 Aktualisieren/Fall 2 (Schritt 5) | 161 |
5.4.3.6 Versionieren/Fall 3 und 4 (Schritt 6) | 161 |
5.4.3.7 Singletons | 161 |
5.4.4 Typen von Bewegungsdaten | 162 |
5.4.4.1 Transaction Tables | 163 |
5.4.4.2 Snapshot Tables | 163 |
5.4.4.3 Snapshot Tables versioniert | 164 |
5.4.5 Struktur der Bewegungstabellen | 165 |
5.4.5.1 Tabellenspalten und Schlüssel | 166 |
5.4.5.2 Beziehungen zu Stammdaten | 169 |
5.4.6 ETL-Logik für Bewegungstabellen | 172 |
5.4.6.1 Lookups | 173 |
5.4.6.2 Sonstige Informationen | 174 |
5.4.7 Views für externen Core-Zugriff | 174 |
5.4.7.1 Views für Stammdaten | 175 |
5.4.7.2 Views für Bewegungsdaten | 179 |
5.5 Core-Datenmodell relational mit Data Vault | 180 |
5.5.1 Stammdaten | 180 |
5.5.2 Beziehungen | 181 |
5.5.3 Bewegungsdaten | 181 |
5.5.4 Historisierung | 182 |
5.5.5 Struktur der Tabellen | 182 |
5.5.5.1 Hubtabellen – Tabellenspalten und Schlüssel | 182 |
5.5.5.2 Satellitentabellen – Tabellenspalten und Schlüssel | 183 |
5.5.5.3 Linktabellen – Tabellenspalten und Schlüssel | 184 |
5.5.6 ETL-Logik | 185 |
5.5.7 Views für externen Core-Zugriff auf das Data-Vault-Datenmodell | 186 |
5.5.7.1 Views für Stammdaten (ein Satellite pro Hub bzw. Link) | 186 |
5.5.7.2 Views für Stammdaten (mehrere Satellites pro Hub bzw. Link) | 189 |
5.6 Core-Datenmodell dimensional | 192 |
5.6.1 Star- oder Snowflake-Schema | 193 |
5.6.1.1 Star-Schema | 193 |
5.6.1.2 Snowflake-Schema | 194 |
5.6.2 Historisierung von Stammdaten mit SCD | 196 |
5.6.3 Struktur der Dimensionstabellen (Snowflake) | 199 |
5.6.3.1 Tabellenspalten und Schlüssel | 200 |
5.6.3.2 Beziehungen zwischen Hierarchiestufen | 203 |
5.6.4 ETL-Logik für Dimensionstabellen (Snowflake) | 204 |
5.6.4.1 Lookup | 204 |
5.6.4.2 Weitere Schritte | 205 |
5.6.5 Struktur der Faktentabellen (Snowflake) | 205 |
5.6.6 ETL-Logik für Faktentabellen (Snowflake) | 207 |
5.6.7 n:m-Beziehungen im dimensionalen Core | 207 |
5.7 Marts | 209 |
5.7.1 ROLAP oder MOLAP? | 210 |
5.7.2 Historisierung von Data Marts | 211 |
5.7.3 Star- oder Snowflake-Schema (ROLAP) | 212 |
5.7.4 Struktur der Dimensionstabellen (Star) | 213 |
5.7.4.1 Tabellenspalten und Schlüssel | 213 |
5.7.4.2 Beispiel für Conformed Rollup | 216 |
5.7.4.3 Beispiel für Dimension mit mehreren Hierarchien | 217 |
5.7.5 ETL-Logik für Dimensionstabellen (Star) | 218 |
5.7.5.1 Extraktion aus dem relationalen Core | 219 |
5.7.5.2 Extraktion aus dem dimensionalen Core | 226 |
5.7.6 Struktur der Faktentabellen (Star-Schema) | 228 |
5.7.7 ETL-Logik für Faktentabellen (Star) | 229 |
5.7.8 Multidimensionale Data Marts | 229 |
5.7.8.1 Dimensionen (Cube) | 230 |
5.7.8.2 Fakten (Cube) | 231 |
6 Physisches Datenbankdesign | 234 |
6.1 Indexierung | 235 |
6.1.1 Staging Area | 236 |
6.1.2 Cleansing Area | 236 |
6.1.3 Core | 236 |
6.1.4 Data Marts | 237 |
6.2 Constraints | 238 |
6.2.1 Primary Key Constraints | 238 |
6.2.2 Foreign Key Constraints | 239 |
6.2.3 Unique Constraints | 240 |
6.2.4 Check Constraints | 240 |
6.2.5 NOT NULL Constraints | 241 |
6.3 Partitionierung | 241 |
6.3.1 Grundprinzip von Partitionierung | 242 |
6.3.2 Gründe für Partitionierung | 242 |
6.3.3 Partitionierung in Staging und Cleansing Area | 243 |
6.3.4 Partitionierung im Core | 244 |
6.3.5 Partitionierung in den Data Marts | 244 |
6.4 Datenkomprimierung | 245 |
6.4.1 Redundanz | 246 |
6.4.2 Wörterbuchmethode/Tokenbasierte Reduktion | 246 |
6.4.3 Entropiekodierung | 246 |
6.4.4 Deduplikation | 247 |
6.4.5 Komprimierung bei spaltenorientierter Datenhaltung | 247 |
6.5 Aggregationen | 248 |
6.5.1 Vorberechnete Aggregationen | 249 |
6.5.2 Query Rewrite | 249 |
6.5.3 Einsatz im Data Warehouse | 250 |
7 BI-Anwendungen | 252 |
7.1 Überblick | 252 |
7.2 Standardberichte | 255 |
7.3 Ad-hoc-Analyse | 257 |
7.4 BI-Portale | 258 |
8 Betrieb | 260 |
8.1 Release-Management | 260 |
8.1.1 Kategorisierung der Anforderungen | 261 |
8.1.2 Schnittstellen zu Quellsystemen | 262 |
8.1.3 Umgang mit historischen Daten | 264 |
8.1.4 Datenbankumgebungen | 265 |
8.2 Deployment | 267 |
8.2.1 Manuelles Deployment | 267 |
8.2.2 Filebasiertes Deployment | 268 |
8.2.3 Repository-basiertes Deployment | 269 |
8.2.4 Kombiniertes Deployment | 269 |
8.3 Monitoring | 271 |
8.3.1 Betriebsmonitoring | 271 |
8.3.2 System und DB-Monitoring | 271 |
8.3.3 ETL-Monitoring | 271 |
8.3.4 Performance-Monitoring | 272 |
8.4 Migration | 274 |
8.4.1 Datenbank | 275 |
8.4.2 ETL-Tool | 276 |
8.4.3 BI-Tools | 277 |
Literatur | 278 |
Index | 280 |