Le script commence par définir des variables macro pour configurer le type de source de données (par exemple, ODBC), le nom de la session CAS et l'alias de la caslib. Il inclut des marqueurs de paramètres pour les informations de connexion (nom d'utilisateur, mot de passe, base de données, schéma). Une session CAS est initiée, puis une caslib est ajoutée en utilisant le connecteur de données spécifié par les variables macro. Un DATA STEP est ensuite utilisé pour créer une table 'LOADSAMPLE' dans le DBMS externe via une libname configurée pour le connecteur. Cette table est ensuite chargée dans CAS à trois reprises : une fois dans son intégralité, une fois avec une clause WHERE pour filtrer les lignes, et une fois en sélectionnant des variables spécifiques. Les tables chargées en mémoire CAS sont vérifiées à l'aide de PROC PRINT. Enfin, le script nettoie les ressources en supprimant la table source du DBMS externe et en terminant la session CAS.
Analyse des données
Type : MIXTE
Les données sont initialement définies 'en ligne' via une instruction DATALINES au sein du script. Elles sont ensuite écrites dans une table ('LOADSAMPLE') d'un système de gestion de base de données (DBMS) externe, dont le type est spécifié par la variable macro 'srctype' (par défaut ODBC). Ces données, bien que créées par le script, résident temporairement de manière externe avant d'être chargées et traitées dans l'environnement CAS.
1 Bloc de code
Variables Macro
Explication : Ce bloc définit des variables macro essentielles pour la configuration de la connexion. `srctype` spécifie le type de système de gestion de base de données (DBMS). `cas_session` et `caslib_alias` nomment respectivement la session CAS et la bibliothèque CAS. Les autres variables (`username`, `password`, `database`, `schema`, `CONNOPTS`) sont des placeholders pour les informations d'authentification et de connexion spécifiques au DBMS externe.
Copié !
/* Specify the DBMS engine, for example: ODBC */
%let srctype=odbc;
%let cas_session = mysess;
%let caslib_alias = datalib;
/*Specify connection parameters within a string
Edit the below variables with the required DBMS-specific conection options
Also, specify such variables within the CONNOPS string, as this will be used for the other sample programs
Most datasources will require username, password, database, and schema/server
Please refer to the connopts.xlsx file for specific connection requirements for each DBMS engine
BigQuery: requires protject and cred_path parameters
Hadoop: requires hadoopJarPath, hadoopConfigDir, and dtm parameters
Impala: requires port and conopts parameters
JDBC: requires url, class, and classpath parameters
Salesforce: requires authendpoint and catalog parameters
SAP Hana: requires instance and tabletype parameters
Teradata: requires dataTransferMode parameter
Oracle, Netezza, and MSSWL require catalog parameter
*/
%let username = ???????;
%let password = ???????;
%let database = ???????;
%let schema = ???????;
%let CONNOPTS=%str(user=???????
pwd=???????
dsn=???????);
1
/* Specify the DBMS engine, for example: ODBC */
2
%let srctype=odbc;
3
4
%let cas_session = mysess;
5
%let caslib_alias = datalib;
6
7
8
/*Specify connection parameters within a string
9
10
Edit the below variables with the required DBMS-specific conection options
11
Also, specify such variables within the CONNOPS string, as this will be used for the other sample programs
12
13
Most datasources will require username, password, database, and schema/server
14
Please refer to the connopts.xlsx file for specific connection requirements for each DBMS engine
15
16
BigQuery: requires protject and cred_path parameters
17
Hadoop: requires hadoopJarPath, hadoopConfigDir, and dtm parameters
18
Impala: requires port and conopts parameters
19
JDBC: requires url, class, and classpath parameters
20
Salesforce: requires authendpoint and catalog parameters
21
SAP Hana: requires instance and tabletype parameters
22
Teradata: requires dataTransferMode parameter
23
Oracle, Netezza, and MSSWL require catalog parameter
24
25
*/
26
27
%let username = ???????;
28
%let password = ???????;
29
%let database = ???????;
30
%let schema = ???????;
31
32
%let CONNOPTS=%str(user=???????
33
pwd=???????
34
dsn=???????);
2 Bloc de code
Session CAS
Explication : Cette instruction initialise une session CAS avec le nom spécifié par la variable macro `cas_session`. Les options `cashost` et `casport` sont commentées, indiquant qu'elles peuvent être optionnelles dans SAS Studio ou définies par l'environnement.
Copié !
/* Connect to CAS using cashost and casport, optional in SAS Studio */
/* options cashost="???????" casport=????; */
/* Create a CAS Session */
cas &cas_session;
1
/* Connect to CAS using cashost and casport, optional in SAS Studio */
2
/* options cashost="???????" casport=????; */
3
4
5
/* Create a CAS Session */
6
cas &cas_session;
3 Bloc de code
PROC CAS (action addCaslib)
Explication : Ce bloc utilise `PROC CAS` pour exécuter l'action `addCaslib`. Cette action crée une nouvelle caslib (`&caslib_alias`) et la connecte au DBMS externe via le `srctype` défini. Les paramètres `user`, `pass`, `database`, `schema` et `catalog` sont passés comme options de connexion au connecteur de données, permettant à CAS d'accéder aux données du DBMS.
Explication : Ce DATA STEP est crucial pour la création des données de test. Il définit d'abord une libname `loadlib` qui pointe vers le DBMS externe via le `srctype` et les `CONNOPTS` spécifiés. Ensuite, une table nommée `LOADSAMPLE` est créée dans ce DBMS externe en utilisant des données fournies directement dans le script via l'instruction `datalines`. Cette table simule une source de données externe prête à être chargée dans CAS.
Explication : Ce bloc utilise `PROC CAS` pour charger la totalité de la table `LOADSAMPLE` (résidant dans le DBMS externe et accessible via `&caslib_alias`) en mémoire CAS. La table en mémoire CAS sera nommée `SAMDATLOAD`. L'option `replace=true` garantit que si une table du même nom existe déjà, elle sera remplacée.
/* Proc cas loadtable action: loads entire table*/
2
PROC CAS;
3
SESSION &cas_session;
4
ACTION loadtable
5
casout={name="SAMDATLOAD" replace=true}
6
caslib="&caslib_alias"
7
path="LOADSAMPLE";
8
RUN;
9
QUIT;
6 Bloc de code
PROC CAS (action loadtable avec WHERE)
Explication : Ce bloc démontre le chargement conditionnel des données. Il charge la table `LOADSAMPLE` dans CAS sous le nom `SAMDATLOADWHERE`, mais applique un filtre (`where="FLIGHT = 114"`) pour inclure uniquement les lignes où la colonne 'FLIGHT' a la valeur '114'.
Copié !
/* Proc cas loadtable action with where parameter: subsets the input data */
proc cas;
session &cas_session;
action loadtable
casout={name="SAMDATLOADWHERE" replace=true}
caslib="&caslib_alias"
where="FLIGHT = 114"
path="LOADSAMPLE";
run;
quit;
1
/* Proc cas loadtable action with where parameter: subsets the input data */
2
PROC CAS;
3
SESSION &cas_session;
4
ACTION loadtable
5
casout={name="SAMDATLOADWHERE" replace=true}
6
caslib="&caslib_alias"
7
where="FLIGHT = 114"
8
path="LOADSAMPLE";
9
RUN;
10
QUIT;
7 Bloc de code
PROC CAS (action loadtable avec VARS)
Explication : Ce bloc illustre le chargement sélectif de colonnes. Il charge la table `LOADSAMPLE` dans CAS sous le nom `SAMDATLOADVARS`, mais ne transfère que les colonnes 'FLIGHT', 'ORIG' et 'DEST', réduisant ainsi la quantité de données en mémoire.
Copié !
/* Proc cas loadtable action with vars parameter: specifies variables to load */
proc cas;
session &cas_session;
action loadtable
casout={name="SAMDATLOADVARS" replace=true}
caslib="&caslib_alias"
vars={"FLIGHT", "ORIG", "DEST"}
path="LOADSAMPLE";
run;
quit;
1
/* Proc cas loadtable action with vars parameter: specifies variables to load */
2
PROC CAS;
3
SESSION &cas_session;
4
ACTION loadtable
5
casout={name="SAMDATLOADVARS" replace=true}
6
caslib="&caslib_alias"
7
vars={"FLIGHT", "ORIG", "DEST"}
8
path="LOADSAMPLE";
9
RUN;
10
QUIT;
8 Bloc de code
PROC PRINT
Explication : Ce bloc crée une libname `caslib` de type 'CAS' qui référence la session CAS active. Il utilise ensuite `PROC PRINT` pour afficher le contenu des trois tables chargées en mémoire (`SAMDATLOAD`, `SAMDATLOADWHERE`, `SAMDATLOADVARS`), permettant de vérifier que les opérations de chargement et de filtrage ont été effectuées correctement.
Copié !
/* Verify loadtable using caslib libref with CAS Libname engine to print in-memory tables*/
libname caslib cas sessref=&cas_session tag="";
proc print data=caslib.SAMDATLOAD;
run;
proc print data=caslib.SAMDATLOADWHERE;
run;
proc print data=caslib.SAMDATLOADVARS;
run;
1
/* Verify loadtable using caslib libref with CAS Libname engine to print in-memory tables*/
2
LIBNAME caslib cas sessref=&cas_session tag="";
3
PROC PRINTDATA=caslib.SAMDATLOAD;
4
RUN;
5
PROC PRINTDATA=caslib.SAMDATLOADWHERE;
6
RUN;
7
PROC PRINTDATA=caslib.SAMDATLOADVARS;
8
RUN;
9 Bloc de code
PROC CAS (action deleteSource)
Explication : Ce bloc de nettoyage utilise `PROC CAS` avec l'action `deleteSource`. Il supprime la table `LOADSAMPLE` du DBMS externe, celle qui a été créée par le DATA STEP initial et qui servait de source pour les opérations de chargement CAS, libérant ainsi les ressources externes.
Copié !
/* Clean-up: Delete files from data source associated with caslib */
proc cas;
session &cas_session;
action deleteSource
caslib="&caslib_alias"
source="LOADSAMPLE"
;
run;
quit;
1
/* Clean-up: Delete files from data source associated with caslib */
2
PROC CAS;
3
SESSION &cas_session;
4
ACTION deleteSource
5
caslib="&caslib_alias"
6
SOURCE="LOADSAMPLE"
7
;
8
RUN;
9
QUIT;
10 Bloc de code
Session CAS
Explication : Cette instruction termine la session CAS spécifiée par `&cas_session`, libérant toutes les ressources allouées à cette session sur le serveur CAS.
Copié !
/* Remove CAS session */
cas &cas_session. terminate;
1
/* Remove CAS
2
session */
3
cas &cas_session. terminate;
4
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.
« Le chargement de données dans l'architecture distribuée de SAS Viya ne doit jamais être une opération 'brute'. Ce script illustre une règle d'or de la performance : le filtrage à la source.
En utilisant les paramètres where et vars directement dans l'action loadtable, vous activez ce qu'on appelle le Pass-Through. Au lieu de charger des gigaoctets de données pour les filtrer ensuite en mémoire, le connecteur CAS délègue ces opérations au DBMS (Oracle, Teradata, BigQuery, etc.). Résultat : vous ne saturez pas votre bande passante réseau et vous optimisez l'occupation de votre RAM sur les workers CAS en ne chargeant que le strict nécessaire à votre analyse. »
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.