Publicado el :

Configuración y conexión a una sesión SAS remota

Este código también está disponible en: Deutsch English Français
En espera de validación
Attention : Este código requiere privilegios de administrador.
El script comienza por definir una opción de cifrado de red para SSL. Luego utiliza varias macros `%put` con macros de sistema (`&sysuserid`, `&syshostname`, etc.) para mostrar información sobre el entorno de ejecución de la sesión SAS© local (cliente). Se definen variables para una sesión CAS con fines de configuración futura, aunque la conexión CAS en sí misma está comentada y no está activa en esta ejecución. El script procede luego a establecer una conexión SAS©/CONNECT a un host remoto especificado, utilizando un nombre de usuario y una contraseña explícitos. Una vez conectado, se ejecuta un bloque `rsubmit` en el servidor remoto, mostrando información del sistema remoto y creando una gran tabla de datos temporal. También se crea una tabla de datos similar localmente. Finalmente, el script recupera la ruta del directorio de trabajo remoto (`WORK`) y la utiliza para definir una libname `rsaswork` en la sesión local, permitiendo el acceso directo a los archivos creados en el espacio de trabajo remoto.
Análisis de datos

Type : MIXTE


Los datos se crean directamente en el script a través de pasos `DATA` que generan 100 millones de observaciones aleatorias en tablas temporales, tanto localmente como en la sesión remota. También se utiliza y muestra información del sistema a través del acceso a las macros del sistema SAS (`%sysget`, `&sysuserid`, etc.).

1 Bloque de código
Macros de sistema
Explicación :
Este bloque inicializa la opción de cifrado de red SSL. Luego utiliza macros `%put` para mostrar diversa información de entorno y de proceso de la sesión SAS local (cliente), como el ID de usuario, el nombre de host, el ID de proceso, el modo de proceso y el estado de variables de entorno específicas de SAS Viya (`SASCLOUDNATIVE`, `TCPNOIPADDR`, `SAS_SERVICES_URL`).
¡Copiado!
1OPTIONS NETENCRYPTALGORITHM=SSL;
2 
3%put ********** CLIENT ********;
4%put My local user ID is: &sysuserid;
5%put The local host name is: &syshostname;
6%put The local process name is: &sysprocessname;
7%put The local process ID is: &sysprocessid;
8%put The local process mode is: &sysprocessmode;
9 
10%let SASCLOUDNATIVE_state="%sysget(SASCLOUDNATIVE)";
11%put &SASCLOUDNATIVE_state;
12 
13%let TCPNOIPADDR_state="%sysget(TCPNOIPADDR)";
14%put &TCPNOIPADDR_state;
15 
16%let ENVIRONMENT="%sysget(SAS_SERVICES_URL)";
17%put &ENVIRONMENT;
2 Bloque de código
Macros
Explicación :
Este bloque define variables macro (`_sessionName`, `_sessionType`, `_namespace`, `_casserver`) destinadas a ser utilizadas para una conexión a una sesión CAS. La línea de conexión real a CAS (`cas ...`) está comentada, lo que indica que la conexión no se establece activamente en esta ejecución del script.
¡Copiado!
1/* CAS session */
2%let _sessionName=&sysuserid;
3%let _sessionType=sas9;
4%let _namespace=gelcorp;
5%let _casserver=default;
6 
7/* Start a CAS session on the cas-shared-&_casserver CAS server */
8* cas &_sessionName._&_sessionType host="controller.sas-cas-server-&_casserver..&_namespace..svc.cluster.local" port=5570 sessopts=(metrics=true);
3 Bloque de código
SAS/CONNECT
Explicación :
Este bloque configura los parámetros de conexión para una sesión SAS/CONNECT. Define la macro `host` con la dirección del servidor remoto (se elige un NodePort externo). La declaración `SIGNON` establece la conexión con el servidor remoto utilizando el nombre de usuario 'geladm' y una contraseña explícita. La macro `%syslput` se utiliza para enviar el valor de `_sessionType` a la sesión remota, donde estará accesible a través de `_sessionTypeRemote`.
¡Copiado!
1/* Connect session */
2/* INTERNAL ClusterIP */
3* %let host=sas-connect-spawner 17551;
4/* EXTERNAL NodePort */
5%let host=gelcorp.pdcesx03138.race.sas.com 30377;
6 
7SIGNON host user='geladm' pass='lnxsas';
8%syslput _sessionTypeRemote=&_sessionType;
4 Bloque de código
Macros de sistema
Explicación :
Este bloque `rsubmit` ejecuta el código en la sesión SAS remota. Utiliza macros `%put` similares a las del cliente para mostrar información de entorno y de proceso del servidor remoto. Esto es útil para verificar la configuración y la identidad de la sesión remota.
¡Copiado!
1rsubmit;
2 %put ********** SERVER ********;
3 %put My remote user ID is: &sysuserid;
4 %put The remote host name is: &syshostname;
5 %put The remote process name is: &sysprocessname;
6 %put The remote process ID is: &sysprocessid;
7 %put The remote process mode is: &sysprocessmode;
8 
9 %let SASCLOUDNATIVE_state="%sysget(SASCLOUDNATIVE)";
10 %put &SASCLOUDNATIVE_state;
11
12 %let TCPNOIPADDR_state="%sysget(TCPNOIPADDR)";
13 %put &TCPNOIPADDR_state;
14
15 %let ENVIRONMENT="%sysget(SAS_SERVICES_URL)";
16 %put &ENVIRONMENT;
17endrsubmit;
5 Bloque de código
DATA STEP Data
Explicación :
Este bloque `DATA STEP` se ejecuta localmente y crea una tabla SAS grande llamada `local` seguida del valor de `_sessionType` (por ejemplo, `localsas9`). La tabla contiene dos variables (`i` y `j`) y se llena con 100 millones de observaciones, siendo `j` un número aleatorio.
¡Copiado!
1DATA local&_sessionType;
2 DO i=1 to 100000000;
3 j=ranuni(1234);
4 OUTPUT;
5 END;
6RUN;
6 Bloque de código
DATA STEP Data
Explicación :
Este bloque `rsubmit` ejecuta el código en la sesión SAS remota. Crea una tabla SAS similar a la del bloque anterior, pero esta vez en el servidor remoto, llamada `remote` seguida del valor de `_sessionTypeRemote`. Después de la creación de los datos, la macro `%sysrput` se utiliza para transferir la ruta del directorio de trabajo (`WORK`) de la sesión remota a una variable macro llamada `rsaswork` en la sesión local.
¡Copiado!
1rsubmit;
2 %put &_sessionTypeRemote;
3 
4 DATA remote&_sessionTypeRemote;
5 DO i=1 to 100000000;
6 j=ranuni(1234);
7 OUTPUT;
8 END;
9 RUN;
10 
11 %sysrput rsaswork=%sysfunc(pathname(work));
12endrsubmit;
7 Bloque de código
LIBNAME
Explicación :
Este bloque muestra primero el valor de la variable macro `rsaswork` (que contiene la ruta del directorio de trabajo remoto). Luego, la declaración `LIBNAME` se utiliza para definir una biblioteca llamada `rsaswork` en la sesión local, apuntando al directorio de trabajo de la sesión remota a través de la conexión SAS/CONNECT establecida. Esto permite que la sesión local acceda a los archivos creados en el espacio de trabajo remoto.
¡Copiado!
1%put "&rsaswork";
2LIBNAME rsaswork "&rsaswork" server=host;
3 
8 Bloque de código
Comentarios
Explicación :
Este bloque contiene secciones de código comentadas. La primera sección habría mantenido la sesión remota abierta durante un período de tiempo determinado (`call sleep`). La segunda sección contiene los comandos `signoff _all;` y `cas ... terminate;` que se habrían utilizado para finalizar las sesiones SAS/CONNECT y CAS si se hubieran establecido. Estas líneas se incluyen como ejemplo o referencia, pero no están activas en la ejecución actual del script.
¡Copiado!
1/* When running as a batch job - need to keep the session open fro fe minutes */
2/*
3rsubmit;
4 data _null_;
5 call sleep(5,60);
6 run;
7endrsubmit;
8*/
9 
10* waitfor _all_;
11 
12 
13/* Close both CAS and connect sessions */
14/*
15cas &_sessionName._&_sessionType terminate;
16signoff _all_;
17*/
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.