Publicado el :

Resolución de problemas de errores del motor CAS LIBNAME

Este código también está disponible en: Deutsch English Français
En espera de validación
El error 'The call to Cloud Analytic Services failed' generalmente es causado por un procedimiento o un paso DATA que intenta crear varias tablas de salida utilizando el mismo libref CAS para entrada y salida. El motor CAS LIBNAME no puede procesar múltiples acciones de salida simultáneamente en un solo libref. Esto es particularmente observable cuando la opción WRITETRANSFERSIZE se establece en un valor pequeño, lo que exacerba la contención. Las soluciones propuestas incluyen el uso de pasos DATA o PROC distintos para cada tabla de salida, o el uso de un motor de datos diferente para la creación de tablas intermedias o finales.
Análisis de datos

Type : CREATION_INTERNE


Los ejemplos utilizan datos generados (SASHELP.CARS) o datalines para garantizar la autonomía del código.

1 Bloque de código
DATA STEP Data
Explicación :
Este ejemplo demuestra el escenario exacto que causa el error descrito en la documentación. Un solo paso DATA intenta escribir simultáneamente dos tablas ('one' y 'two') en el mismo libref CAS ('mycas'). El motor CAS LIBNAME, especialmente con un 'writetransfersize' artificialmente pequeño, no puede manejar múltiples flujos de salida concurrentes de esta manera, lo que lleva al fallo de la llamada a Cloud Analytic Services. La opción `writetransfersize=1k` se utiliza para hacer que el error sea más probable en un entorno de prueba.
¡Copiado!
1/* Établit une connexion CAS avec une petite taille de transfert pour provoquer l'erreur */
2LIBNAME mycas cas s_port=10000 s_host='localhost' caslib='casuser' s_caslib='casuser' s_nthreads=1 s_timeout=1000 writetransfersize=1k;
3 
4/* Crée deux tables de sortie dans CAS en utilisant un seul DATA step */
5/* Ceci est le scénario qui génère l'erreur 'The call to Cloud Analytic Services failed' */
6DATA mycas.one mycas.two;
7 SET sashelp.cars;
8RUN;
9 
10/* Pour nettoyer après l'erreur (si la session n'est pas bloquée) */
11/* proc casutil incaslib='casuser'; droptable 'one'; droptable 'two'; run; */
12/* libname mycas clear; */
2 Bloque de código
DATA STEP Data
Explicación :
Este ejemplo ilustra la solución más simple al problema anterior: dividir la creación de tablas de salida en varios pasos DATA secuenciales. Cada paso DATA escribe una sola tabla en el libref CAS, evitando así el conflicto de acceso simultáneo y permitiendo que el motor CAS LIBNAME procese las solicitudes individualmente. Este enfoque se recomienda por su claridad y su conformidad con las mejores prácticas.
¡Copiado!
1/* Établit une connexion CAS */
2LIBNAME mycas cas s_port=10000 s_host='localhost' caslib='casuser' s_caslib='casuser';
3 
4/* Crée la première table de sortie dans un DATA step distinct */
5DATA mycas.one;
6 SET sashelp.cars;
7RUN;
8 
9/* Crée la deuxième table de sortie dans un DATA step distinct */
10DATA mycas.two;
11 SET sashelp.cars;
12RUN;
13 
14/* Vérification des tables créées */
15PROC CASUTIL incaslib='casuser'; list tables; RUN;
16 
17/* Nettoyage */
18PROC CASUTIL incaslib='casuser'; droptable 'one'; droptable 'two'; RUN;
19LIBNAME mycas clear;
3 Bloque de código
PROC COPY Data
Explicación :
Esta solución avanzada utiliza el procedimiento PROC COPY para transferir varias tablas de una biblioteca SAS temporal (WORK) al libref CAS. PROC COPY gestiona internamente la transferencia secuencial de tablas, evitando así el problema de contención observado con la escritura directa de varias tablas en un solo paso DATA. Es un método eficaz para consolidar la transferencia de datos respetando las restricciones del motor CAS LIBNAME.
¡Copiado!
1/* Établit une connexion CAS */
2LIBNAME mycas cas s_port=10000 s_host='localhost' caslib='casuser' s_caslib='casuser';
3 
4/* Crée des données temporaires dans work */
5DATA work.temp_one;
6 SET sashelp.cars;
7 where make = 'Audi';
8RUN;
9 
10DATA work.temp_two;
11 SET sashelp.cars;
12 where make = 'BMW';
13RUN;
14 
15/* Utilise PROC COPY pour transférer séquentiellement les tables vers CAS */
16/* Cela est géré en interne par SAS pour éviter les conflits */
17PROC COPY in=work out=mycas;
18 select temp_one temp_two;
19RUN;
20 
21/* Vérification des tables créées */
22PROC CASUTIL incaslib='casuser'; list tables; RUN;
23 
24/* Nettoyage */
25PROC CASUTIL incaslib='casuser'; droptable 'temp_one' 'temp_two'; RUN;
26LIBNAME mycas clear;
27LIBNAME work clear;
4 Bloque de código
DATA STEP Data
Explicación :
Este ejemplo se centra en una mejor gestión de las transferencias de datos voluminosos a CAS utilizando la opción `WRITETRANSFERSIZE`. En lugar de un valor pequeño que puede exacerbar los problemas de rendimiento o concurrencia, se utiliza un valor más alto (aquí 1M para 1 MB) para optimizar la transferencia. Aunque el ejemplo 1 mostró cómo un valor pequeño podía causar errores en escenarios específicos, un valor apropiado para `WRITETRANSFERSIZE` es crucial para la eficiencia de las operaciones CAS, especialmente para la ingesta de datos masivos. Este ejemplo crea una sola tabla grande para ilustrar el rendimiento de una transferencia optimizada.
¡Copiado!
1/* Établit une connexion CAS avec une taille de transfert optimisée */
2/* Utiliser une valeur plus grande pour WRITETRANSFERSIZE */
3LIBNAME mycas cas s_port=10000 s_host='localhost' caslib='casuser' s_caslib='casuser' writetransfersize=1m;
4 
5/* Crée une table de grande taille dans CAS */
6DATA mycas.large_table;
7 DO _n_ = 1 to 100000;
8 var1 = ranuni(0);
9 var2 = rand('NORMAL');
10 OUTPUT;
11 END;
12RUN;
13 
14/* Vérification de la table créée */
15PROC CASUTIL incaslib='casuser'; list tables; RUN;
16PROC PRINT DATA=mycas.large_table(obs=5); RUN;
17 
18/* Nettoyage */
19PROC CASUTIL incaslib='casuser'; droptable 'large_table'; RUN;
20LIBNAME mycas clear;
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.