Veröffentlicht am :
Fehlerbehebung CREATION_INTERNE

Fehlerbehebung bei CAS LIBNAME Engine-Fehlern

Dieser Code ist auch verfügbar auf: English Español Français
Wartet auf Validierung
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!
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 Codeblock
DATA STEP Data
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!
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 Codeblock
PROC COPY Data
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!
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 Codeblock
DATA STEP Data
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!
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;
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.