?> addTable - WeAreCAS
table

addTable

Description

L'action `addTable` du jeu d'actions `table` est un mécanisme fondamental dans SAS Viya pour transférer des données depuis un programme client (comme Python, R, ou Lua) vers le serveur CAS. Contrairement à `loadTable` qui charge des données déjà présentes sur le serveur, `addTable` est utilisée pour créer une nouvelle table en mémoire dans CAS avec des données qui résident sur la machine cliente. C'est l'équivalent d'un 'upload' de données vers le serveur pour une analyse immédiate. Notez que cette action est généralement invoquée via des méthodes spécifiques au client, comme `add_table()` en Python (SWAT), plutôt que d'être appelée directement avec la syntaxe `proc cas`.

table.addTable <result=results> <status=rc> / append=TRUE | FALSE, caslib="string", columnar=TRUE | FALSE, commitRecords=64-bit-integer, commitSeconds=64-bit-integer, compress=TRUE | FALSE, copies=integer, descending={integer-1 <, integer-2, ...>}, label="string", maxMBytes=64-bit-integer, memoryFormat="DVR" | "INHERIT" | "STANDARD", orderBy={"variable-name-1" <, "variable-name-2", ...>}, partition={"variable-name-1" <, "variable-name-2", ...>}, promote=TRUE | FALSE, * recLen=integer, repeat=TRUE | FALSE, replace=TRUE | FALSE, table="table-name", vars={{addtablevariable-1} <, {addtablevariable-2}, ...>};
Paramètres
ParamètreDescription
appendSpécifie d'ajouter des lignes de la table à une table existante.
caslibSpécifie la caslib cible pour la table.
columnarSpécifie de créer la table en mémoire au format colonnaire.
commitRecordsSpécifie le nombre de lignes que le serveur doit recevoir avant de valider (commit) les lignes dans la table.
commitSecondsSpécifie le nombre de secondes pendant lesquelles le serveur reçoit des lignes avant de valider (commit) les lignes dans la table.
compressLorsque défini sur True, compresse la table cible.
copiesSpécifie le nombre de copies redondantes à créer pour les lignes. Des valeurs plus élevées offrent une plus grande tolérance aux pannes de nœuds mais utilisent plus de mémoire.
descendingSpécifie d'inverser l'ordre de tri pour les variables spécifiées afin que les résultats soient triés de la plus grande à la plus petite valeur. Vous devez spécifier les noms de variables dans le paramètre orderBy.
labelSpécifie le libellé à associer à la table.
maxMBytesSpécifie la quantité maximale de mémoire physique, en mégaoctets, à allouer pour la table. Au-delà de ce seuil, le serveur utilise des fichiers temporaires.
memoryFormatSpécifie le format de mémoire pour la table de sortie (STANDARD, DVR, ou INHERIT).
orderBySpécifie les noms de variables à utiliser pour ordonner les lignes au sein des partitions.
partitionSpécifie les noms de variables à utiliser comme clés de partitionnement.
promoteLorsque défini sur True, la table est ajoutée avec une portée globale (global scope), la rendant accessible à d'autres sessions CAS.
recLenParamètre obligatoire qui spécifie la longueur, en octets, d'une ligne. Ce paramètre est généralement géré par le client.
repeatLorsque défini sur True, les lignes de la table sont dupliquées sur chaque machine d'un serveur distribué.
replaceLorsque défini sur True, une table existante portant le même nom est écrasée.
tableSpécifie le nom de la table de sortie en mémoire dans CAS.
varsSpécifie les attributs pour chaque variable, tels que le nom, le type, la longueur, le format et le libellé.
Préparation des Données
Création de Données Côté Client (Python avec Pandas)

Pour utiliser l'action `addTable`, les données doivent d'abord être préparées sur la machine cliente. L'exemple suivant utilise la bibliothèque Python `pandas` pour créer un DataFrame. Ce DataFrame sera ensuite téléversé vers le serveur CAS en utilisant la méthode `add_table()` du client SWAT, qui exécute l'action `addTable` en arrière-plan.

1import pandas as pd
2import swat
3 
4# Établir la connexion au serveur CAS (remplacer avec vos informations)
5s = swat.CAS('cas-controller.example.com', 5570, 'casuser', 'caspassword')
6 
7# Créer un DataFrame pandas localement
8DATA = {
9 'ID_Produit': [101, 102, 103, 104, 105],
10 'NomProduit': ['Stylo', 'Cahier', 'Gomme', 'Règle', 'Crayon'],
11 'PrixUnitaire': [1.2, 2.5, 0.5, 1.0, 0.8],
12 'QuantiteStock': [200, 150, 300, 120, 250]
13}
14df_produits = pd.DataFrame(DATA)

Exemples

Ceci est l'utilisation la plus fondamentale. Le client SWAT pour Python fournit une méthode `add_table()` qui simplifie l'appel à l'action `addTable`. Elle prend le DataFrame, le sérialise, et l'envoie au serveur CAS pour créer une table en mémoire.

Code SAS® / CAS
Copié !
1# Le code suivant suppose que la connexion 's' et le DataFrame 'df_produits' de l'étape de création de données existent.
2r = s.add_table(table='PRODUITS_SIMPLES', caslib='CASUSER', **df_produits.to_cas_params())
3PRINT(r)
Résultat :
Une nouvelle table en mémoire nommée 'PRODUITS_SIMPLES' est créée dans la caslib 'CASUSER'. Le résultat de l'action, affiché par `print(r)`, confirme la création de la table, sa source et sa localisation.

Cet exemple utilise les paramètres `replace=True` pour écraser une table du même nom si elle existe déjà, et `promote=True` pour rendre la table accessible à toutes les autres sessions CAS (portée globale), à condition que la caslib 'Public' soit également globale.

Code SAS® / CAS
Copié !
1# Le code suivant suppose que la connexion 's' et le DataFrame 'df_produits' existent.
2r_promu = s.add_table(TABLE='PRODUITS_PROMUS', caslib='Public', replace=True, promote=True, **df_produits.to_cas_params())
3PRINT(r_promu)
Résultat :
La table 'PRODUITS_PROMUS' est créée (ou remplacée) dans la caslib 'Public' et est immédiatement visible et utilisable par d'autres utilisateurs et sessions sur le serveur CAS. Le résultat imprimé le confirmera.

L'action `addTable` permet de spécifier des options de table avancées, comme le partitionnement. Ici, nous créons une table plus grande et la partitionnons par la colonne 'Categorie' pour optimiser les requêtes qui filtrent sur cette colonne.

Code SAS® / CAS
Copié !
1# Création d'un DataFrame plus grand pour l'exemple de partitionnement
2data_large = {
3 'ID_Vente': range(1000),
4 'Categorie': ['A']*500 + ['B']*500,
5 'Montant': [x*1.5 for x in range(1000)]
6}
7df_ventes = pd.DataFrame(data_large)
8 
9# Téléversement avec partitionnement
10r_part = s.add_table(TABLE='VENTES_PARTITIONNEES', caslib='CASUSER', replace=True, partition=['Categorie'], **df_ventes.to_cas_params())
11PRINT(r_part)
Résultat :
Une table nommée 'VENTES_PARTITIONNEES' est créée. Les données sont physiquement organisées sur le serveur en fonction des valeurs de la colonne 'Categorie' ('A' et 'B'), ce qui peut considérablement accélérer les analyses groupées ou filtrées par cette colonne.

FAQ

À quoi sert l'action `addTable` ?
Comment l'action `addTable` est-elle exécutée par les clients ?
Que fait le paramètre `append` ?
À quoi sert le paramètre `caslib` ?
Que se passe-t-il si j'utilise le paramètre `replace` ?
Comment puis-je rendre une table ajoutée accessible à d'autres sessions ?
Comment puis-je spécifier l'ordre des lignes dans la table ajoutée ?
Est-il possible de partitionner la table lors de son ajout ?

Scénarios associés

Cas d'usage
Scénario Standard : Mise à jour quotidienne d'une liste de prospects marketing

Une équipe marketing reçoit chaque jour un fichier de nouveaux prospects issus d'un salon. L'objectif est de charger cette nouvelle liste dans CAS pour analyse, en écrasant syst...

Cas d'usage
Scénario Performance : Ingestion de données IoT volumineuses avec partitionnement et promotion

Une usine monitore ses équipements via des capteurs IoT qui génèrent des millions de relevés par heure. Pour optimiser les analyses de maintenance prédictive, les données brutes...

Cas d'usage
Scénario Cas Limite : Ajout de transactions financières à un référentiel existant

Un système de comptabilité gère un grand livre des transactions dans une table CAS. Chaque fin de journée, un fichier d'ajustements (corrections, nouvelles écritures) doit être ...