Los datos se generan internamente en el script usando DATA STEPs que crean dos tablas distintas (una local y otra remota), cada una con 100 millones de observaciones y una variable numérica aleatoria.
1 Bloque de código
MACRO
Explicación : Este bloque inicializa la opción `NETENCRYPTALGORITHM` a `SSL` para la seguridad de la red. Luego muestra diversa información sobre el entorno de ejecución local del cliente, como el ID de usuario, el nombre de host, el nombre y el ID del proceso, así como su modo. También recupera y muestra el estado de las variables de entorno `SASCLOUDNATIVE`, `TCPNOIPADDR` y `SAS_SERVICES_URL`.
¡Copiado!
OPTIONS NETENCRYPTALGORITHM=SSL;
%put ********** CLIENT ********;
%put My local user ID is: &sysuserid;
%put The local host name is: &syshostname;
%put The local process name is: &sysprocessname;
%put The local process ID is: &sysprocessid;
%put The local process mode is: &sysprocessmode;
%let SASCLOUDNATIVE_state="%sysget(SASCLOUDNATIVE)";
%put &SASCLOUDNATIVE_state;
%let TCPNOIPADDR_state="%sysget(TCPNOIPADDR)";
%put &TCPNOIPADDR_state;
%let ENVIRONMENT="%sysget(SAS_SERVICES_URL)";
%put &ENVIRONMENT;
Explicación : Este bloque define variables macro para configurar una sesión CAS, incluyendo el nombre de la sesión, el tipo, el espacio de nombres y el servidor CAS. Luego inicia una sesión CAS con los parámetros especificados. A continuación, define el host para una conexión SAS/CONNECT (con opciones para una IP de clúster interna o un NodePort externo) y establece una sesión SAS/CONNECT al servidor remoto usando un usuario y contraseña definidos. Finalmente, transmite la variable macro `_sessionType` a la sesión remota a través de `%syslput`.
¡Copiado!
/* CAS session */
%let _sessionName=&sysuserid;
%let _sessionType=batch;
%let _namespace=gelcorp;
%let _casserver=default;
/* Start a CAS session on the cas-shared-&_casserver CAS server */
cas &_sessionName._&_sessionType host="controller.sas-cas-server-&_casserver..&_namespace..svc.cluster.local" port=5570 sessopts=(metrics=true);
/* Connect session */
/* INTERNAL ClusterIP */
%let host=sas-connect-spawner 17551;
/* EXTERNAL NodePort */
* %let host=gelcorp.pdcesx03138.race.sas.com 30377;
SIGNON host user='geladm' pass='lnxsas';
%syslput _sessionTypeRemote=&_sessionType;
1
/* CAS session */
2
%let _sessionName=&sysuserid;
3
%let _sessionType=batch;
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);
Explicación : Este bloque se ejecuta en el servidor remoto a través de `RSUBMIT`. Muestra información similar a la del cliente pero para el entorno del servidor remoto, como el ID de usuario, el host, el nombre y el ID del proceso, así como su modo. También recupera y muestra el estado de las variables de entorno `SASCLOUDNATIVE`, `TCPNOIPADDR` y `SAS_SERVICES_URL` en el servidor.
¡Copiado!
rsubmit;
%put ********** SERVER ********;
%put My remote user ID is: &sysuserid;
%put The remote host name is: &syshostname;
%put The remote process name is: &sysprocessname;
%put The remote process ID is: &sysprocessid;
%put The remote process mode is: &sysprocessmode;
%let SASCLOUDNATIVE_state="%sysget(SASCLOUDNATIVE)";
%put &SASCLOUDNATIVE_state;
%let TCPNOIPADDR_state="%sysget(TCPNOIPADDR)";
%put &TCPNOIPADDR_state;
%let ENVIRONMENT="%sysget(SAS_SERVICES_URL)";
%put &ENVIRONMENT;
endrsubmit;
Explicación : Este bloque DATA STEP crea una tabla SAS llamada `localbatch` (donde `&_sessionType` es 'batch') en la biblioteca de trabajo local. Esta tabla se genera con 100 millones de observaciones, cada una conteniendo un índice `i` y una variable `j` rellena con números aleatorios.
¡Copiado!
data local&_sessionType;
do i=1 to 100000000;
j=ranuni(1234);
output;
end;
run;
1
DATA local&_sessionType;
2
DO i=1 to 100000000;
3
j=ranuni(1234);
4
OUTPUT;
5
END;
6
RUN;
5 Bloque de código
DATA STEP / MACRO (via RSUBMIT) Data
Explicación : Este bloque, ejecutado a través de `RSUBMIT` en el servidor remoto, muestra primero el tipo de sesión remota. Luego crea una tabla SAS llamada `remotebatch` en la biblioteca de trabajo del servidor remoto, similar a la tabla local, con 100 millones de observaciones aleatorias. Finalmente, utiliza `%sysrput` para devolver la ruta de acceso a la biblioteca de trabajo del servidor remoto a la sesión local, almacenada en la variable macro `rsaswork`.
¡Copiado!
rsubmit;
%put &_sessionTypeRemote;
data remote&_sessionTypeRemote;
do i=1 to 100000000;
j=ranuni(1234);
output;
end;
run;
%sysrput rsaswork=%sysfunc(pathname(work));
endrsubmit;
1
rsubmit;
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));
12
endrsubmit;
6 Bloque de código
LIBNAME
Explicación : Este bloque muestra la ruta de la biblioteca de trabajo remota. Luego utiliza una instrucción `LIBNAME` para crear un acceso directo `rsaswork` en la sesión SAS local, que apunta a la ruta de la biblioteca de trabajo remota (`&rsaswork`) utilizando la conexión SAS/CONNECT (`server=host`). Esto permite que la sesión local acceda directamente a los datos almacenados en el directorio de trabajo del servidor remoto.
Explicación : Ejecutado en el servidor remoto a través de `RSUBMIT`, este bloque `DATA _NULL_` utiliza la función `CALL SLEEP` para pausar la sesión remota durante 5 minutos (300 segundos). Esto es útil para mantener la sesión activa, especialmente en entornos de procesamiento por lotes donde la sesión podría terminar prematuramente.
¡Copiado!
rsubmit;
data _null_;
call sleep(5,60);
run;
endrsubmit;
1
rsubmit;
2
DATA _null_;
3
call sleep(5,60);
4
RUN;
5
endrsubmit;
8 Bloque de código
CAS / SAS/CONNECT
Explicación : Este bloque asegura el cierre limpio de las sesiones abiertas. Termina la sesión CAS especificada por `&_sessionName._&_sessionType` y utiliza `SIGNOFF _ALL_` para desconectar todas las sesiones SAS/CONNECT activas.
¡Copiado!
* waitfor _all_;
/* Close both CAS and connect sessions */
cas &_sessionName._&_sessionType terminate;
signoff _all_;
1
* waitfor _all_;
2
3
4
/* Close both CAS and connect sessions */
5
cas &_sessionName._&_sessionType terminate;
6
signoff _all_;
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.
SAS y todos los demás nombres de productos o servicios de SAS Institute Inc. son marcas registradas o marcas comerciales de SAS Institute Inc. en los EE. UU. y otros países. ® indica registro en los EE. UU. WeAreCAS es un sitio comunitario independiente y no está afiliado a SAS Institute Inc.
Este sitio utiliza cookies técnicas y analíticas para mejorar su experiencia.
Saber más.