CAS

Lancez-vous ! Guide du débutant pour la programmation dans l'environnement SAS® Cloud Analytic Services (CAS)

Simon 25/08/2022 7 views

Introduction

Commencer quelque chose de nouveau, qu'il s'agisse d'un projet personnel ou professionnel, peut être intimidant. Pourtant, c'est souvent une démarche très gratifiante. Si vous hésitez à vous lancer dans la programmation avec SAS©® Cloud Analytic Services (CAS), sachez que les bénéfices sont considérables.

CAS est le moteur analytique au cœur de SAS© Viya. C'est un serveur qui fournit un environnement d'exécution basé sur le cloud pour la gestion des données et l'analyse. Sa force réside dans sa capacité à traiter les données en mémoire (in-memory) et de manière distribuée sur plusieurs machines, utilisant le traitement multithread. Cela permet de réaliser des analyses extrêmement performantes sur de très grandes tables.

Cet article a pour but de vous guider dans vos premiers pas avec CAS, en couvrant l'ensemble du processus, de l'établissement d'une session à l'analyse des données.

L'architecture CAS en bref

Le serveur CAS peut fonctionner sur une seule machine (SMP) ou en mode distribué sur plusieurs machines (MPP). L'architecture distribuée comprend :

  • Un nœud contrôleur (Controller) : Il communique avec les applications clientes et dirige le travail.

  • Des nœuds de travail (Workers) : Ils effectuent les calculs et l'analyse sur les lignes de données stockées en mémoire sur leur nœud respectif.

Illustration

Les avantages clés de CAS

Voici un résumé des principaux avantages de l'utilisation de l'environnement CAS :

Tableau 1 : Bénéfices de l'environnement CAS

BénéficeDescription
Vitesse de traitementL'architecture distribuée et le traitement en mémoire permettent des analyses extrêmement rapides sur des données volumineuses.
Tolérance aux pannesSi un nœud de travail ne répond plus, le contrôleur redirige le travail vers un autre nœud utilisant une copie des données, assurant la continuité.
Évolutivité (Scalabilité)Il est possible d'ajouter horizontalement des nœuds de travail pour répartir la charge et améliorer les temps de traitement.
Code base ouvertBien que cet article se concentre sur SAS©, CAS supporte aussi des langages comme Python, Java, Lua et R.

Prérequis : Utiliser SAS©® Studio

Pour les programmeurs SAS©, SAS© Studio est l'interface recommandée pour interagir avec CAS. Interface web accessible depuis n'importe quel appareil, elle offre des outils efficaces comme des extraits de code (snippets) prédéfinis pour des tâches courantes (ex: lister les options de session CAS).

Illustration

Le flux de travail de programmation CAS

Le processus typique de programmation dans CAS suit ces étapes :

  1. Établir une session CAS.

  2. Allouer une bibliothèque CAS (caslib).

  3. Charger des données dans CAS.

  4. Manipuler les données (ex: avec l'étape DATA).

  5. Exécuter des actions avec PROC CAS.

  6. Analyser les données.

Étape 1 : Établir une session CAS

La première étape obligatoire est d'initier une session CAS. C'est le canal de communication entre votre client (SAS© Studio) et le serveur CAS. La session gère votre authentification, l'allocation des ressources et assure l'isolation des processus.

La syntaxe de base est très simple :

1cas casauto;

Cette instruction démarre une session nommée CASAUTO avec les propriétés par défaut. Si la connexion réussit, le journal SAS© affichera des informations sur le port, l'UUID de la session, l'utilisateur, le caslib actif par défaut, et le nombre de nœuds de travail (workers) utilisés.

Étape 2 : Allouer une bibliothèque CAS (Caslib)

Les "Caslibs" sont les espaces de stockage pour vos données en mémoire dans CAS. Elles contiennent également les contrôles d'accès aux données.

  • Types de caslibs : Personnelles (accessibles uniquement par vous), Prédéfinies (globales, gérées par l'administrateur), ou Ajoutées manuellement.

  • Portée (Scope) : "Session" (visible uniquement dans votre session actuelle) ou "Global" (partagée entre les sessions).

Pour lister les propriétés de votre caslib active par défaut (souvent CASUSER), utilisez :

1caslib casuser list;

Important : Le lien entre SAS© traditionnel et CAS Le nom d'une caslib n'est pas un "libref" SAS© standard. Pour utiliser des procédures SAS© traditionnelles ou l'étape DATA avec des tables CAS, vous devez associer un libref à la caslib via l'instruction LIBNAME utilisant le moteur CAS :

1LIBNAME mycas cas caslib=casuser;

Étape 3 : Charger des données dans CAS

CAS offre une grande flexibilité pour charger des données (fichiers SAS©, CSV, Excel, bases de données...). Voici trois méthodes courantes :

Tableau 2 : Méthodes de chargement de données dans CAS

MéthodeDescriptionExemple de code simplifié
Étape DATAIdéal pour les programmeurs SAS© habitués. Permet de charger des jeux de données SAS© existants.data mycas.cars; set sashelp.cars; run;
PROC CASUTILProcédure utilitaire dédiée à la gestion des fichiers et tables CAS. Similaire à PROC IMPORT pour les fichiers externes.proc casutil; load file='/path/cars.xls' casout='cars2' importoptions=(filetype='xls'); quit;
PROC CAS (Action loadTable)Utilise le langage CASL pour exécuter des actions serveur. Méthode puissante et scriptable.proc cas; table.loadtable / path='cars.csv' casout={name='cars3'} ...; quit;

Étape 4 : Manipuler les données avec l'étape DATA

La bonne nouvelle pour les utilisateurs SAS© est que la fidèle étape DATA fonctionne dans CAS.

La différence majeure : Le traitement parallèle Dans CAS, l'étape DATA s'exécute de manière distribuée. Les données très volumineuses sont divisées entre les "threads" (fils d'exécution) disponibles sur les différentes machines. Le code de l'étape DATA est copié et exécuté simultanément sur chaque thread, ne traitant que la portion de données locale à ce thread.

Illustration

Exemple de traitement parallèle : Dans l'exemple ci-dessous, nous ajoutons des frais de transaction à une grande table bancaire. L'utilisation de la variable automatique _THREADID_ dans le journal montre que le code s'exécute sur plusieurs threads différents (par exemple, 4 threads).

1DATA mycas.updated_transaction_history;
2 SET mycas.transaction_history;
3 /* Logique pour ajouter des frais selon l'année */
4 IF year(transaction_dt)=2013 THEN fee=1;
5 /* ... autres années ... */
6 new_transaction_amt=transaction_amt+fee;
7 put _threadid_=; /* Affiche le numéro du thread dans le journal */
8RUN;

e journal affichera des messages comme NOTE: Running DATA step in Cloud Analytic Services. et des lignes multiples pour _THREADID_=1, _THREADID_=2, etc.

Attention au traitement par groupe (BY-group) : En raison de la distribution des données, l'ordre de traitement des groupes BY n'est pas garanti dans CAS, contrairement à SAS© classique. Les groupes sont répartis sur les nœuds, et chaque nœud traite ses groupes indépendamment pour accélérer le processus.

Étape 5 : Utiliser PROC CAS pour exécuter des actions

PROC CAS est l'interface pour exécuter le langage CASL (CAS Language). CASL interagit avec le serveur via des "actions". Les actions sont des demandes de tâches spécifiques (gestion de tables, analyses, etc.), regroupées en "ensembles d'actions" (action sets).

Voici des exemples d'actions de l'ensemble table pour gérer les données :

  1. Vérifier l'existence d'une table et récupérer des infos :

1PROC CAS;
2 SESSION casauto;
3 /* Vérifier si la table existe */
4 TABLE.tableexists RESULT=r / caslib='casuser' name='updated_transaction_history';
5
6 IF (r.exists) THEN DO;
7 /* Obtenir les infos de la table */
8 TABLE.tableinfo / caslib='casuser' name='updated_transaction_history';
9 /* Récupérer (fetch) un échantillon de lignes */
10 TABLE.fetch / TABLE={caslib='casuser', name='updated_transaction_history'} from=1 to=20;
11 END;
12QUIT;

Promouvoir une table (la rendre globale) : Les tables créées sont souvent de portée "session". L'action promote permet de les rendre disponibles aux autres utilisateurs.

1PROC CAS;
2 SESSION casauto;
3 TABLE.promote / caslib='casuser' name='updated_transaction_history' targetlib='casuser';
4QUIT;

Étape 6 : Analyser les données

L'analyse peut se faire via des actions CASL ou des procédures SAS© Viya.

Méthode A : Utiliser une action CAS (ex: simple.freq) L'ensemble d'actions simple fournit des fonctions analytiques de base.

1PROC CAS;
2 SESSION casauto;
3 /* Distribution de fréquence du statut de transaction groupé par année */
4 SIMPLE.freq /
5 inputs={'transaction_status'}
6 TABLE={caslib='casuser', name='updated_transaction_history', groupby={name='year'}};
7QUIT;

Méthode B : Utiliser une procédure SAS© Viya (ex: PROC MDSUMMARY) SAS© Viya propose de nombreuses procédures (statistiques, data mining, machine learning) qui s'exécutent dans CAS. PROC MDSUMMARY est une procédure statistique puissante pour calculer des statistiques descriptives.

1/* Préparation des données : ajout d'une colonne mois */
2DATA mycas.updated_transaction_history2;
3 SET mycas.updated_transaction_history;
4 month=put(transaction_dt,monname8.);
5RUN;
6 
7/* Calcul des sommes par année et mois */
8PROC MDSUMMARY DATA=mycas.updated_transaction_history2(where=(fee ne 0));
9 var fee;
10 groupby year month / out=mycas.summary_transaction_history;
11RUN;
12 
13/* Affichage des résultats (car MDSUMMARY ne produit qu'une table de sortie) */
14PROC PRINT DATA=mycas.summary_transaction_history label;
15 title 'Résumé de l\'historique des transactions';
16 var year month _sum_;
17 label _sum_='Total collecté ($)';
18 FORMAT _sum_ dollar8.;
19RUN;

SAS© Cloud Analytic Services (CAS) offre un environnement puissant, distribué et en mémoire pour accélérer vos analyses. En suivant les étapes de connexion, de chargement de données via des caslibs, et en utilisant des outils familiers comme l'étape DATA ou nouveaux comme PROC CAS, vous pouvez commencer à exploiter la puissance de SAS© Viya dès aujourd'hui. N'ayez pas peur de vous lancer dans la nouveauté !