Guide SAS VIYA

De SAS 9 à SAS Viya : Le guide complet de migration de PROC SQL vers PROC FedSQL

Simon 32 views
Niveau de difficulté
Confirmé
Published on :
Michael

Expert Advice

Michael

Le piège principal de cette migration n'est pas la syntaxe, mais la philosophie : la PROC SQL de SAS 9 est permissive (remerging automatique, extensions SAS), tandis que la PROC FedSQL sur CAS impose un standard ANSI strict. Pour réussir votre transition vers le in-memory, vous devez abandonner les raccourcis implicites et expliciter rigoureusement vos instructions GROUP BY et vos conversions de types.

Les utilisateurs historiques de SAS© 9 cherchent de plus en plus à migrer vers SAS© Viya pour exploiter la puissance du moteur CAS (Cloud Analytic Services). Ce moteur distribué et in-memory permet d'accélérer considérablement les processus existants et d'analyser des volumes de données massifs.

Cependant, une étape clé de cette modernisation implique la mise à jour du code PROC SQL vers une procédure native à CAS : PROC FedSQL. Bien que puissante, cette transition peut être déroutante en raison des différences syntaxiques strictes entre les deux langages.

Cet article explore les différences fondamentales et offre un guide pratique pour adapter votre code sans erreur.

1. Comprendre l'architecture : Compute vs CAS

Avant de modifier le code, il est crucial de comprendre où il s'exécute :

  • SAS© Compute Server : C'est l'équivalent du Workspace Server de SAS© 9. Votre code SAS© 9 existant (et PROC SQL) y fonctionne sans modification.

  • SAS© Cloud Analytic Services (CAS) : Le nouveau moteur haute performance. Pour qu'une procédure s'exécute ici, les données doivent être chargées en mémoire et le code adapté.

2. PROC SQL vs PROC FedSQL : Les différences majeures

La différence principale réside dans le standard SQL utilisé. Alors que PROC SQL est permissif (extensions SAS©), PROC FedSQL est strict (ANSI-1999).

Tableau 1 : Comparatif des fonctionnalités

CaractéristiquePROC SQL (SAS© 9 / Compute)PROC FedSQL (SAS© Viya / CAS)
Moteur d'exécutionSAS© Compute ServerCAS (Cloud Analytic Services)
Standard SQLANSI-1992 (Partiel) + Extensions SAS©ANSI-1999 (Strict)
ArchitectureMono-thread (sauf tri/index)Parallèle, Distribué, In-Memory
Types de donnéesStandard (Char, Numeric)Étendus (VARCHAR, INT64, DOUBLE, VARBINARY...)
Requêtes FédéréesNon (1 connexion DB par requête)Oui (Jointures multi-sources possibles)
Gestion des erreursArrêt fréquent sur erreurOption NOERRORSTOP disponible pour continuer

3. Quelle procédure utiliser et où ?

Une confusion fréquente concerne l'emplacement des données (Bibliothèques locales vs Caslibs). Pour exécuter FedSQL sur CAS, l'option sessref= est obligatoire.

Tableau 2 : Matrice de décision

Source des données (Input)Cible des données (Output)Procédure à utiliserNote technique
Compute (ex: Base SAS©, Work)ComputePROC SQL (ou FedSQL sans sessref)Approche classique SAS© 9.
ComputeCASPROC SQLFedSQL sur CAS ne "voit" pas les libnames locaux (Compute).
CASComputePROC SQLLes données sont téléchargées du serveur CAS vers le client (lent pour gros volumes).
CASCASPROC FedSQL (avec sessref)La seule méthode pour bénéficier du traitement in-memory distribué.
De SAS 9 à SAS Viya : Le guide complet de migration de PROC SQL vers PROC FedSQL -
Note :
Exemple de syntaxe CAS :
1PROC FEDSQL sessref=masession;
2 create TABLE casuser.resultat {options replace=true} as
3 select * from casuser.SOURCE;
4QUIT;

4. Guide de Migration : Les pièges à éviter

Voici les différences syntaxiques critiques qui bloquent souvent les développeurs lors de la conversion du code.

Gestion des lignes et pagination

  • LIMIT au lieu de INOBS : L'option inobs n'existe pas en FedSQL. Utilisez la clause LIMIT à la fin de votre requête.

  • OFFSET au lieu de MONOTONIC() : La fonction non documentée monotonic() est obsolète. Pour sauter les 5 premières lignes et lire les 5 suivantes, utilisez : LIMIT 5 OFFSET 5.

Rigueur des chaînes de caractères (Le point le plus important)

FedSQL est strict sur l'usage des guillemets :

  1. Guillemets simples ('Texte') : Uniquement pour les chaînes de caractères (valeurs).

  2. Guillemets doubles ("MaVar") : Uniquement pour les noms de colonnes ou de tables (particulièrement s'ils contiennent des espaces ou des caractères spéciaux).

  • Problème des Macros : Comme les guillemets simples empêchent la résolution des macros ('&MaVar' ne fonctionne pas), utilisez la macro fonction %TSLIT(&MaVar). Elle résout la variable et ajoute les guillemets simples nécessaires.

Types de données et Fonctions

  • Formats : L'option FORMAT= dans le SELECT n'est pas supportée. Utilisez la fonction PUT(col, format.). Attention, cela convertit le résultat en chaîne (VARCHAR).

  • Typage explicite : Utilisez CAST(variable AS type) ou l'opérateur :: (ex: date::char(10)) pour forcer un type de données.

  • Fonctions obsolètes : Remplacez RANUNI(seed) par RAND('UNIFORM', min, max).

Syntaxe SQL

  • Pas de CALCULATED : Vous ne pouvez pas réutiliser le nom d'une colonne calculée dans la même requête (dans un WHERE ou HAVING). Il faut répéter l'expression de calcul.

  • Opérateurs mathématiques : Les mnémoniques SAS© (EQ, GT, NE) sont interdits. Utilisez les symboles standards (=, >, <>).

  • Options de Dataset : Les options placées après le nom de la table (ex: table(where=(...))) ne fonctionnent pas. Intégrez tout dans la clause WHERE du SQL.

  • Pas de ORDER BY en création : Lors d'un CREATE TABLE, l'option ORDER BY est ignorée ou génère une erreur, car les tables CAS distribuées n'ont pas d'ordre intrinsèque.

5. Aide-mémoire de migration (Cheat Sheet)

Ce tableau résume les modifications syntaxiques à effectuer sur votre code.

Tableau 3 : Syntaxe SAS© 9 vs SAS© Viya

Action / ConceptSyntaxe SAS© 9 (PROC SQL)Syntaxe SAS© Viya (PROC FedSQL CAS)
Limiter les résultatsINOBS=5LIMIT 5
PaginationWHERE MONOTONIC() > 5OFFSET 5
Chaînes de caractères"Texte" ou 'Texte''Texte' (Guillemets simples obligatoires)
Noms de variables (spéciaux)'Nom Var'n (Name Literal)"Nom Var" (Guillemets doubles)
Variables Macro"&MaVar"%TSLIT(&MaVar)
ComparaisonsEQ, GT, NE=, >, <> (Symboles)
Options de DatasetTable(where=(...))Clause WHERE SQL standard
FormatageFORMAT=date9.PUT(col, date9.) (Devient VARCHAR)
Typage expliciteN/A (Automatique)CAST(x as INT64) ou x::INT64
Référence calculéeMot-clé CALCULATEDRépéter l'expression du calcul
Tri à la créationORDER BY supportéORDER BY non supporté dans CREATE TABLE
De SAS 9 à SAS Viya : Le guide complet de migration de PROC SQL vers PROC FedSQL -

La modernisation vers SAS© Viya et le moteur CAS offre des gains de performance majeurs. Bien que PROC FedSQL impose une rigueur syntaxique plus forte que le PROC SQL classique, l'adoption de ces standards ANSI garantit un code plus robuste, portable et optimisé pour le traitement distribué. En suivant ces tableaux de conversion, vous éviterez la majorité des erreurs de compilation lors de vos migrations.