Frage

Ich benutze Talend, um ein Data Warehouse zu bevölkern. Mein Job ist es, Kundendaten in eine Dimensionstabelle und Transaktionsdaten in die Faktentabelle zu schreiben. Der Ersatzschlüssel (P_Key) in der Faktentabelle ist automatisch inkrementiert. Wenn ich einen neuen Kunden einfüge, brauche ich meine Faktentabelle, um die ID des zugehörigen Kunden widerzuspiegeln.

Wie ich bereits erwähnt habe, ist mein P_Key automatisch auto_incrementing, sodass ich nicht einfach einen beliebigen Wert für den P_Key einfügen kann.

Irgendwelche Gedanken darüber, wie ich eine Zeile in meine Dimensionstabelle einfügen und immer noch den Primärschlüssel in meinem Tatsachenprotokoll abrufen kann?

Mehr Info:

Was ist, wenn die eingehenden Daten nicht normalisiert sind? Zum Beispiel habe ich einen CSV mit den folgenden Daten:

order #   date        total customer# first_name last_name
111       1/2/2010    500    101      John        Smith     
222       1/3/2010    600    101      John        Smith

Offensichtlich möchte ich, dass die Kundeninformationen in der Dimensionstabelle und die Transaktionsdaten in der Faktentabelle angezeigt werden:

dimension
101  john smith

fact
111       1/3/2010
222       1/3/2010

Wie Sie bereits erwähnt haben, ist der Schlüssel der Dimensionstabelle eine automatische Inkrementierung. Die Tatsache Tabelle muss auf diesen Schlüssel verweisen. Wie entwirft man den ETL -Job so, dass der Ersatzschlüssel nach einem Einsatz zurückgegeben wird?

Wie gehen Sie mit den Schlüssel um, wenn die Kundendaten (wie oben) beendet sind?

War es hilfreich?

Lösung

Ich habe Ihr Problem möglicherweise missverstanden:

  1. Eine Faktentabelle kann eine automatische Inkrementierung von PK aufweisen oder nicht, normalerweise eine PK in einer Faktentabelle ist eine Verbundheit aus mehreren FK-Referenzierung von Dimensionstabellen.

  2. Eine Dimensionstabelle sollte eine automatische Inkrementierung von PK haben.

  3. Ein neuer Kunde sollte in den Kundendimensionstabelle "landen", bevor die Transaktion den DW (oder zumindest die Faktentabelle) erreicht.

  4. Eine Dimensionstabelle sollte einen BusinessKey haben, der einen Kunden einzigartig identifiziert - wie E -Mail, vollständige Name + PIN oder ähnlich.

  5. Eine eingehende Transaktionsreihe sollte auch das Feld Customer BusinessKey haben - so identifizieren wir den Kunden.

  6. Verwenden Sie den BusinessKey, um den Customer PrimaryKey aus der Kundendimensionstabelle zu suchen, bevor Sie die Transaktion in die Faktentabelle einfügen.

BEARBEITEN

Wenn Ihre neuen Kundendaten mit der Transaktion gebündelt sind, finden Sie einen Weg, um Kundendaten zu extrahieren und sie vor der Transaktion an die DW zu leiten.

AKTUALISIEREN:

Laden Sie zuerst Dimcustomer, entscheiden Sie sich für BusinessKey - so würde die Dimension so aussehen:

CustomerKey = 12345 (auto-incremented)
CustomerBusinessKey = john_smith_101 (must uniquely identify the John Smith)
CustomerFirstName = John
CustomerLastName = Smith

Während der Dimensionsladeprozess müssen Sie eingehende Zeilen in zwei Streams, vorhandenen und neuen Kunden trennen. Zeilen aus dem Stream "vorhandener Kunden" aktualisieren die Dim -Tabelle (Typ 1 SCD), während Zeilen aus dem Stream "New Customer" eingefügt werden. Es sollte keine Duplikate im Strom von Zeilen geben, die eingefügt werden. Sie können dies erreichen, indem Sie sie in eine Inszenierungstabelle einfügen und dort vor dem endgültigen Einsatz in die Dimensionstabelle Duplikate entfernen. Sie können auch Duplikate extrahieren und wieder in den Ladevorgang weiterleiten, um Kundenunterlagen zu aktualisieren. Sie können neuere Daten enthalten - wie aktualisierte Telefonnummern oder ähnliche.

Sobald der Kunde in der Lage ist, laden Sie Fakten.

Der Faktentisch sollte ungefähr aussehen wie:

DateKey     (PK)
CustomerKey
OrderNumber (PK)
Total

Ich habe den zusammengesetzten Primärschlüssel des DateKey und des OrderNumbers verwendet, sodass die Bestellnummer -Sequenz von Zeit zu Zeit zurückgesetzt werden kann.

Ändern Sie während des Ladevorgangs den Tatsachenaufzeichnung, um so etwas auszusehen:

DateKey CustomerBusinessKey OrderNumber Total
20100201  john_smith_101       111       500
20100301  john_smith_101       222       600

Zu diesem Zeitpunkt müssen wir den CustomerBusinessKey mit dem CustomerKey aus der Dimensionstabelle ersetzen. Nach der Suche würde der Stream so aussehen wie:

DateKey CustomerKey OrderNumber Total
20100201 12345       111         500
20100301 12345       222         600

Dies kann jetzt in die Faktentabelle eingefügt werden.

Ich habe auch ein bisschen betrogen - habe keinen Datumsschlüssel aus dem Dimdate gesucht und nicht nach vorhandenen Zeilen in der Faktentabelle gesucht. Wenn Sie die Faktentabelle laden, können Sie vor dem Laden nach vorhandener Kombination (DateKey, Ordernumer) suchen, oder überlassen Sie sie dem Primärschlüssel, um erneut Duplikate zu schützen - Ihre Wahl. Stellen Sie auf jeden Fall sicher, dass ein Versuch, dieselben Daten in die Faktentabelle zu laden, fehlschlägt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top