L'intégration native des services DataFlux Data Management Studio dans SAS via la PROC DMSRVDATASVC représente le pont ultime entre la gouvernance des données et le traitement analytique. Cette procédure permet de déléguer les tâches complexes de standardisation (adresses, noms, e-mails) au moteur spécialisé de DataFlux tout en conservant la maîtrise du flux dans l'environnement SAS ou CAS.
Pourquoi cette procédure est-elle un atout stratégique ?
Modularité et Réutilisabilité : Au lieu de coder des règles de nettoyage complexes en Data Step, vous appelez des services métier centralisés. Cela garantit une cohérence totale : le service de standardisation des noms utilisé par l'équipe Marketing est exactement le même que celui utilisé par l'équipe Risque.
Transparence des Données : La transition est fluide. Vous envoyez une table SAS (DATA=), et vous récupérez une table SAS (OUT=) enrichie ou nettoyée, sans avoir à gérer manuellement les formats de fichiers plats ou les transferts FTP.
Interopérabilité Cloud (CAS) : En environnement Viya, la procédure sait interagir avec les tables en mémoire. Cela permet d'insérer une étape de qualité de données DataFlux directement au sein d'un pipeline de préparation de données distribué sur Cloud Analytic Services.
Diagnostics Précis : L'option LOG= est cruciale. Elle ne se contente pas de rapporter le succès technique, mais capture les messages métier du serveur DataFlux, facilitant le débogage des services qui pourraient échouer à cause de données d'entrée mal formées.
Les bonnes pratiques de l'expert
Gestion des Échecs : Utilisez systématiquement l'option ERRORONFAILURE=YES. Elle permet d'interrompre le flux en cas d'erreur critique sur le serveur DataFlux, évitant ainsi de propager des données non traitées dans la suite du pipeline.
Performance et Port : Par défaut, le port est 21036, mais vérifiez toujours la configuration de votre Data Management Server. Si vous traitez de gros volumes, assurez-vous que le service appelé est optimisé pour le mode "Batch" dans DataFlux Studio.
Contrôle Post-Exécution : Comme illustré dans l'exemple de macro, vérifiez l'existence et le contenu de la table de sortie avant d'enchaîner sur des procédures statistiques. Une table de sortie vide est souvent le signe d'un service qui a "réussi" techniquement mais qui n'a trouvé aucun enregistrement à traiter.
Les exemples utilisent des données générées (datalines) pour assurer l'autonomie du code.
1 Bloc de code
PROC DMSRVDATASVC Data
Explication : Cet exemple illustre l'utilisation la plus simple de la procédure DMSRVDATASVC. Il crée un jeu de données d'entrée `work.insrv` avec des noms et adresses. Ensuite, il exécute un service nommé 'StandardizeAddresses' (qui doit exister sur le serveur DataFlux) en utilisant ce jeu de données comme entrée et stocke les résultats dans `work.outsrv_basic`. Enfin, il affiche le jeu de données de sortie.
Copié !
DATA work.insrv;
LENGTH Name $30 Address $50;
INPUT Name $ Address $;
DATALINES;
John Doe 123 Main St
Jane Smith 456 Oak Ave
;
RUN;
PROC DMSRVDATASVC
SERVICE='StandardizeAddresses'
DATA=work.insrv
OUT=work.outsrv_basic;
RUN;
PROC PRINT DATA=work.outsrv_basic;
TITLE 'Résultats du service de standardisation basique';
RUN;
1
DATA work.insrv;
2
LENGTH Name $30 Address $50;
3
INPUT Name $ Address $;
4
DATALINES;
5
John Doe 123 Main St
6
Jane Smith 456 Oak Ave
7
;
8
RUN;
9
10
PROC DMSRVDATASVC
11
SERVICE='StandardizeAddresses'
12
DATA=work.insrv
13
OUT=work.outsrv_basic;
14
RUN;
15
16
PROC PRINTDATA=work.outsrv_basic;
17
TITLE 'Résultats du service de standardisation basique';
18
RUN;
2 Bloc de code
PROC DMSRVDATASVC Data
Explication : Cet exemple montre comment spécifier des options supplémentaires lors de l'exécution d'un service. Outre `SERVICE`, `DATA` et `OUT`, il utilise `SERVER` pour désigner explicitement le serveur DataFlux (ici 'localhost') et `PORT` pour un port non standard (21037). L'option `LOG` est ajoutée pour capturer les messages d'erreur ou d'information du service dans un jeu de données SAS.
Copié !
DATA work.input_data;
LENGTH Email $50;
INPUT Email $;
DATALINES;
test@example.com
invalid-email
another.one@domain.co.uk
;
RUN;
PROC DMSRVDATASVC
SERVICE='EmailValidationService'
SERVER='localhost'
PORT=21037
DATA=work.input_data
OUT=work.output_data_intermediate
LOG=work.service_log;
RUN;
PROC PRINT DATA=work.output_data_intermediate;
TITLE 'Résultats du service de validation d''e-mails';
RUN;
PROC PRINT DATA=work.service_log;
TITLE 'Journal d''exécution du service';
RUN;
1
DATA work.input_data;
2
LENGTH Email $50;
3
INPUT Email $;
4
DATALINES;
5
test@example.com
6
invalid-email
7
another.one@domain.co.uk
8
;
9
RUN;
10
11
PROC DMSRVDATASVC
12
SERVICE='EmailValidationService'
13
SERVER='localhost'
14
PORT=21037
15
DATA=work.input_data
16
OUT=work.output_data_intermediate
17
LOG=work.service_log;
18
RUN;
19
20
PROC PRINTDATA=work.output_data_intermediate;
21
TITLE 'Résultats du service de validation d''e-mails';
22
RUN;
23
24
PROC PRINTDATA=work.service_log;
25
TITLE 'Journal d''exécution du service';
26
RUN;
3 Bloc de code
PROC DMSRVDATASVC Data
Explication : Cet exemple avancé simule un traitement par lots de noms de clients à l'aide d'un service de standardisation. L'option `ERRORONFAILURE=YES` est cruciale ici : elle demande à SAS de générer une erreur si le service DataFlux échoue, ce qui est utile pour l'intégration dans des chaînes de traitement automatisées. Le code inclut une macro simple pour vérifier le succès de l'opération via le code de retour d'ouverture du jeu de données, signalant les erreurs de manière programmatique.
Copié !
DATA work.customer_names;
LENGTH CustomerID 8 FirstName $20 LastName $20;
INPUT CustomerID FirstName $ LastName $;
DATALINES;
1 John Doe
2 Jane Smith
3 PETER J. JONES
4 mary_ann
;
RUN;
PROC DMSRVDATASVC
SERVICE='NameStandardizationBatch'
DATA=work.customer_names
OUT=work.standardized_names
ERRORONFAILURE=YES;
RUN;
/* Vérifier les erreurs potentielles dans le log */
%MACRO CheckLog;
%LOCAL rc;
%LET rc = %SYSFUNC(OPEN(WORK.standardized_names, I));
%IF &rc EQ 0 %THEN %DO;
%PUT NOTE: Le service a été exécuté avec succès.;
%LET rc = %SYSFUNC(CLOSE(&rc));
%END;
%ELSE %DO;
%PUT ERROR: Le service a échoué. Vérifiez le log SAS pour plus de détails.;
%END;
%MEND CheckLog;
%CheckLog;
PROC PRINT DATA=work.standardized_names;
TITLE 'Noms des clients standardisés';
RUN;
1
DATA work.customer_names;
2
LENGTH CustomerID 8 FirstName $20 LastName $20;
3
INPUT CustomerID FirstName $ LastName $;
4
DATALINES;
5
1 John Doe
6
2 Jane Smith
7
3 PETER J. JONES
8
4 mary_ann
9
;
10
RUN;
11
12
PROC DMSRVDATASVC
13
SERVICE='NameStandardizationBatch'
14
DATA=work.customer_names
15
OUT=work.standardized_names
16
ERRORONFAILURE=YES;
17
RUN;
18
19
/* Vérifier les erreurs potentielles dans le log */
%PUT ERROR: Le service a échoué. Vérifiez le log SAS pour plus de détails.;
29
%END;
30
%MEND CheckLog;
31
32
%CheckLog;
33
34
PROC PRINTDATA=work.standardized_names;
35
TITLE 'Noms des clients standardisés';
36
RUN;
4 Bloc de code
PROC DMSRVDATASVC Data
Explication : Cet exemple démontre l'intégration de la procédure DMSRVDATASVC dans un environnement SAS Viya avec des tables CAS. Il initialise une session CAS et crée une table CAS (`mycas.raw_products`). La procédure DMSRVDATASVC est ensuite appelée en spécifiant cette table CAS comme entrée. Le service de qualité des données (ici 'ProductDescriptionCleanse') traite la table en mémoire distribuée, et les résultats sont stockés dans une nouvelle table CAS (`mycas.cleaned_products`). Les commandes PROC CASUTIL et PROC PRINT sont utilisées pour vérifier les tables CAS et afficher les données traitées, mettant en évidence le traitement in-memory.
Copié !
CAS;
CASLIB _ALL_ ASSIGN;
DATA _NULL_;
CALL SYMPUTX('CAS_SESSION_NAME', %SYSFUNC(GETOPTION(CASAUTOSESS)));
RUN;
/* Création d'une table CAS à partir de données SAS */
DATA mycas.raw_products;
LENGTH ProductID $10 Description $100;
INPUT ProductID $ Description $;
DATALINES;
P001 Hand Sanitizer 500ml
P002 Hand sanitizer 100ml
P003 Hand SANITIZER 200 ml
;
RUN;
/* Exécution du service Data Quality sur la table CAS */
PROC DMSRVDATASVC
SERVICE='ProductDescriptionCleanse'
DATA=mycas.raw_products
OUT=mycas.cleaned_products;
RUN;
/* Affichage des résultats de la table CAS */
PROC CASUTIL SESSREF=&CAS_SESSION_NAME;
LIST TABLES / CASLIB='CASUSER';
QUIT;
PROC PRINT DATA=mycas.cleaned_products;
TITLE 'Descriptions de produits nettoyées via CAS';
RUN;
/* Création d'une table CAS à partir de données SAS */
9
DATA mycas.raw_products;
10
LENGTH ProductID $10 Description $100;
11
INPUT ProductID $ Description $;
12
DATALINES;
13
P001 Hand Sanitizer 500ml
14
P002 Hand sanitizer 100ml
15
P003 Hand SANITIZER 200 ml
16
;
17
RUN;
18
19
/* Exécution du service Data Quality sur la table CAS */
20
PROC DMSRVDATASVC
21
SERVICE='ProductDescriptionCleanse'
22
DATA=mycas.raw_products
23
OUT=mycas.cleaned_products;
24
RUN;
25
26
/* Affichage des résultats de la table CAS */
27
PROC CASUTIL SESSREF=&CAS_SESSION_NAME;
28
LIST TABLES / CASLIB='CASUSER';
29
QUIT;
30
31
PROC PRINTDATA=mycas.cleaned_products;
32
TITLE 'Descriptions de produits nettoyées via CAS';
33
RUN;
L'Astuce Pro
Lorsque vous utilisez la PROC DMSRVDATASVC, assurez-vous que les types et les longueurs des colonnes de votre jeu de donnees de sortie (OUT=) correspondent exactement a ce que le service DataFlux est configure pour renvoyer. Si le service modifie la structure des donnees (par exemple en ajoutant des colonnes de score de qualite), SAS peut parfois tronquer les valeurs ou generer des erreurs de lecture si la table de sortie n est pas pre-definie ou si les metadonnees de communication ne sont pas parfaitement synchronisees avec le serveur DataFlux.
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.