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!
/* Établit une connexion CAS avec une petite taille de transfert pour provoquer l'erreur */
libname mycas cas s_port=10000 s_host='localhost' caslib='casuser' s_caslib='casuser' s_nthreads=1 s_timeout=1000 writetransfersize=1k;
/* Crée deux tables de sortie dans CAS en utilisant un seul DATA step */
/* Ceci est le scénario qui génère l'erreur 'The call to Cloud Analytic Services failed' */
data mycas.one mycas.two;
set sashelp.cars;
run;
/* Pour nettoyer après l'erreur (si la session n'est pas bloquée) */
/* proc casutil incaslib='casuser'; droptable 'one'; droptable 'two'; run; */
/* libname mycas clear; */
1
/* Établit une connexion CAS avec une petite taille de transfert pour provoquer l'erreur */
2
LIBNAME 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' */
6
DATA mycas.one mycas.two;
7
SET sashelp.cars;
8
RUN;
9
10
/* Pour nettoyer après l'erreur (si la session n'est pas bloquée) */
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!
/* Établit une connexion CAS */
libname mycas cas s_port=10000 s_host='localhost' caslib='casuser' s_caslib='casuser';
/* Crée la première table de sortie dans un DATA step distinct */
data mycas.one;
set sashelp.cars;
run;
/* Crée la deuxième table de sortie dans un DATA step distinct */
data mycas.two;
set sashelp.cars;
run;
/* Vérification des tables créées */
proc casutil incaslib='casuser'; list tables; run;
/* Nettoyage */
proc casutil incaslib='casuser'; droptable 'one'; droptable 'two'; run;
libname mycas clear;
1
/* Établit une connexion CAS */
2
LIBNAME 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 */
5
DATA mycas.one;
6
SET sashelp.cars;
7
RUN;
8
9
/* Crée la deuxième table de sortie dans un DATA step distinct */
10
DATA mycas.two;
11
SET sashelp.cars;
12
RUN;
13
14
/* Vérification des tables créées */
15
PROC CASUTIL incaslib='casuser'; list tables; RUN;
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!
/* Établit une connexion CAS */
libname mycas cas s_port=10000 s_host='localhost' caslib='casuser' s_caslib='casuser';
/* Crée des données temporaires dans work */
data work.temp_one;
set sashelp.cars;
where make = 'Audi';
run;
data work.temp_two;
set sashelp.cars;
where make = 'BMW';
run;
/* Utilise PROC COPY pour transférer séquentiellement les tables vers CAS */
/* Cela est géré en interne par SAS pour éviter les conflits */
proc copy in=work out=mycas;
select temp_one temp_two;
run;
/* Vérification des tables créées */
proc casutil incaslib='casuser'; list tables; run;
/* Nettoyage */
proc casutil incaslib='casuser'; droptable 'temp_one' 'temp_two'; run;
libname mycas clear;
libname work clear;
1
/* Établit une connexion CAS */
2
LIBNAME mycas cas s_port=10000 s_host='localhost' caslib='casuser' s_caslib='casuser';
3
4
/* Crée des données temporaires dans work */
5
DATA work.temp_one;
6
SET sashelp.cars;
7
where make = 'Audi';
8
RUN;
9
10
DATA work.temp_two;
11
SET sashelp.cars;
12
where make = 'BMW';
13
RUN;
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 */
17
PROC COPY in=work out=mycas;
18
select temp_one temp_two;
19
RUN;
20
21
/* Vérification des tables créées */
22
PROC CASUTIL incaslib='casuser'; list tables; RUN;
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!
/* Établit une connexion CAS avec une taille de transfert optimisée */
/* Utiliser une valeur plus grande pour WRITETRANSFERSIZE */
libname mycas cas s_port=10000 s_host='localhost' caslib='casuser' s_caslib='casuser' writetransfersize=1m;
/* Crée une table de grande taille dans CAS */
data mycas.large_table;
do _n_ = 1 to 100000;
var1 = ranuni(0);
var2 = rand('NORMAL');
output;
end;
run;
/* Vérification de la table créée */
proc casutil incaslib='casuser'; list tables; run;
proc print data=mycas.large_table(obs=5); run;
/* Nettoyage */
proc casutil incaslib='casuser'; droptable 'large_table'; run;
libname mycas clear;
1
/* Établit une connexion CAS avec une taille de transfert optimisée */
2
/* Utiliser une valeur plus grande pour WRITETRANSFERSIZE */
3
LIBNAME 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 */
6
DATA mycas.large_table;
7
DO _n_ = 1 to 100000;
8
var1 = ranuni(0);
9
var2 = rand('NORMAL');
10
OUTPUT;
11
END;
12
RUN;
13
14
/* Vérification de la table créée */
15
PROC CASUTIL incaslib='casuser'; list tables; RUN;
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.