SQL / SSIS DataWareHouse Faktentabelle laden, Best Practices?

8

Ich baue mein erstes Datawarehouse in SQL 2008 / SSIS und suche nach Best Practices für das Laden der Faktentabellen.

Derzeit habe ich in meiner DW etwa 20 Dimensionen (Büros, Mitarbeiter, Produkte, Kunden usw.), die vom Typ 1 SCD sind. In meiner dw-Struktur gibt es ein paar Dinge, die ich bereits angewendet habe:

  • Keine Nullen (ersetzt durch Leerzeichen für Text oder 0 für Zahlen während des Staging)
  • unbekannte Schlüsselelemente in jeder Dimension (SK ID 0)
  • UPSERT für SCD Type 1 Laden von der Bühne in die Produktionstabelle
  • SELECT DISTINCT für das Laden von Dimensionen

In meinem Fakt, das SSIS-Projekt lädt, hat die gegenwärtige Methode, die ich für das Laden von Dimensionen habe, mehrfaches Nachschlagen (20+) zu jedem der DIMs, dann das Füllen der FACT-Tabelle mit den Daten.

Für meine Lookups setze ich:

  • Vollständiger Cache
  • Ignoriere Fehler für "keine übereinstimmenden Einträge"
  • Abgeleitete Transformation mit "ISNULL (surrogate_idkey)? 0: Ersatz-ID" für jeden SK, so dass bei fehlgeschlagenen Suchvorgängen standardmäßig die SK ID 0 (unbekanntes Element) verwendet wird.
  • Einige meiner Dimensionssuchen haben mehr als einen Geschäftsschlüssel

Ist das der beste Ansatz? Bilder angehängt, um mit meiner Beschreibung oben zu helfen.

    
exxoid 01.11.2012, 01:04
quelle

1 Antwort

5

Sieht gut aus. Es gibt Optionen, wenn Sie mit Leistungsproblemen zu kämpfen haben, aber wenn diese stabil sind (das Datenladezeitfenster wird beendet, Quellsysteme werden nicht gelöscht usw.), sehe ich keinen Grund für eine Änderung.

>

Einige mögliche Probleme, die man im Auge behalten sollte ...

  1. mit mehr als 20 vollständigen Cache-Lookup-Transformationen kann ein Problem darstellen, wenn Ihre Abmessungen aufgrund von Speicherbeschränkungen im SSIS-System zunehmen ... aber da sie vom Typ 1 sind, würde ich mir keine Sorgen machen.
  2. Full-Cache-Lookups "hydratisieren" Pre-Execution ... mit mehr als 20 von ihnen kann Sie verlangsamen

Eine gängige Alternative (zu dem, was Sie oben haben) besteht darin, die Faktentabellendaten aus dem Quellsystem zu extrahieren und in einem Staging-Bereich zu landen, bevor Sie die Dimensionssuchvorgänge über eine einzige SQL-Anweisung durchführen. Einige behalten sogar eine Reihe von Dimensionsschlüsselzuordnungstabellen im Bereitstellungsbereich speziell für diesen Zweck bei. Dies reduziert das Sperren / Blockieren auf dem Quellsystem ... wenn Sie jede Menge Daten haben und das Quellsystem blockieren müssen, während Sie die Daten auslesen und durch diese 20+ Lookup-Transformationen laufen lassen.

Eine gute Staging-Area-Strategie wird wichtiger, wenn Sie über eine große Datenmenge, große Dimensionen, komplexe Key-Mappings (in der Regel aufgrund mehrerer Quellsysteme) und kurze Zeitfenster zum Laden von Daten verfügen.

    
Bill Anton 01.11.2012, 10:17
quelle