2017-10-13 10 views
0

J'ai un problème concernant la mise à jour de la date de fin de l'enregistrement précédent en utilisant la date de début des enregistrements suivants. Le problème est à la fois les enregistrements qui arrivent, dans la même table de chargement. Il n'y a pas non plus d'identifiant de ligne unique sauf la combinaison de toutes les colonnes. Exemple: Table source enregistrement précédent date de fin mise à jour dans informatica en utilisant le prochain enregistrement date de début

 
HICN  FIRST_NAME  LAST_NAME  M_NAME  DOB(string) START_DATE 
X123  ABC    DEF    M  ' 19600101  1/1/2013 
Y456  ABC    DEF    M   19600101  2/2/2014 
Maintenant, (ceci est mon exigence d'affaires, rien que je puisse faire à ce sujet) Dans la cible, j'ai une colonne supplémentaire END DATE. Ceci est la première charge et je dois identifier à la volée en utilisant une combinaison concaténée de prénom, nom, etc etc que le 1er et le deuxième enregistrement sont les mêmes et si (et seulement si) le numéro de HICN change pour le membre, je dois mettre à jour le date_fin du 1er enregistrement (c.-à-record avec HiCN X123) avec le start_date du 2e bloc (c.-à-record avec HiCN Y456) donc mon objectif devrait ressembler à:

 
HICN FIRST_NAME LAST_NAME M_NAME  DOB(string) START_DATE  END DATE 
X123 ABC   DEF  M  ' 19600101  1/1/2013  2/2/2014 
Y456 ABC   DEF  M   19600101  2/2/2014  12/31/1990 

J'ai compris comment mettre à jour les colonnes de date et le drapeau (que je n'ai pas mentionné ci-dessus pour le hicn actif et inactif pour un membre) pour une deuxième exécution mais je ne sais pas comment faire si les deux enregistrements viennent dans le même lot. Toute aide serait grandement appréciée. Merci

Répondre

0

Essayez ces options:

  1. Créer une colonne dans la table cible comme ROW_ID avec VARCHAR2 (100)

  2. Créer une expression dans la transformation d'expression avec suivante -

    MD5 (Col1 || '' || col2 || '' || ... etc)

    '*' - est un séparateur pour obtenir pré Sortie CISED

    Cette fonction MD5 génère un masque 32 bits que nous utiliserons dans les prochaines étapes

  3. Avoir une recherche dynamique sur la table cible

Maintenant, chaque fois que vous recevez une nouvelle ligne sera ajoutée à la cible ainsi que Recherche dynamique. Par conséquent, si vous essayez de faire correspondre le champ ROW_ID avec les 2e lignes ROW_ID calculées, vous pouvez facilement trouver l'enregistrement en double. MD5 est l'un des moyens les plus rapides et les plus efficaces de trouver des doublons en utilisant une liste de colonnes entières. NE FOGET pour créer Recherche dynamique sinon vous ne serez pas en mesure de trouver des dups. Faites-moi savoir si vous avez besoin d'informations supplémentaires.

+0

Oui, j'ai trouvé votre solution. J'ai appliqué les 2 premières étapes. Cependant, avant d'utiliser une recherche dynamique: 1. Serai-je capable de mettre à jour la première ligne end_date, disons row avec ROW_ID = 1, si la nouvelle ligne entrante correspond à la première ligne? 2. Si oui, comment mettre à jour le End_Date de la première ligne en utilisant la date de début de la deuxième rangée? Merci –

+0

Dans ce cas, vous devrez peut-être trier les enregistrements dans l'ordre inverse, puis obtenir la date de début du premier enregistrement et mettre à jour à la date de fin du deuxième enregistrement correspondant. Répétez la même chose pour l'enregistrement suivant jusqu'à la fin. J'espère que ça aide –

+0

Puisque l'utilisation d'un trieur ralentirait ma performance du mapping, puis-je utiliser Target Update pour identifier si le compteur (ROW_ID)> 1, puis mettre à jour en utilisant override sql et mettre à jour l'enregistrement avec la valeur -1 rendez-vous amoureux. Peut-on utiliser le remplacement de mise à jour pour [email protected]_Infa_Developer –