Explication de SAP Data Services
Accès aux données
Développement de jobs et de flux de données
Correction des erreurs des jobs d'arrière-plan
Utilisation de fonctions, de scripts et de variables
Interrogation de données à l'aide de transformations de plateforme
Fractionnement et combinaison des données avec des transformations de plateforme
Gestion des erreurs et récupération à partir d'une défaillance
Mise à jour des données
Conception de scénarios ETL avancés à l'aide des transformations SAP Data Services Integrator
Optimisation des performances

Configuration du traitement des erreurs

Objective

After completing this lesson, you will be able to expliquer les niveaux des stratégies de récupération des données

Stratégies de traitement des erreurs

La première solution pour gérer les situations d'erreur est de les éviter. Certaines situations d'erreur peuvent facilement être évitées en créant des jobs afin qu'ils prennent en compte les problèmes qui les font souvent échouer.

Mais certaines situations sont inévitables, comme des pannes de serveur. Vous devez ensuite concevoir vos flux de données pour les récupérer à partir de la situation d'échec.

Éviter les erreurs

Vous pouvez éviter les erreurs dans vos flux de données en :

  • Utilisation de conditions pour que le flux de données s'exécute uniquement lorsque le contexte est correct.
  • Utilisation d'une boucle pour recommencer jusqu'à ce que le contexte soit correct.

    N'oubliez pas d'ajouter une issue au cas où la situation ne serait jamais atteinte !

Par exemple, lorsqu'un fichier externe est requis pour exécuter un job. Dans ce cas, utilisez la fonction wait_for_file ou une boucle WHILE et la fonction file_exist pour vérifier que le fichier existe à un emplacement spécifié avant d'exécuter le job.

La boucle WHILE est un objet à usage unique utilisé dans un workflow. La boucle WHILE répète une séquence d'étapes tant qu'une condition est vraie.

En règle générale, les étapes effectuées pendant la boucle WHILE entraînent une modification de la condition afin que la condition ne soit finalement plus remplie et que le workflow quitte la boucle WHILE. Si la condition ne change pas, la boucle WHILE ne se termine pas.

Par exemple, vous pouvez souhaiter qu'un workflow attende que le système écrive un fichier particulier. Utilisez une boucle WHILE pour vérifier l'existence du fichier à l'aide de la fonction file_exist. Tant que le fichier n'existe pas, le workflow peut passer en mode veille pendant un certain temps avant de revérifier.

Comme il se peut que le système n'écrive jamais le fichier, ajoutez un autre contrôle à la boucle, tel qu'un compteur, pour vous assurer que la boucle WHILE se ferme. En d'autres termes, modifiez la boucle WHILE pour vérifier l'existence du fichier et la valeur du compteur. Tant que le fichier n'existe pas et que le compteur est inférieur à une valeur particulière, répétez la boucle WHILE. Dans chaque itération de la boucle, mettez le workflow en mode veille puis incrémentez le compteur.

Niveaux des stratégies de récupération de données

Certaines erreurs ne peuvent pas être anticipées et entraîneront l'échec du job.

La réexécution d'un job ayant échoué peut entraîner la duplication de lignes qui ont été chargées correctement lors de la première exécution du job.

Vous devez ensuite trouver un moyen de récupérer vos jobs pour que la base de données soit dans un état correct et que vous puissiez poursuivre avec la planification.

Voici quelques stratégies de rétablissement :
  • Récupérer toute la base de données

    Utilisez les services SGBDR standard pour restaurer le cache de données planté dans une base de données entière. Cette option n'est pas incluse dans le périmètre de ce cours.

  • Utilisez les transactions :

    Configurez votre flux de données pour qu'il soit intégré dans une transaction afin que les tables restent dans un état cohérent.

  • Récupérer à partir de tables partiellement chargées :

    Évitez le chargement en double des lignes.

  • Récupérer les valeurs ou lignes manquantes :

    Identifiez les valeurs manquantes et gérez les lignes qui n'ont pas pu être insérées.

  • Gérer les exceptions :

    Assurez-vous que toutes les exceptions sont gérées dans un workflow.

Selon les relations entre les flux de données dans votre application, vous pouvez utiliser une combinaison de ces techniques pour corriger les erreurs.

Configuration des transactions

Si votre flux de données doit charger une grande quantité de données ou s'il charge des tables dépendantes, par exemple des tables de commande client et de poste de commande client, vous ne voulez pas que les lignes soient chargées si d'autres ne le sont pas.

Pour améliorer les performances et l'utilisation des ressources, SAP Data Services charge par défaut les tables dans plusieurs transactions. Vous pouvez définir l'option "Lignes par validation" pour déterminer le nombre de lignes à traiter dans chaque transaction.

Cependant, si votre flux de données échoue, il se peut que certaines lignes aient déjà été validées dans la table lorsque le job s'arrête.

Pour éviter cette situation, vous pouvez demander à Data Services d'inclure l'ensemble du flux de données dans une seule transaction.

Données partiellement chargées

Plusieurs méthodes peuvent être utilisées pour s'assurer que les lignes en double ne sont pas insérées :

  • Pour éviter d'insérer des doublons, utilisez l'une des options suivantes :
    • Incluez la transformation Table Comparison dans le flux de données pour insérer uniquement les lignes manquantes lorsque la table contient plus de lignes et moins de champs, tels que des tables de faits.
    • Sélectionnez l'option Supprimer les données de la table avant le chargement ou Supprimer et recréer la table dans la table cible pour remplacer les données lors de chaque exécution. Cette technique peut être optimale lorsque les modifications apportées à la table cible sont nombreuses par rapport à la taille de la table.
    • Modifiez les options de la table cible pour utiliser la fonctionnalité de correction automatique du chargement lorsqu'une table contient moins de lignes et plus de zones, telles que des tables de dimension.
    • Incluez une commande SQL pour supprimer les mises à jour partielles précédentes avant le chargement de la table.

La correction automatique du chargement vérifie si la table cible contient des lignes existantes avant d'ajouter de nouvelles lignes à la table. Cependant, l'utilisation de l'option de correction automatique du chargement peut ralentir les jobs. Tenez compte de cette technique lorsque la table cible est volumineuse et que les modifications apportées à la table sont relativement peu nombreuses.

Les commandes SQL de préchargement peuvent supprimer les mises à jour partielles de la base de données qui se produisent lors de l'exécution incomplète d'une étape dans un job. Généralement, la commande SQL de préchargement supprime les lignes basées sur une variable définie avant le début de l'étape d'insertion partielle.

Remarque

Valeurs ou lignes manquantes

  • Gérer les valeurs manquantes avec la transformation Validation ou Query
  • Gérez les lignes manquantes avec les options Utiliser le fichier de dépassement de capacité.

Les lignes manquantes sont des lignes qui ne peuvent pas être insérées dans la table cible. Par exemple, des lignes peuvent manquer dans les cas où une contrainte de clé primaire n'est pas respectée. Les fichiers de dépassement permettent de traiter ce type de problème de données.

Lorsque vous spécifiez un fichier de dépassement de capacité et que Data Services ne peut pas charger une ligne dans une table, Data Services écrit la ligne dans le fichier de dépassement. Le journal de suivi indique le flux de données dans lequel le chargement a échoué et l'emplacement du fichier. Utilisez les informations de débordement pour identifier les données non valides dans la source ou les problèmes introduits dans le mouvement de données. Chaque nouvelle exécution écrase le fichier de dépassement existant.

Lorsque vous utilisez des fichiers de dépassement de capacité, vous devez saisir un nom de fichier et un format de fichier.

Pour le format de fichier, vous disposez de deux options :

  • Si vous sélectionnez Écrire les données, vous pouvez utiliser Data Services pour lire les données du fichier de dépassement de capacité, les nettoyer et les charger dans la table cible.
  • Si vous sélectionnez Write sql, vous pouvez utiliser les commandes SQL pour charger la cible manuellement lorsque la cible est accessible.

Attention

Donnez un nom de chemin d'accès complet à votre fichier de dépassement de capacité pour vous assurer que Data Services crée un fichier unique lorsque plusieurs fichiers sont créés dans le même job.

Autres workflows

Vous pouvez configurer des jobs pour utiliser d'autres workflows qui couvrent toutes les exceptions possibles et dans lesquels sont intégrés des mécanismes de récupération. Cette technique vous permet d'automatiser le processus de récupération des résultats.

Dans cet exemple, le flux de données principal utilise les options par défaut pour charger une table cible.

En cas d'erreur, le job enregistre l'échec. Après avoir corrigé le problème, vous exécutez à nouveau le job.

L'exécution suivante utilisera alors un autre flux de données avec l'option de chargement de correction automatique. Ainsi, l'exécution du flux de données s'effectue correctement malgré les lignes qui ont peut-être déjà été validées la première fois.

L'exécution correcte doit être enregistrée pour l'exécution suivante du job afin d'utiliser le flux de données par défaut.

Composants de workflow alternatifs

Les workflows alternatifs sont constitués de plusieurs composants, comme illustré dans la figure précédente :

  1. Script permettant de déterminer quand une récupération est requise.

    Ce script lit la valeur dans une table de statuts et renseigne une variable globale avec la même valeur. La valeur initiale est définie pour indiquer qu'une récupération n'est pas requise.

  2. Une structure conditionnelle qui appelle le workflow approprié en fonction de la nécessité ou non d'une restauration.

    La structure conditionnelle contient une instruction If/Then/Else qui spécifie que les workflows ne nécessitent pas de restauration sont traités d'une manière et ceux qui le nécessitent sont traités d'une autre manière.

  3. Workflow avec un bloc Try/Catch pour exécuter un flux de données sans récupération.

    Le flux de données pour lequel la récupération n'est pas requise est configuré sans l'option de correction automatique du chargement définie. Cela garantit que, dans la mesure du possible, le flux de données est exécuté dans un mode moins gourmand en ressources.

  4. Script dans l'objet Catch pour mettre à jour la table des statuts.

    Le script spécifie que la récupération est nécessaire si des exceptions sont générées.

  5. Un workflow pour exécuter un flux de données avec récupération et un script pour mettre à jour la table des statuts.

    Le flux de données est configuré pour un traitement plus gourmand en ressources qui résoudra les exceptions. Le script met à jour la table des statuts pour indiquer que la restauration n'est pas requise.

Structures conditionnelles

Les structures conditionnelles sont des objets à usage unique utilisés pour implémenter une logique conditionnelle dans un workflow.

Lorsque conditionnel est défini, spécifiez une condition et deux branches logiques :

InstructionDescription
SiExpression booléenne dont l'évaluation est VRAI ou FAUX. Utilisez des fonctions, des variables et des opérateurs standard pour créer l'expression.
AlorsÉlément de workflow à exécuter si l'expression IF donne la valeur VRAI.
SinonÉlément de workflow à exécuter si l'expression IF donne la valeur FALSE.

Les branches Then et Else de la structure conditionnelle peuvent contenir n'importe quel objet que vous pouvez avoir dans un workflow, y compris d'autres workflows, flux de données, structures conditionnelles imbriquées, blocs Try/Catch, scripts, etc.

Blocs Try/Catch

Un bloc Try/Catch vous permet d'indiquer d'autres workflows si des erreurs surviennent lors de l'exécution du job.

Les blocs Try/Catch interceptent les classes d'erreurs spécifiées, appliquent les solutions fournies et poursuivent l'exécution.

Vous pouvez spécifier plusieurs opérations Catch dans un même bloc, pour différentes classes ou erreurs.

Pour chaque capture

  • Spécifiez une exception ou un groupe d'exceptions traitées par l'interception.

    Pour gérer plusieurs exceptions ou groupes d'exceptions, ajoutez d'autres interceptions au bloc Try/Catch.

  • Indiquez le workflow à exécuter si l'exception indiquée se produit.

    Utilisez un workflow existant ou définissez un workflow dans l'éditeur Catch.

Si une exception est renvoyée lors de l'exécution d'un bloc Try/Catch, et si aucun Catch ne recherche cette exception, l'exception est traitée par une logique d'erreur normale.

Essayons-le

Laissez-moi vous guider à travers l'utilisation d'un workflow alternatif. Tout d'abord, préparons tous les objets dont nous avons besoin :

À présent, permettez-moi de vous guider tout au long de la création du workflow alternatif :