Publicado el :
ETL CREATION_INTERNE

Añadir una tabla CAS

Este código también está disponible en: English Français Deutsch Español
En espera de validación
La acción `table.append` se utiliza para combinar dos tablas CAS añadiendo el contenido de la tabla de origen a la tabla de destino. Es particularmente útil para incrementar conjuntos de datos sin tener que recargar la totalidad de la tabla de destino. Las tablas de origen y de destino deben tener estructuras compatibles para que la operación se realice correctamente, aunque CAS puede gestionar algunas diferencias de tipos o longitudes de columnas. Si las tablas no son totalmente compatibles, pueden producirse advertencias o errores. La acción se ejecuta en el contexto de una sesión CAS y puede invocarse a través de una PROC CAS en SAS©, o directamente a través de las API CASL, Lua, Python o R.
Análisis de datos

Type : CREATION_INTERNE


Los ejemplos utilizan datos generados (paso DATA con asignación directa) para crear tablas CAS temporales.

1 Bloque de código
DATA STEP / PROC CAS Data
Explicación :
Este ejemplo muestra el uso más simple de `table.append`. Se crean dos tablas, `t1` (origen) y `t2` (destino), con estructuras idénticas. La acción `table.append` se llama para añadir todas las filas de `t1` al final de `t2`. Finalmente, `proc print` se utiliza para verificar el contenido de la tabla `t2` después de la operación de adición.
¡Copiado!
1/* Préparation de l'environnement CAS */
2options cashost="cloud.example.com" casport=5570;
3cas casauto;
4LIBNAME mycas cas caslib="CASUSER(your-username)";
5 
6/* Création de la table cible (t2) */
7DATA mycas.t2;
8 LENGTH id 8 nom $10 ville $10;
9 id = 1;
10 nom = 'Alice';
11 ville = 'Paris';
12 OUTPUT;
13 id = 2;
14 nom = 'Bob';
15 ville = 'Lyon';
16 OUTPUT;
17RUN;
18 
19/* Création de la table source (t1) */
20DATA mycas.t1;
21 LENGTH id 8 nom $10 ville $10;
22 id = 3;
23 nom = 'Charlie';
24 ville = 'Marseille';
25 OUTPUT;
26RUN;
27 
28/* Ajout de la table t1 à la table t2 */
29PROC CAS;
30 TABLE.append /
31 SOURCE={caslib='CASUSER(your-username)',name='t1'}
32 target={caslib='CASUSER(your-username)',name='t2'};
33RUN;
34 
35/* Affichage de la table t2 mise à jour */
36PROC PRINT DATA=mycas.t2; RUN;
2 Bloque de código
DATA STEP / PROC CAS Data
Explicación :
Este ejemplo utiliza la acción `table.append` con tablas de estructuras ligeramente diferentes. La tabla de origen `nouveaux_clients` contiene una columna `pays` que no existe en la tabla de destino `clients`. CAS gestionará esta incompatibilidad ignorando la columna `pays` durante la adición. La opción `promote=TRUE` en la tabla de destino asegura que la tabla actualizada sea visible para todos los usuarios que tengan los permisos apropiados en la sesión CAS. La opción `noAutoPromote=FALSE` se incluye para asegurar que si se usa 'promote', prevalece sobre la promoción automática, si está desactivada por defecto.
¡Copiado!
1/* Préparation de l'environnement CAS */
2options cashost="cloud.example.com" casport=5570;
3cas casauto;
4LIBNAME mycas cas caslib="CASUSER(your-username)";
5 
6/* Création de la table cible (clients) */
7DATA mycas.clients;
8 LENGTH id 8 nom $10 age 8;
9 id = 1;
10 nom = 'Alice';
11 age = 30;
12 OUTPUT;
13RUN;
14 
15/* Création de la table source (nouveaux_clients) avec une colonne supplémentaire */
16DATA mycas.nouveaux_clients;
17 LENGTH id 8 nom $10 age 8 pays $10;
18 id = 3;
19 nom = 'Charlie';
20 age = 25;
21 pays = 'France';
22 OUTPUT;
23RUN;
24 
25/* Ajout avec l'option 'casout' et 'promote' pour rendre la table visible et 'noAutoPromote=FALSE' */
26PROC CAS;
27 TABLE.append /
28 SOURCE={caslib='CASUSER(your-username)',name='nouveaux_clients'}
29 target={caslib='CASUSER(your-username)',name='clients', promote=TRUE, noAutoPromote=FALSE};
30RUN;
31 
32/* Affichage de la table clients mise à jour */
33PROC PRINT DATA=mycas.clients; RUN;
3 Bloque de código
DATA STEP / PROC CAS Data
Explicación :
Este ejemplo avanzado demuestra cómo renombrar columnas de la tabla de origen sobre la marcha antes de la operación de adición. La tabla `commandes_recentes` tiene nombres de columnas diferentes a `commandes_historiques`. La opción `vars` en el parámetro `source` se utiliza para especificar el mapeo de las columnas (`rename='nouveau_nom'`). Esto garantiza que los datos de la fuente se alineen correctamente con la estructura del destino.
¡Copiado!
1/* Préparation de l'environnement CAS */
2options cashost="cloud.example.com" casport=5570;
3cas casauto;
4LIBNAME mycas cas caslib="CASUSER(your-username)";
5 
6/* Création de la table cible (commandes_historiques) */
7DATA mycas.commandes_historiques;
8 LENGTH id_commande 8 article $15 quantite 8 date_achat $10;
9 id_commande = 101;
10 article = 'Livre A';
11 quantite = 2;
12 date_achat = '2023-01-15';
13 OUTPUT;
14RUN;
15 
16/* Création d'une table source (commandes_recentes) avec des colonnes à renommer/filtrer */
17DATA mycas.commandes_recentes;
18 LENGTH order_id 8 product_name $15 qty 8 purchase_date $10;
19 order_id = 102;
20 product_name = 'Stylo B';
21 qty = 5;
22 purchase_date = '2023-02-20';
23 OUTPUT;
24 order_id = 103;
25 product_name = 'Cahier C';
26 qty = 1;
27 purchase_date = '2023-03-01';
28 OUTPUT;
29RUN;
30 
31/* Ajout après renommage des colonnes dans la source pour correspondre à la cible */
32PROC CAS;
33 TABLE.append /
34 SOURCE={caslib='CASUSER(your-username)', name='commandes_recentes',
35 vars={{name='order_id', rename='id_commande'},
36 {name='product_name', rename='article'},
37 {name='qty', rename='quantite'},
38 {name='purchase_date', rename='date_achat'}}
39 }
40 target={caslib='CASUSER(your-username)', name='commandes_historiques'};
41RUN;
42 
43/* Affichage de la table commandes_historiques mise à jour */
44PROC PRINT DATA=mycas.commandes_historiques; RUN;
4 Bloque de código
DATA STEP / PROC CAS Data
Explicación :
Este ejemplo explora la gestión de tipos de datos incompatibles durante la adición. Inicialmente, la tabla de origen `nouveaux_produits` tiene la columna `prix` como cadena de caracteres, mientras que la tabla de destino `produits` tiene `prix` como numérico. Un intento directo de adición con `addCols=TRUE` (que por defecto gestiona las columnas que faltan) podría fallar o resultar en una conversión implícita con pérdida de datos si los tipos son demasiado diferentes. La solución mostrada es crear un paso `DATA` intermedio (`nouveaux_produits_clean`) para convertir explícitamente la columna `prix` de la fuente a numérico antes de proceder con la adición. Esto garantiza la compatibilidad de los tipos y el éxito de la operación.
¡Copiado!
1/* Préparation de l'environnement CAS */
2options cashost="cloud.example.com" casport=5570;
3cas casauto;
4LIBNAME mycas cas caslib="CASUSER(your-username)";
5 
6/* Création de la table cible (produits) */
7DATA mycas.produits;
8 LENGTH ref 8 nom_produit $15 prix 8;
9 ref = 1;
10 nom_produit = 'Pommes';
11 prix = 1.50;
12 OUTPUT;
13RUN;
14 
15/* Création d'une table source (nouveaux_produits) avec type de données incompatible pour 'prix' */
16DATA mycas.nouveaux_produits;
17 LENGTH ref 8 nom_produit $15 prix $10;
18 ref = 2;
19 nom_produit = 'Poires';
20 prix = '2.25 EUR'; /* Prix comme chaîne de caractères */
21 OUTPUT;
22 ref = 3;
23 nom_produit = 'Bananes';
24 prix = '1.80'; /* Prix comme chaîne de caractères */
25 OUTPUT;
26RUN;
27 
28/* Tentative d'ajout avec l'option 'addCols=FALSE' pour ignorer les colonnes incompatibles, ou 'addCols=TRUE' pour tenter d'ajouter les colonnes */
29/* Dans cet exemple, nous allons d'abord illustrer un échec potentiel en omettant 'addCols' ou en l'utilisant avec 'promote=FALSE' sur source, puis une solution. */
30/* Tentative échouée si les types sont trop différents et sans gestion spécifique */
31PROC CAS;
32 TABLE.append /
33 SOURCE={caslib='CASUSER(your-username)',name='nouveaux_produits'}
34 target={caslib='CASUSER(your-username)',name='produits'}
35 addCols=TRUE; /* Tente d'ajouter de nouvelles colonnes si elles n'existent pas */
36 /* Si les colonnes existent mais ont des types incompatibles, cela peut échouer ou entraîner une conversion de type */
37RUN;
38 
39/* Pour gérer l'incompatibilité de type sur 'prix', on peut la renommer ou la supprimer/convertir dans la source */
40/* Ici, nous allons convertir 'prix' en numérique avant l'ajout */
41DATA nouveaux_produits_clean;
42 SET mycas.nouveaux_produits;
43 prix_num = INPUT(prix, BEST.); /* Convertit la chaîne en numérique */
44 drop prix;
45 rename prix_num=prix;
46RUN;
47 
48/* Ajout avec la table source nettoyée */
49PROC CAS;
50 TABLE.append /
51 SOURCE={caslib='CASUSER(your-username)',name='nouveaux_produits_clean'}
52 target={caslib='CASUSER(your-username)',name='produits'};
53RUN;
54 
55/* Affichage de la table produits mise à jour */
56PROC PRINT DATA=mycas.produits; 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.