Big Brother vous regarde : Modifier sur place et pistes d'audit (MODIFY & Audit Trails)

Cet article en deux mots :

Plongez au cœur de la stratégie de défense de Skynet pour dompter l'instruction MODIFY et les pistes d'audit SAS. Entre chirurgie de précision sur disque dur et surveillance intraitable des données, apprenez à mettre à jour vos tables à la source sans les réécrire, tout en traçant chaque modification suspecte pour sécuriser vos processus ETL.

Skynet est devenu paranoïaque. Ces derniers temps, des données disparaissent mystérieusement de la table work.inventaire_cyborgs. Le statut de certains T-800 passe soudainement de "Actif" à "Détruit" sans aucune explication. John Connor a manifestement trouvé une faille dans le pare-feu.

Pour contrer cette menace, Skynet doit arrêter de recréer ses tables à chaque mise à jour (ce qui laisse des fenêtres de vulnérabilité) et doit surtout mettre en place un système de surveillance intraitable.

Pour la certification SAS 9 Advanced, vous devez maîtriser l'instruction MODIFY (pour changer les données directement à la source) et les Audit Trails (les pistes d'audit, pour tracer chaque crime informatique).

1. SET vs UPDATE vs MODIFY : Le choc des titans

Jusqu'à présent, lorsque Skynet voulait mettre à jour une table avec de nouvelles informations, il utilisait souvent SET ou UPDATE. Le problème de ces deux instructions, c'est qu'elles créent une nouvelle table (même si elle porte le même nom). SAS lit l'ancienne table, applique les changements, et réécrit tout sur le disque dur. Pour une base de 10 To, c'est une perte de temps et d'espace (I/O) colossale.

L'instruction MODIFY est différente. Elle ne crée pas de nouvelle table. Elle va chercher la ligne exacte sur le disque dur, la modifie sur place, et la sauvegarde. C'est de la chirurgie de précision.

2. L'instruction MODIFY en action

Imaginons que nous recevions un rapport quotidien des dommages subis par nos unités.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/* Table de référence (déjà existante sur le disque) */
data work.inventaire;
length Matricule $10 Statut $15 Batterie 8;
input Matricule $ Statut $ Batterie;
datalines;
T-800-A Actif 100
T-1000-B Actif 100
T-X-C Actif 100
;
run;

/* Le rapport des combats du jour */
data work.rapports_combats;
input Matricule $ Batterie_Restante;
datalines;
T-800-A 45
T-X-C 80
;
run;

Voici comment appliquer ces mises à jour directement dans la table maître :

1
2
3
4
5
6
7
data work.inventaire; /* Notez que la table de sortie EST la table maître */
modify work.inventaire work.rapports_combats;
by Matricule;

/* On applique la mise à jour */
Batterie = Batterie_Restante;
run;

Boom. La table inventaire est mise à jour instantanément, sans avoir été entièrement lue ni réécrite.

3. Le piège mortel de l'examen : La gestion des valeurs manquantes

C'est LA question sur laquelle 80% des candidats trébuchent. Quelle est la différence de comportement entre UPDATE et MODIFY face à une valeur manquante (un trou) dans la table de transactionUnité de travail logique regroupant une ou plusieurs opérations. Elle garantit l'intégrité des données en validant (commit) ou annulant (rollback) l'ensemble des modifications de manière atomique. ?

  • UPDATE est intelligent (et protecteur) : S'il voit une valeur manquante dans la transactionUnité de travail logique regroupant une ou plusieurs opérations. Elle garantit l'intégrité des données en validant (commit) ou annulant (rollback) l'ensemble des modifications de manière atomique., il l'ignore et conserve l'ancienne valeur intacte de la table maître.
  • MODIFY est un exécuteur aveugle : S'il voit une valeur manquante, il écrase l'ancienne valeur avec ce vide !

Si John Connor glisse un rapport de combat avec une batterie vide (valeur manquante) pour le T-1000, MODIFY effacera l'ancienne batterie. Pour empêcher ça avec MODIFY, vous devez coder la protection vous-même avec un IF (ex: if Batterie_Restante ne . then Batterie = Batterie_Restante;).

4. Les Pistes d'Audit (Audit Trails) : Skynet active les caméras

Maintenant que nous modifions la table sur place, Skynet veut savoir qui modifie quoi. Il est temps d'activer un Audit Trail.

Une piste d'audit est un fichier caché, scellé cryptographiquement à votre table SAS, qui enregistre absolument toutes les opérations d'insertion, de mise à jour ou de suppression.

L'activation se fait via la PROC DATASETS :

1
2
3
4
proc datasets library=work nolist;
audit inventaire;
initiate; /* Skynet allume les caméras */
quit;

À partir de cet instant précis, toute étape DATA ou requête SQL qui touche à work.inventaire sera tracée.

5. Lire le journal des infractions

Que se passe-t-il si un programme rebelle modifie le T-800-A pour le mettre à "Détruit" ? SAS va automatiquement générer des métadonnéesInformations décrivant les données, les utilisateurs et les ressources dans SAS Viya. Elles assurent la traçabilité, la sécurité et la gouvernance au sein de l'architecture distribuée. dans le fichier d'audit. Vous pouvez lire ce fichier secret en ajoutant (TYPE=AUDIT) au nom de votre table.

1
2
proc print data=work.inventaire(type=audit);
run;

Vous verrez alors apparaître des colonnes générées par le système, notamment :

  • _ATOPCODE_ : Le type d'opération (EA pour Edit Add, ED pour Edit Delete, EU pour Edit Update).
  • _ATUSER_ : L'identifiant (login) de la personne qui a lancé le programme ! (Fini l'anonymat, John Connor).
  • _ATDATETIME_ : La date et l'heure exactes du crime.

Astuce Certification : Vous pouvez même forcer l'utilisateur à saisir un mot de passe ou une raison (_REASON_) à chaque modification en utilisant des "User VariablesColonnes d'une table SAS contenant des données spécifiques (numériques ou caractères). Elles possèdent des attributs comme le nom, le type, la longueur, l'étiquette et le format d'affichage." dans la définition de l'audit. Et une piste d'audit ne peut être effacée qu'en la terminant explicitement avec terminate; dans la PROC DATASETS.

Conclusion

La combinaison de MODIFY et des Audit Trails transforme vos tables SAS en forteresses imprenables et ultra-performantes. Vous économisez de la puissance de calcul tout en gardant une trace indélébile de la moindre altération de vos données.

Dans l'Article 17, nous entrerons dans notre 4ème et dernière grande partie : L'Optimisation et les Bonnes Pratiques. Skynet manque cruellement de mémoireGemini said
Espace de stockage temporaire (RAM) utilisé par le moteur CAS pour charger et traiter les données à haute vitesse, minimisant les accès disque pour optimiser les performances de SAS Viya.
RAM et d'espace disque. Nous verrons comment mettre nos bases de données au régime avec les options de compression et l'instruction SASFILE.

Nicolas Housset

Passionné d'informatique, je suis Consultant et expert technique SAS VIYA, également co-fondateur de la société Flexcelite. Spécialisé dans les technologies SAS (Viya, 9.4) et les infrastructures associées (Linux, Hadoop, Azure), ce blog est mon espace pour partager mes mémos techniques et retours d'expérience.