Question

J'utilise Talend pour remplir un entrepôt de données. Mon travail est en train d'écrire les données clients à une table de dimension et les données de transaction à la table de faits. La clé de substitution (de p_key) sur la table de fait est auto-incrémentée. Lorsque j'insère un nouveau client, je dois ma table de fait pour refléter l'identifiant du client associé.

Comme je l'ai mentionné mon p_key est auto_incrementing automatique donc je ne peux pas insérer une valeur arbitraire pour le p_key.

Toute pensée sur la façon dont je peux insérer une ligne dans ma table de dimension et de récupérer encore la clé primaire de référence dans mon dossier de fait?

Plus d'infos:

Que faire si les données entrantes sont pas normalisées? Par exemple, j'ai un csv avec les données suivantes:

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

De toute évidence, je veux l'information client apparaisse dans la table de dimension, et les données de transaction dans la table de fait:

dimension
101  john smith

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

Comme vous l'avez mentionné, la clé de la table de dimension sera auto incrémentation. Le tableau de fait doit faire référence à cette clé. Comment concevez-vous le travail de etl de sorte que la clé de substitution est retourné après un insert?

En outre, si les données du client est deduped (comme ci-dessus) comment gérez-vous les clés?

Était-ce utile?

La solution

je vous ai mal compris problème, cependant:

  1. Une table de fait peut ou non avoir une PK à incrémentation automatique, généralement une PK dans une table de fait est un composite de plusieurs FKs référencement tables de dimensions.

  2. Une table de dimension doit avoir un PK auto-incrémentée.

  3. Un nouveau client devrait "terre" dans la table de dimension client avant le fait de la transaction atteint le DW (ou au moins la table de faits).

  4. Une table de dimension doit avoir un BusinessKey qui identifie un client -. E-mail comme, nom + broches, ou similaire

  5. Une ligne de transaction entrante devrait avoir aussi le champ BusinessKey client - c'est la façon dont nous identifions le client

  6. .
  7. Utilisez la BusinessKey pour rechercher la PrimaryKey client à partir de la table de dimension du client avant d'insérer la transaction dans la table de faits.

EDIT

Si votre nouvelles données client est livré avec la transaction, trouver un moyen d'extraire les données des clients et l'acheminer vers le DW avant de la transaction.

Mise à jour:

Charger DimCustomer Tout d'abord, décider BusinessKey - de sorte que la dimension ressemblerait à ceci:

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

Au cours du processus de chargement de dimension, vous devez séparer les lignes entrantes int deux flux, clients existants et nouveaux. Les lignes de flux sont mis à jour la table faible « client existant » (type 1 SCD), alors que les lignes du flux « nouveau client » sont insérés. Il devrait y avoir pas de doublons dans le flux de lignes qui sont insérées; vous pouvez accomplir cela en les insérant dans une table de mise en scène et en supprimant les doublons il, juste avant l'insertion finale dans la table de dimension. Vous pouvez également extraire les doublons et de la route dans le processus de chargement pour mettre à jour les dossiers des clients; ils peuvent contenir des données plus récentes - comme les numéros de téléphone mis à jour ou similaire.

Une fois que le client est, les faits de charge.

Le tableau de fait devrait ressembler à:

DateKey     (PK)
CustomerKey
OrderNumber (PK)
Total

J'utilise la clé primaire composite du DateKey et le OrderNumber, ce qui permet pour la séquence de numéro d'ordre pour réinitialiser de temps en temps.

Au cours du processus de chargement, modifiez le record du fait de ressembler à quelque chose comme:

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

À ce stade, nous devons remplacer le CustomerBusinessKey avec le CustomerKey de la table de dimension à l'aide d'une recherche. Ainsi, après la recherche du flux ressemblerait à ceci:

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

Cela peut maintenant être inséré dans la table de faits.

J'ai aussi triché un peu - ne pas rechercher une clé de la date de la DimDate, et ne pas chercher des lignes existantes dans la table de faits. Lors du chargement de la table de fait, vous pouvez rechercher la combinaison existante (DateKey, OrderNumer) avant le chargement, ou vous pouvez laisser à la clé primaire pour protéger les doublons agains - votre choix. Dans tous les cas, assurez-vous qu'une tentative de re-charger les mêmes données dans la table de faits échoue.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top