Publié le :
Gestion de Données CREATION_INTERNE

Copie d'une Table CAS

Ce code est également disponible en : Deutsch English
En attente de validation
L'action 'table.copyTable' du jeu d'actions 'table' est utilisée pour dupliquer une table CAS en mémoire. Elle prend en paramètre la table source ('table') et les options de la table de sortie ('casOut'). Les options de 'casOut' permettent de définir le nom de la nouvelle table ('name'), de spécifier si elle doit remplacer une table existante ('replace'), d'indiquer la caslib cible ('caslib'), et de contrôler la visibilité globale de la table ('promote'). Cette action est essentielle pour les opérations de préparation des données, la création de sauvegardes ou la duplication de tables pour des analyses différentes sans affecter l'originale.
Analyse des données

Type : CREATION_INTERNE


Les exemples utilisent des données générées directement via des blocs DATA STEP avec des 'datalines' ou la table 'CARS' fournie par SASHELP, chargées en mémoire CAS.

1 Bloc de code
DATA STEP / PROC CAS Data
Explication :
Cet exemple montre l'utilisation la plus simple de 'table.copyTable'. Il crée une petite table SAS locale, la charge dans la session CAS par défaut ('casauto'), puis la copie sous un nouveau nom ('produits_copie_basique') dans la même caslib ('CASUSER'). La clause 'replace=TRUE' permet de remplacer la table si elle existe déjà.
Copié !
1/* Création d'une table SAS WORK locale */
2DATA work.produits;
3 INPUT ID $ NomProduit $ Prix;
4 DATALINES;
5 P001 Pomme 1.50
6 P002 Orange 2.00
7 P003 Banane 0.75
8 P004 Fraise 3.20
9 ;
10RUN;
11 
12/* Démarrage d'une session CAS et chargement de la table locale en mémoire CAS */
13PROC CAS; QUIT;
14CAS casauto;
15 
16PROC CAS;
17 SESSION casauto;
18 upload path="work.produits" casOut={name="produits_cas", replace=TRUE};
19RUN;
20 
21/* Copie de la table 'produits_cas' vers 'produits_copie_basique' */
22PROC CAS;
23 SESSION casauto;
24 TABLE.copyTable /
25 TABLE={name="produits_cas"},
26 casOut={name="produits_copie_basique", replace=TRUE};
27RUN;
28 
29/* Vérification de la nouvelle table */
30PROC CAS;
31 SESSION casauto;
32 TABLE.tableInfo /
33 caslib="CASUSER",
34 name="produits_copie_basique";
35RUN;
36QUIT;
2 Bloc de code
DATA STEP / PROC CAS Data
Explication :
Cet exemple démontre la copie d'une table vers une autre caslib et l'utilisation de l'option 'promote'. Une table locale est créée et chargée dans 'CASUSER'. Ensuite, une nouvelle caslib nommée 'reports' est ajoutée. La table 'ventes_cas' est copiée dans cette nouvelle caslib sous le nom 'ventes_rapport' avec 'promote=TRUE', la rendant accessible à d'autres utilisateurs ou sessions CAS. Cela illustre une gestion plus avancée des tables entre différentes caslibs.
Copié !
1/* Création d'une table SAS WORK locale */
2DATA work.ventes_region;
3 INPUT Region $ Produit $ Quantite;
4 DATALINES;
5 Nord A 100
6 Sud B 150
7 Est C 80
8 Ouest A 200
9 ;
10RUN;
11 
12/* Démarrage d'une session CAS (si non déjà active) */
13PROC CAS; QUIT;
14CAS casauto;
15 
16/* Création d'une nouvelle caslib pour la destination */
17PROC CAS;
18 SESSION casauto;
19 TABLE.addCaslib /
20 name="reports",
21 path="/tmp/cas_reports", /* Chemin physique sur le serveur CAS */
22 dataSource={srcType="path"},
23 subdirectories=TRUE,
24 replace=TRUE;
25RUN;
26 
27/* Chargement de la table locale en mémoire CAS dans CASUSER */
28PROC CAS;
29 SESSION casauto;
30 upload path="work.ventes_region" casOut={name="ventes_cas", replace=TRUE};
31RUN;
32 
33/* Copie de 'ventes_cas' vers la caslib 'reports' et promotion de la table */
34PROC CAS;
35 SESSION casauto;
36 TABLE.copyTable /
37 TABLE={name="ventes_cas", caslib="CASUSER"},
38 casOut={name="ventes_rapport", caslib="reports", promote=TRUE, replace=TRUE};
39RUN;
40 
41/* Vérification de la nouvelle table dans la caslib 'reports' */
42PROC CAS;
43 SESSION casauto;
44 TABLE.tableInfo /
45 caslib="reports",
46 name="ventes_rapport";
47RUN;
48 
49/* Nettoyage de la caslib temporaire */
50PROC CAS;
51 SESSION casauto;
52 TABLE.dropCaslib / caslib="reports", terminate=TRUE;
53RUN;
54QUIT;
3 Bloc de code
DATA STEP / PROC CAS Data
Explication :
Cet exemple illustre une copie plus avancée où des colonnes de la table sont renommées pendant l'opération de copie. La nouvelle table ('clients_processed') reçoit également un 'label' descriptif. Ceci est utile pour adapter les noms de colonnes à des conventions spécifiques ou pour clarifier le contenu des données dans la table copiée.
Copié !
1/* Création d'une table SAS WORK locale plus complexe */
2DATA work.clients_info;
3 LENGTH ClientID $8 NomClient $20 Age 8 Revenu 8;
4 INPUT ClientID NomClient $ Age Revenu;
5 FORMAT Revenu DOLLAR10.2;
6 DATALINES;
7 C001 Dupont 35 50000
8 C002 Martin 28 45000
9 C003 Dubois 42 60000
10 C004 Petit 55 75000
11 ;
12RUN;
13 
14/* Démarrage d'une session CAS (si non déjà active) */
15PROC CAS; QUIT;
16CAS casauto;
17 
18/* Chargement de la table locale en mémoire CAS */
19PROC CAS;
20 SESSION casauto;
21 upload path="work.clients_info" casOut={name="clients_original", replace=TRUE};
22RUN;
23 
24/* Copie de la table avec renommage de colonnes et ajout d'un label à la nouvelle table */
25PROC CAS;
26 SESSION casauto;
27 TABLE.copyTable /
28 TABLE={name="clients_original"},
29 casOut={name="clients_processed", replace=TRUE,
30 label="Clients avec Informations Détaillées"},
31 rename={{name="ClientID", newname="ID_Unique"},
32 {name="Revenu", newname="RevenuAnnuel"}};
33RUN;
34 
35/* Vérification de la nouvelle table et de ses colonnes */
36PROC CAS;
37 SESSION casauto;
38 TABLE.columnInfo /
39 caslib="CASUSER",
40 name="clients_processed";
41RUN;
42 
43PROC CAS;
44 SESSION casauto;
45 TABLE.fetch /
46 caslib="CASUSER",
47 TABLE={name="clients_processed"};
48RUN;
49QUIT;
4 Bloc de code
DATA STEP / PROC CAS Data
Explication :
Cet exemple met en évidence l'intégration Viya/CAS pour la gestion de grandes tables et la performance. Il crée une table SAS locale volumineuse, puis deux caslibs distinctes ('source_data' et 'destination_data'). La table est chargée dans la caslib source, puis copiée vers la caslib destination. L'utilisation de l'option 'nthreads' dans 'copyTable' est une illustration d'optimisation des performances pour les opérations sur de grandes quantités de données en mémoire distribuée CAS. Un nettoyage des caslibs temporaires est également inclus.
Copié !
1/* Création d'une table SAS WORK locale de grande taille */
2DATA work.donnees_simulees;
3 DO i = 1 TO 10000;
4 ID = i;
5 Valeur1 = RANUNI(0) * 100;
6 Valeur2 = RANNORM(0) * 10;
7 OUTPUT;
8 END;
9RUN;
10 
11/* Démarrage d'une session CAS (si non déjà active) */
12PROC CAS; QUIT;
13CAS casauto;
14 
15/* Création de deux caslibs pour la source et la destination */
16PROC CAS;
17 SESSION casauto;
18 TABLE.addCaslib /
19 name="source_data",
20 path="/tmp/cas_source", /* Chemin physique sur le serveur CAS */
21 dataSource={srcType="path"},
22 subdirectories=TRUE,
23 replace=TRUE;
24 TABLE.addCaslib /
25 name="destination_data",
26 path="/tmp/cas_destination", /* Chemin physique sur le serveur CAS */
27 dataSource={srcType="path"},
28 subdirectories=TRUE,
29 replace=TRUE;
30RUN;
31 
32/* Chargement de la table locale dans la caslib 'source_data' */
33PROC CAS;
34 SESSION casauto;
35 upload path="work.donnees_simulees" casOut={name="grande_table_source", caslib="source_data", replace=TRUE};
36RUN;
37 
38/* Copie de la table de 'source_data' vers 'destination_data' */
39/* L'option 'nthreads' peut être utilisée pour optimiser la performance sur de grandes tables */
40PROC CAS;
41 SESSION casauto;
42 TABLE.copyTable /
43 TABLE={name="grande_table_source", caslib="source_data"},
44 casOut={name="grande_table_dest", caslib="destination_data", replace=TRUE},
45 nthreads=8; /* Utilise 8 threads pour la copie (nombre à ajuster selon le système) */
46RUN;
47 
48/* Vérification de la table copiée dans la caslib de destination */
49PROC CAS;
50 SESSION casauto;
51 TABLE.tableInfo /
52 caslib="destination_data",
53 name="grande_table_dest";
54RUN;
55 
56/* Nettoyage des caslibs temporaires (optionnel) */
57PROC CAS;
58 SESSION casauto;
59 TABLE.dropCaslib /
60 caslib="source_data",
61 terminate=TRUE;
62 TABLE.dropCaslib /
63 caslib="destination_data",
64 terminate=TRUE;
65RUN;
66QUIT;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Banner
Le Conseil de l'Expert
Expert
Michael
Responsable de l'infrastructure Viya.
« Utilisez systématiquement table.copyTable avec l'option replace=TRUE dans vos scripts d'automatisation. Cela garantit que vos processus ne s'arrêtent pas en cas de présence d'une ancienne version de la table, tout en vous assurant que vous travaillez toujours sur la donnée la plus fraîche disponible en mémoire »