Der Fehler 'The call to Cloud Analytic Services failed' wird in der Regel durch eine Prozedur oder einen DATA-Schritt verursacht, der versucht, mehrere Ausgabetabellen unter Verwendung desselben CAS-Librefs für Eingabe und Ausgabe zu erstellen. Die CAS LIBNAME Engine kann nicht mehrere Ausgabeaktionen gleichzeitig über einen einzigen Libref verarbeiten. Dies ist besonders auffällig, wenn die Option WRITETRANSFERSIZE auf einen kleinen Wert eingestellt ist, was die Konflikte verschärft. Die vorgeschlagenen Lösungen umfassen die Verwendung separater DATA- oder PROC-Schritte für jede Ausgabetabelle oder die Verwendung einer anderen Daten-Engine für die Erstellung von Zwischen- oder Endergebnistabellen.
Datenanalyse
Type : CREATION_INTERNE
Die Beispiele verwenden generierte Daten (SASHELP.CARS) oder Datalines, um die Autonomie des Codes zu gewährleisten.
1 Codeblock
DATA STEP Data
Erklärung : Dieses Beispiel zeigt das genaue Szenario, das den in der Dokumentation beschriebenen Fehler verursacht. Ein einziger DATA-Schritt versucht, gleichzeitig zwei Tabellen ('one' und 'two') in denselben CAS-Libref ('mycas') zu schreiben. Die CAS LIBNAME Engine, insbesondere mit einem künstlich kleinen 'writetransfersize', kann mehrere gleichzeitige Ausgabeströme auf diese Weise nicht verwalten, was zum Fehlschlag des Aufrufs von Cloud Analytic Services führt. Die Option `writetransfersize=1k` wird verwendet, um den Fehler in einer Testumgebung wahrscheinlicher zu machen.
Kopiert!
/* É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) */
Erklärung : Dieses Beispiel veranschaulicht die einfachste Lösung für das vorherige Problem: Die Erstellung der Ausgabetabellen wird in mehrere sequentielle DATA-Schritte aufgeteilt. Jeder DATA-Schritt schreibt eine einzige Tabelle in den CAS-Libref, wodurch gleichzeitige Zugriffskonflikte vermieden werden und die CAS LIBNAME Engine die Anfragen einzeln verarbeiten kann. Dieser Ansatz wird für seine Klarheit und Konformität mit bewährten Verfahren empfohlen.
Kopiert!
/* É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;
Erklärung : Diese erweiterte Lösung verwendet die PROC COPY-Prozedur, um mehrere Tabellen aus einer temporären SAS-Bibliothek (WORK) in den CAS-Libref zu übertragen. PROC COPY verwaltet intern die sequentielle Übertragung der Tabellen und vermeidet so das Konfliktproblem, das bei der direkten Schreibweise mehrerer Tabellen in einem einzigen DATA-Schritt beobachtet wurde. Dies ist eine effiziente Methode, um die Datenübertragung zu konsolidieren und gleichzeitig die Einschränkungen der CAS LIBNAME Engine zu berücksichtigen.
Kopiert!
/* É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;
Erklärung : Dieses Beispiel konzentriert sich auf eine bessere Verwaltung großer Datenübertragungen nach CAS mithilfe der Option `WRITETRANSFERSIZE`. Anstatt eines kleinen Werts, der Leistungs- oder Parallelitätsprobleme verschärfen kann, wird ein größerer Wert (hier 1M für 1 MB) verwendet, um die Übertragung zu optimieren. Obwohl Beispiel 1 gezeigt hat, wie ein kleiner Wert in bestimmten Szenarien Fehler verursachen kann, ist ein geeigneter Wert für `WRITETRANSFERSIZE` entscheidend für die Effizienz von CAS-Operationen, insbesondere für die Ingestion großer Datenmengen. Dieses Beispiel erstellt eine einzige große Tabelle, um die Leistung einer optimierten Übertragung zu veranschaulichen.
Kopiert!
/* É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;
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.
SAS und alle anderen Produkt- oder Dienstleistungsnamen von SAS Institute Inc. sind eingetragene Marken oder Marken von SAS Institute Inc. in den USA und anderen Ländern. ® zeigt die Registrierung in den USA an. WeAreCAS ist eine unabhängige Community-Site und nicht mit SAS Institute Inc. verbunden.
Diese Website verwendet technische und analytische Cookies, um Ihre Erfahrung zu verbessern.
Mehr erfahren.