Veröffentlicht am :
ETL CREATION_INTERNE

Eine Ansicht mit zwei Tabellen erstellen

Dieser Code ist auch verfügbar auf: English Español Français
Wartet auf Validierung
Das Ziel ist zu zeigen, wie die Aktion `table.view` des Aktionssets 'table' verwendet werden kann, um eine logische Ansicht aus zwei CAS In-Memory-Tabellen zu erstellen. Das Beispiel lädt einen 'cars.csv'-Datensatz, erstellt eine Zusammenfassungstabelle 'cars_summary' über FedSQL und kombiniert diese beiden Tabellen dann zu einer Ansicht namens 'cars_view'. Optionen wie `replace=True` und die Verwendung von Präfixen für verknüpfte Spalten (`f1_`, `d1_`) werden ebenfalls veranschaulicht. Schließlich werden die Ansichtsinformationen über `table.tableInfo` angezeigt und die ersten Zeilen mit `table.fetch`, einschließlich berechneter Variablen, extrahiert. Zusätzliche Beispiele untersuchen die Erstellung grundlegender Ansichten, die Anwendung von Filtern und berechneten Spalten, die Integration kategorisierter Daten und die Fehlerbehandlung bei der Erstellung von Ansichten.
Datenanalyse

Type : CREATION_INTERNE


Die Beispiele verwenden CSV-Daten, die von einer support.sas.com-URL geladen und dann aggregiert oder direkt zur Erstellung temporärer CAS In-Memory-Tabellen verwendet werden, sowie Daten, die über `datalines` generiert werden.

1 Codeblock
DATA STEP / table.view Data
Erklärung :
Dieses Beispiel erstellt zwei kleine In-Memory-CAS-Tabellen mithilfe von DATA-Steps und `datalines`. Anschließend wird die Aktion `table.view` verwendet, um eine Ansicht namens `simple_view` zu erstellen, die `table1` und `table2` über die Spalte `ID` verbindet. Die Aliase `t1` und `t2` werden verwendet, um die Spalten in der Ansicht zu präfixieren. Schließlich werden die Informationen und die ersten Zeilen der Ansicht angezeigt.
Kopiert!
1/* Exemple 1 : Utilisation Basique */
2/* Crée deux tables CAS simples et une vue qui les joint. */
3 
4/* Assurez-vous d'avoir une session CAS active */
5options cashost="cloud.example.com" casport=5570;
6cas casauto;
7 
8/* Création de la première table (fictif) */
9DATA casuser.table1(promote=yes);
10 INPUT ID $ Name $;
11 DATALINES;
12 101 Alice
13 102 Bob
14 103 Charlie
15 ;
16RUN;
17 
18/* Création de la deuxième table (fictif) */
19DATA casuser.table2(promote=yes);
20 INPUT ID $ Score;
21 DATALINES;
22 101 85
23 102 92
24 104 78
25 ;
26RUN;
27 
28/* Création de la vue en joignant les deux tables */
29PROC CAS;
30 TABLE.view /
31 name="simple_view",
32 replace=True,
33 tables={
34 {name="table1", as="t1"},
35 {name="table2", as="t2", keys="t1_ID=t2_ID"}
36 };
37RUN;
38 
39/* Affichage des informations de la vue */
40PROC CAS;
41 TABLE.tableInfo / TABLE="simple_view";
42RUN;
43 
44/* Affichage des premières lignes de la vue */
45PROC CAS;
46 TABLE.fetch /
47 TABLE="simple_view",
48 to=5;
49RUN;
50 
2 Codeblock
DATA STEP / table.view Data
Erklärung :
Dieses Beispiel erweitert den Grundfall, indem ein Filter (`where='t2_Score > 80'`) hinzugefügt wird, um nur Zeilen einzubeziehen, bei denen der Score größer als 80 ist. Es führt auch eine berechnete Spalte `FullInfo` unter Verwendung von `computedVarsProgram` ein, die die Namen- und Score-Informationen verkettet. Der Befehl `table.fetch` wählt dann spezifische Variablen aus, einschließlich der berechneten Variablen.
Kopiert!
1/* Exemple 2 : Options Courantes (Filtrage et sélection de colonnes) */
2/* Utilise les tables de l'exemple 1 et crée une vue filtrée avec des colonnes spécifiques. */
3 
4/* Assurez-vous d'avoir une session CAS active */
5options cashost="cloud.example.com" casport=5570;
6cas casauto;
7 
8/* Création de la première table (fictif) */
9DATA casuser.table1(promote=yes);
10 INPUT ID $ Name $;
11 DATALINES;
12 101 Alice
13 102 Bob
14 103 Charlie
15 104 David
16 ;
17RUN;
18 
19/* Création de la deuxième table (fictif) */
20DATA casuser.table2(promote=yes);
21 INPUT ID $ Score;
22 DATALINES;
23 101 85
24 102 92
25 103 78
26 104 65
27 ;
28RUN;
29 
30/* Création de la vue avec un filtre et sélection de colonnes */
31PROC CAS;
32 TABLE.view /
33 name="filtered_view",
34 replace=True,
35 tables={
36 {name="table1", as="t1"},
37 {name="table2", as="t2", keys="t1_ID=t2_ID"}
38 },
39 where="t2_Score > 80",
40 computedVarsProgram="FullInfo = t1_Name || ' (Score: ' || strip(put(t2_Score, 3.)) || ')'",
41 computedVars={"FullInfo"}
42 ;
43RUN;
44 
45/* Affichage des informations de la vue */
46PROC CAS;
47 TABLE.tableInfo / TABLE="filtered_view";
48RUN;
49 
50/* Affichage des premières lignes de la vue avec les colonnes sélectionnées */
51PROC CAS;
52 TABLE.fetch /
53 TABLE="filtered_view",
54 fetchVars={"t1_ID", "t1_Name", "t2_Score", "FullInfo"},
55 to=5;
56RUN;
3 Codeblock
PROC HTTP / PROC CAS / FedSQL
Erklärung :
Dieses Beispiel lädt den Datensatz 'cars.csv'. Anschließend wird eine aggregierte Tabelle `cars_summary_with_category` unter Verwendung von `fedSql.execDirect` erstellt. Diese Tabelle aggregiert die Daten nach `drivetrain` und einer dynamisch abgeleiteten `Weight_Category` über eine SQL-`CASE`-Anweisung. Die Ansicht `advanced_cars_view` wird dann durch Verknüpfen von `cars_raw` und dieser neuen aggregierten Tabelle über die Spalte `Drivetrain` erstellt. Eine berechnete Spalte `FullCarInfo` wird hinzugefügt, um mehrere Textinformationen zu kombinieren.
Kopiert!
1/* Exemple 3 : Cas Avancé (Table dérivée avec catégorie de poids et jointure) */
2/* Charge le jeu de données Cars, crée une table agrégée avec une catégorie de poids, puis une vue. */
3 
4/* Assurez-vous d'avoir une session CAS active */
5options cashost="cloud.example.com" casport=5570;
6cas casauto;
7 
8/* Téléchargement et chargement du fichier CSV cars.csv */
9%let DATA='http://support.sas.com/documentation/onlinedoc/viya/exampledatasets/cars.csv';
10filename t temp;
11PROC HTTP method="get" url=&DATA. out=t;
12RUN;
13%let temppath = %sysfunc(quote(%sysfunc(pathname(t))));
14 
15PROC CAS;
16 upload path=&temppath.
17 importoptions={
18 fileType="csv",
19 getNames=True
20 },
21 casout={
22 name="cars_raw",
23 replace=True
24 };
25RUN;
26 
27/* Création d'une table agrégée avec une catégorie de poids dérivée */
28PROC CAS;
29 fedSql.execDirect /
30 query="create table cars_summary_with_category{options replace=True} as
31 select
32 drivetrain,
33 (case
34 when weight <= 1500 then 'Light'
35 when weight > 1500 and weight <= 3000 then 'Medium'
36 else 'Heavy'
37 end) as Weight_Category,
38 avg(mpg_city) as Avg_MPG_City
39 from cars_raw
40 group by drivetrain, Weight_Category;";
41RUN;
42 
43/* Création de la vue en joignant cars_raw et cars_summary_with_category */
44PROC CAS;
45 TABLE.view /
46 name="advanced_cars_view",
47 replace=True,
48 tables={
49 {name="cars_raw", as="r1"},
50 {name="cars_summary_with_category", as="s1", keys="r1_Drivetrain=s1_Drivetrain"}
51 },
52 computedVarsProgram="FullCarInfo = r1_Make || ' - ' || r1_Model || ' (' || s1_Weight_Category || ')';"
53 ;
54RUN;
55 
56/* Affichage des informations de la vue */
57PROC CAS;
58 TABLE.tableInfo / TABLE="advanced_cars_view";
59RUN;
60 
61/* Affichage des premières lignes de la vue */
62PROC CAS;
63 TABLE.fetch /
64 TABLE="advanced_cars_view",
65 fetchVars={"FullCarInfo", "r1_Drivetrain", "r1_Weight", "s1_Weight_Category", "s1_Avg_MPG_City"},
66 to=5;
67RUN;
68 
4 Codeblock
DATA STEP / table.view Data
Erklärung :
Dieses Beispiel erstellt eine einfache `existing_table`. Dann versucht es absichtlich, eine Ansicht (`error_view`) zu erstellen, indem es `existing_table` mit einer `non_existent_table` verknüpft. Da `non_existent_table` nicht existiert, schlägt die Aktion `table.view` fehl und demonstriert somit ein Fehlerszenario. Die Fehler werden im SAS/CAS-Protokoll aufgezeichnet. Der nachfolgende Versuch, mit `table.tableInfo` auf `error_view` zuzugreifen, führt ebenfalls zu einem Fehler, was bestätigt, dass die Ansicht nicht erstellt wurde. Die Tabelle `existing_table` wird anschließend gelöscht.
Kopiert!
1/* Exemple 4 : Intégration Viya (Gestion d'erreur lors de la création de vue) */
2/* Tente de créer une vue avec une table inexistante et capture l'erreur. */
3 
4/* Assurez-vous d'avoir une session CAS active */
5options cashost="cloud.example.com" casport=5570;
6cas casauto;
7 
8/* Création d'une table valide pour la démonstration */
9DATA casuser.existing_table(promote=yes);
10 INPUT ID $ Value;
11 DATALINES;
12 A 10
13 B 20
14 C 30
15 ;
16RUN;
17 
18/* Tentative de création d'une vue avec une table inexistante */
19/* La vue ne sera pas créée, et une erreur sera loguée. */
20PROC CAS;
21 /* La commande 'table.view' générera une erreur si 'non_existent_table' n'existe pas. */
22 /* Dans un programme CASL plus robuste, un bloc try/catch serait utilisé. */
23 /* Pour cet exemple, l'erreur sera visible dans le log SAS/CAS. */
24 TABLE.view /
25 name="error_view",
26 replace=True,
27 tables={
28 {name="existing_table", as="e1"},
29 {name="non_existent_table", as="n1", keys="e1_ID=n1_ID"} /* Cette table n'existe pas */
30 };
31RUN; QUIT; /* La vue ne sera pas créée. */
32 
33/* Tenter d'afficher des informations sur la vue inexistante (cela générera aussi une erreur) */
34PROC CAS;
35 TABLE.tableInfo / TABLE="error_view";
36RUN; QUIT;
37 
38/* Nettoyage: suppression de la table existante */
39PROC CAS;
40 TABLE.dropTable / caslib="casuser" name="existing_table";
41RUN;
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.
Urheberrechtsinformationen : Copyright © SAS Institute Inc. All Rights Reserved