Chevauchements. SAP BusinessObjects Data Services 4.1 Support Package 1
Capture de données modifiées
La requête sélectionne les lignes de SOURCE_TABLE à charger dans TARGET_TABLE.
Par exemple :
SOURCE.UPDATE_TIMESTAMP > $Last_Update
La requête comprend une clause WHERE pour filtrer les lignes entre les horodatages.
• Un workflow pour effectuer les actions suivantes :
1.
Lire la table de statut
2.
Définir la valeur d'une variable pour le dernier horodatage
3.
Appeler le flux de données avec la variable qui lui est passée comme paramètre
4.
Mettre à jour la table de statut avec le nouvel horodatage
• Un job pour exécuter le workflow
20.5.2 Chevauchements
Sauf si les données source sont rigoureusement isolées durant le processus d'extraction (ce qui n'est habituellement pas réalisable), il existe une fenêtre de temps où les modifications peuvent être perdues entre deux cycles d'extraction. Cette période de chevauchement affecte la capture des données modifiées basée sur l'horodatage parce que ce type de capture de données repose sur un horodatage statique pour déterminer les données modifiées.
Supposons par exemple qu'une table comporte 1 000 lignes (classées de 1 à 1 000). Le job commence avec l'horodatage 3:00 et extrait chaque ligne. Pendant que le job s'exécute, il met à jour deux lignes
(1 et 1 000) ayant respectivement les horodatages 3:01 et 3:02. Le job extrait la ligne 200 pendant que quelqu'un met à jour la ligne 1. Lorsque le job extrait la ligne 300, il met à jour la ligne 1 000. Lorsqu'il est terminé, le job extrait le dernier horodatage (3:02) de la ligne 1 000, mais omet la mise à jour de la ligne 1.
Voila les données de la table :
Numéro de ligne
1
2
3
...
200
...
...
...
...
...
Colonne A
...
...
751 2012-11-22
Capture de données modifiées
Numéro de ligne
600
...
1 000
...
...
Colonne A
...
Il existe trois techniques pour gérer cette situation :
• Evitement des chevauchements
• Rapprochement des chevauchements
• Pré-échantillonnage
Les sections suivantes décrivent ces techniques et leur implémentation dans SAP BusinessObjects
Data Services. Cette section se poursuit avec l'hypothèse qu'il y a au moins un horodatage de mise à jour.
Rubriques associées
•
•
Rapprochement des chevauchements
•
•
20.5.2.1 Evitement des chevauchements
Dans certains cas, il est possible de configurer un système où il n'existe pas de possibilité de chevauchement. Vous pouvez éviter les chevauchements s'il existe un intervalle de traitement où aucune mise à jour ne se produit dans le système cible.
Par exemple, si vous pouvez garantir que l'extraction de données du système source ne dure pas plus d'une heure, vous pouvez exécuter à 1 h 00 chaque nuit un job qui sélectionne uniquement les données mises à jour avant minuit le jour précédent. Comme ce job régulier ne donne pas de mises à jour minute par minute, il garantit de ne jamais avoir de chevauchement et simplifie nettement la gestion de l'horodatage.
20.5.2.2 Rapprochement des chevauchements
752 2012-11-22
Capture de données modifiées
Le rapprochement des chevauchements requiert un processus d'extraction spécial qui réapplique les modifications pouvant s'être produites pendant la période de chevauchement. Cette extraction peut
être exécutée séparément de l'extraction normale. Par exemple, si l'horodatage le plus élevé chargé par le job précédent était 01/01/98 22:30 et que la période de chevauchement dure une heure, le rapprochement des chevauchements réapplique les données mises à jour entre 21 h 30 et 22 h 30 le
1er janvier 1998.
La période de chevauchement est habituellement égale à la plus longue durée possible de l'extraction.
Si l'extraction des données du système source peut durer jusqu'à n heures, une période de chevauchement de n heures (ou n plus un petit incrément) est conseillée. Par exemple, si l'exécution du job dure au plus deux heures, une période de chevauchement d'au moins deux heures est recommandée.
La création d'un flux de données de chevauchement distinct présente un avantage. Un flux de données
"normal" peut supposer que toutes les modifications sont nouvelles et faire des hypothèses pour simplifier les calculs et améliorer les performances. Par exemple, les lignes marquées comme INSEREES sont souvent chargées dans une tables de faits, mais les lignes marquées comme MISES A JOUR le sont rarement. Donc, le flux de données normal sélectionne les nouvelles lignes de la source, génère de nouvelles clés pour elles et utilise le chargeur de base de données pour ajouter les nouveaux faits
à la base de données cible. Comme le flux de données de chevauchement est susceptible d'appliquer
à nouveau les mêmes lignes, il ne peut pas les charger par lots aveuglément, sinon il crée des doublons.
Par conséquent, le flux de données de chevauchement doit contrôler si les lignes existent dans la cible et insérer uniquement celles qui manquent. Cette recherche affecte les performances, donc exécutez-la pour le plus petit nombre de lignes possible.
Si le volume de données est assez faible, vous pouvez charger l'ensemble du nouveau jeu de données
à l'aide de cette technique de contrôle avant chargement, ce qui évite d'avoir à créer deux flux de données distincts.
20.5.2.3 Pré-échantillonnage
Le pré-échantillonnage élimine le chevauchement en identifiant d'abord l'horodatage le plus récent du système, en l'enregistrant, puis en extrayant les lignes jusqu'à cet horodatage.
Cette technique est une extension du traitement d'horodatage simple. Principale différence : la table de statut contient désormais un horodatage de début et de fin. L'horodatage de début est le dernier extrait par le job précédent. L'horodatage de fin est celui sélectionné par le job en cours.
Revenons à l'exemple : le dernier job d'extraction a chargé des données de la table source dans la table cible et mis à jour la table de statut avec le dernier horodatage chargé :
Table source
753 2012-11-22
Capture de données modifiées
2
3
Clé
1
Table cible
Clé
1
Table de statut
Start_Timestamp
01/01/98 13:10
Données
Alvarez
Tanaka
Lani
Données
Alvarez
Update_Timestamp
01/01/98 13:10
01/01/98 14:12
01/01/98 14:39
Update_Timestamp
01/01/98 13:10
End_Timestamp
NULL
Il est maintenant 15 h 00 le 1er janvier 1998 et le job suivant s'exécute, il effectue les actions suivantes :
1.
Il sélectionne l'horodatage le plus récent de la table source et l'insère dans la table de statut comme horodatage de fin.
La commande SQL pour sélectionner une ligne est :
SELECT MAX(Update_Timestamp) FROM source table
La table de statut devient :
Table de statut
Start_Timestamp End_Timestamp
01/01/98 13:10 01/01/98 14:39
754 2012-11-22
Capture de données modifiées
2
3
1.
Il sélectionne les lignes de la table source dont les horodatages sont supérieurs à l'horodatage de début, mais inférieurs ou égaux à l'horodatage de fin. La commande SQL pour sélectionner ces lignes est :
SELECT *
FROM source table
WHERE Update_Timestamp > '1/1/98 1:10pm'
AND Update_Timestamp <= '1/1/98 2:39pm'
Cette opération renvoie les deuxième et troisième lignes (clé=2 et clé=3)
2.
Il charge les nouvelles lignes dans la table cible.
3.
Met à jour la table de statut en définissant l'horodatage de début comme étant le précédent horodatage de fin et en donnant à l'horodatage de fin la valeur NULL.
Au final, les valeurs des tables sont les suivantes :
Tableau 20-20 : Table source
Clé
1
Données
Alvarez
Update_Timestamp
01/01/98 13:10
Tanaka
Lani
01/01/98 14:12
01/01/98 14:39
2
3
Tableau 20-21 : Table cible
Clé
1
Données
Alvarez
Tanaka
Lani
Update_Timestamp
01/01/98 13:10
01/01/98 14:12
01/01/98 14:39
755 2012-11-22
Capture de données modifiées
Tableau 20-22 : Table de statut
Start_Timestamp
01/01/98 14:39
End_Timestamp
NULL
Pour développer l'exemple précédent afin de prendre en compte le temps de chevauchement, il faut apporter les modifications suivantes au workflow :
• Un flux de données pour extraire les modifications depuis la dernière mise à jour et avant l'horodatage le plus récent, par exemple Source > Requête > Cible.
La requête sélectionne les lignes de SOURCE_TABLE à charger dans TARGET_TABLE.
Par exemple :
SOURCE.UPDATE_TIMESTAMP > $start_last_update and
SOURCE.UPDATE_TIMESTAMP < $end_last_update
La requête comprend une clause WHERE pour filtrer les lignes entre les horodatages.
• Un workflow pour effectuer les actions suivantes :
1.
Lire la table source pour rechercher l'horodatage le plus récent.
2.
Définir la valeur de deux variables respectivement sur le début et la fin du temps de chevauchement.
3.
Appeler le flux de données avec les variables qui lui sont passées comme paramètres.
4.
Mettre à jour l'horodatage de début avec la valeur de l'horodatage de fin et donner à l'horodatage de fin la valeur NULL.
756 2012-11-22

公開リンクが更新されました
あなたのチャットの公開リンクが更新されました。