Domanda

Sto usando Talend per popolare un data warehouse. Il mio lavoro è scrivere i dati dei clienti su una tabella di dimensioni e i dati di transazione nella tabella dei fatti. La chiave surrogata (P_KEY) sulla tabella dei fatti è automatica. Quando inserisco un nuovo cliente, ho bisogno della mia tabella di fatti per riflettere l'ID del cliente correlato.

Come ho già detto, il mio P_Key è auto_incrementing, quindi non posso semplicemente inserire un valore arbitrario per P_Key.

Qualche pensiero su come posso inserire una riga nella mia tabella delle dimensioni e ancora recuperare la chiave primaria per fare riferimento nel mio record di fatti?

Ulteriori informazioni:

Cosa succede se i dati in arrivo non sono normalizzati? Ad esempio, ho un CSV con i seguenti dati:

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

Ovviamente, voglio che le informazioni del cliente compaiano nella tabella delle dimensioni e i dati delle transazioni nella tabella dei fatti:

dimension
101  john smith

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

Come hai detto, la chiave della tabella delle dimensioni sarà incrementale automatica. La tabella dei fatti deve fare riferimento a questa chiave. Come si progetta il lavoro ETL in modo che la chiave surrogata venga restituita dopo un inserto?

Inoltre, se i dati dei clienti sono dedicati (come sopra) come si gestiscono le chiavi?

È stato utile?

Soluzione

Potrei averti frainteso il tuo problema, tuttavia:

  1. Una tabella di fatti può o meno avere un PK che incrementa auto, di solito un PK in una tabella di fatti è un composto di diverse tabelle di dimensione di riferimento FKS.

  2. Una tabella di dimensione dovrebbe avere un PK che incremento automatico.

  3. Un nuovo cliente dovrebbe "atterrare" nella tabella delle dimensioni del cliente prima che il fatto della transazione raggiunga il DW (o almeno la tabella dei fatti).

  4. Una tabella delle dimensioni dovrebbe avere un businessKey che identifica in modo univoco un cliente, come e -mail, nome completo + pin o simile.

  5. Una riga delle transazioni in arrivo dovrebbe avere anche il campo di businessKey del cliente, ecco come identifichiamo il cliente.

  6. Utilizzare BusinessKey per cercare il Cliente PrimaryKey dalla tabella delle dimensioni del cliente prima di inserire la transazione nella tabella dei fatti.

MODIFICARE

Se i tuoi nuovi dati dei clienti sono in bundle con la transazione, trova un modo per estrarre i dati dei clienti e instraderli verso il DW davanti alla transazione.

AGGIORNARE:

Carica prima Dimcustomer, decidi su BusinessKey - quindi la dimensione sarebbe simile a:

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

Durante il processo di caricamento della dimensione, è necessario separare le righe in arrivo in due flussi, esistenti e nuovi clienti. Le righe dal flusso "esistente" aggiorna la tabella Dim (tipo 1 SCD), mentre le righe dal flusso "nuovo cliente" vengono inserite. Non dovrebbero esserci duplicati nel flusso di righe che vengono inserite; Puoi raggiungere questo obiettivo inserendoli in una tabella di stadiazione e rimuovendo i duplicati lì, poco prima dell'inserto finale nella tabella delle dimensioni. È inoltre possibile estrarre duplicati e inserirli nel processo di caricamento per aggiornare i record dei clienti; Possono contenere dati più recenti, come numeri di telefono aggiornati o simili.

Una volta che il cliente è entrato, caricare i fatti.

La tabella dei fatti dovrebbe assomigliare a:

DateKey     (PK)
CustomerKey
OrderNumber (PK)
Total

Ho usato la chiave primaria composita di DateKey e OrderNumber, consentendo di ripristinare la sequenza dei numeri dell'ordine di volta in volta.

Durante il processo di caricamento, modifica il record di fatto per assomigliare a:

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

A questo punto dobbiamo sostituire il business tabella della tabella Dimension. Quindi, dopo la ricerca il flusso sarebbe:

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

Questo ora può essere inserito nella tabella dei fatti.

Ho anche imbrogliato un po ' - non ho cercato un tasto di data dalla dimdata e non ho cercato le righe esistenti nella tabella dei fatti. Quando si carica la tabella dei fatti, è possibile cercare una combinazione esistente (datekey, ordernumer) prima di caricare, oppure puoi lasciarlo alla chiave primaria per proteggere i duplicati di nuovo: la tua scelta. In ogni caso, assicurarsi che un tentativo di ricaricare gli stessi dati nella tabella dei fatti non riesca.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top