Publicado el :
ETL CREATION_INTERNE

Crear una vista con dos tablas

Este código también está disponible en: Deutsch English Français
En espera de validación
El objetivo es mostrar cómo la acción `table.view` del conjunto de acciones 'table' se puede utilizar para crear una vista lógica a partir de dos tablas en memoria CAS. El ejemplo carga un conjunto de datos 'cars.csv', crea una tabla de resumen 'cars_summary' a través de FedSQL, y luego combina estas dos tablas en una vista llamada 'cars_view'. También se ilustran opciones como `replace=True` y el uso de prefijos para las columnas unidas (`f1_`, `d1_`). Finalmente, la información de la vista se muestra a través de `table.tableInfo` y las primeras filas se extraen con `table.fetch`, incluyendo variables calculadas. Los ejemplos adicionales exploran la creación de vistas básicas, la aplicación de filtros y columnas calculadas, la integración de datos categorizados y la gestión de errores durante la creación de vistas.
Análisis de datos

Type : CREATION_INTERNE


Los ejemplos utilizan datos CSV cargados desde una URL support.sas.com, luego agregados o usados directamente para la creación de tablas temporales en memoria CAS, así como datos generados a través de `datalines`.

1 Bloque de código
DATA STEP / table.view Data
Explicación :
Este ejemplo crea dos pequeñas tablas en memoria CAS utilizando pasos DATA y `datalines`. Luego, utiliza la acción `table.view` para crear una vista llamada `simple_view` uniendo `table1` y `table2` por la columna `ID`. Los alias `t1` y `t2` se utilizan para prefijar las columnas en la vista. Finalmente, muestra la información y las primeras filas de la vista.
¡Copiado!
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 Bloque de código
DATA STEP / table.view Data
Explicación :
Este ejemplo extiende el caso básico añadiendo un filtro (`where='t2_Score > 80'`) para incluir solo las filas donde la puntuación es superior a 80. También introduce una columna calculada `FullInfo` utilizando `computedVarsProgram` que concatena la información del nombre y la puntuación. El comando `table.fetch` selecciona luego variables específicas, incluida la variable calculada.
¡Copiado!
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 Bloque de código
PROC HTTP / PROC CAS / FedSQL
Explicación :
Este ejemplo carga el conjunto de datos 'cars.csv'. Luego crea una tabla agregada `cars_summary_with_category` utilizando `fedSql.execDirect`. Esta tabla agrega los datos por `drivetrain` y por una `Weight_Category` derivada dinámicamente a través de una instrucción `CASE` SQL. La vista `advanced_cars_view` se crea luego uniendo `cars_raw` y esta nueva tabla agregada por la columna `Drivetrain`. Se añade una columna calculada `FullCarInfo` para combinar varias informaciones textuales.
¡Copiado!
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 Bloque de código
DATA STEP / table.view Data
Explicación :
Este ejemplo crea una `existing_table` simple. Luego, intenta deliberadamente crear una vista (`error_view`) uniendo `existing_table` con una `non_existent_table`. Dado que `non_existent_table` no existe, la acción `table.view` fallará, demostrando así un escenario de error. Los errores se registrarán en el log de SAS/CAS. El intento posterior de acceder a `error_view` con `table.tableInfo` también resultará en un error, confirmando que la vista no ha sido creada. La tabla `existing_table` se elimina a continuación.
¡Copiado!
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;
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.
Información de copyright : Copyright © SAS Institute Inc. All Rights Reserved