Publié le :
Gestion des données CREATION_INTERNE

Détails de Table (tableDetails Action)

Ce code est également disponible en : Deutsch English Español
En attente de validation
Cette fonctionnalité est cruciale pour la surveillance et l'optimisation des performances des tables en mémoire dans un environnement SAS© Viya. Elle fournit une vue d'ensemble de la structure interne et de l'occupation mémoire d'une table CAS. Les paramètres permettent de contrôler le niveau de granularité des informations (sommaire, par nœud, ou par partition) et d'inclure des détails sur l'utilisation de la mémoire. Il est possible de spécifier la bibliothèque CAS (caslib) où réside la table et de limiter la quantité d'informations retournée par nœud pour les très grandes tables distribuées, ce qui est particulièrement utile pour les administrateurs et les développeurs pour comprendre l'état des données en mémoire.
Analyse des données

Type : CREATION_INTERNE


Les exemples utilisent des tables CAS créées directement via des DATA steps ou des actions 'loadTable' pour illustrer la fonctionnalité sans dépendance externe.

1 Bloc de code
PROC CAS Data
Explication :
Cet exemple démontre l'utilisation la plus simple de l'action 'tableDetails'. Il crée d'abord une petite table nommée 'simple_data' dans la caslib 'casuser', puis utilise l'action pour afficher des informations récapitulatives sur cette table, telles que le nombre de lignes et de colonnes. Par défaut, le niveau d'agrégation est 'SUM' et les informations mémoire sont incluses.
Copié !
1PROC CAS;
2 /* Crée une table simple en mémoire dans la caslib 'casuser' */
3 DATA casuser.simple_data;
4 INPUT id name $;
5 DATALINES;
61 Alice
72 Bob
83 Charlie
9;
10 RUN;
11 
12 /* Obtient les détails de base pour la table 'simple_data' */
13 TABLE.tableDetails / name="simple_data";
14QUIT;
2 Bloc de code
PROC CAS Data
Explication :
Ce cas montre comment utiliser le paramètre 'caslib' pour cibler une table spécifique si elle ne se trouve pas dans la caslib active. Une table 'product_info' est créée, et ses détails sont récupérés en précisant 'casuser' comme caslib. Il illustre également l'utilisation de l'alias 'table' pour le paramètre 'name'.
Copié !
1PROC CAS;
2 /* Crée une table 'product_info' dans la caslib 'casuser' */
3 DATA casuser.product_info;
4 INPUT product $ price;
5 DATALINES;
6Apple 1.00
7Banana 0.50
8Orange 0.75
9Mango 2.20
10;
11 RUN;
12 
13 /* Obtient les détails pour 'product_info' en spécifiant explicitement la caslib. */
14 /* Utilisation de l'alias 'table' pour le paramètre 'name'. */
15 TABLE.tableDetails /
16 TABLE="product_info",
17 caslib="casuser";
18QUIT;
3 Bloc de code
PROC CAS Data
Explication :
Cet exemple utilise une table plus volumineuse ('large_transactions') pour illustrer l'obtention de détails au niveau de chaque nœud du cluster CAS ('level="NODE"'). Il exclut également les informations détaillées sur l'utilisation de la mémoire ('showMem=FALSE') pour une sortie plus concise, ce qui est utile pour les grandes tables réparties.
Copié !
1PROC CAS;
2 /* Crée une table plus grande pour simuler la distribution sur plusieurs nœuds */
3 DATA casuser.large_transactions;
4 DO i = 1 to 10000;
5 region = IF mod(i, 4) = 0 THEN 'North'
6 ELSE IF mod(i, 4) = 1 THEN 'South'
7 ELSE IF mod(i, 4) = 2 THEN 'East'
8 ELSE 'West';
9 amount = 100 + ranuni(0) * 1000;
10 OUTPUT;
11 END;
12 RUN;
13 
14 /* Obtient les détails par nœud sans inclure les informations mémoire */
15 TABLE.tableDetails /
16 name="large_transactions",
17 caslib="casuser",
18 level="NODE",
19 showMem=FALSE;
20QUIT;
4 Bloc de code
PROC CAS / table.partition Data
Explication :
Cet exemple avancé montre comment obtenir des détails pour une table partitionnée. Il crée et partitionne une table 'raw_sales' par la variable 'Region' à l'aide de l'action 'table.partition'. Ensuite, il utilise 'tableDetails' avec 'level="PARTITION"' pour afficher les informations pour chaque partition. Le paramètre 'perNode=2' est utilisé pour limiter la quantité de détails rapportée par nœud, ce qui est utile pour gérer la taille de la sortie avec des tables très distribuées.
Copié !
1PROC CAS;
2 /* Crée une table avec des données à partitionner */
3 DATA casuser.raw_sales;
4 INPUT Date:yymmdd. Region $ Sales;
5 FORMAT Date yymmdd10.;
6 DATALINES;
72023-01-01 North 100
82023-01-01 South 150
92023-01-02 East 120
102023-01-02 West 180
112023-01-03 North 110
122023-01-03 South 160
132023-01-04 East 130
142023-01-04 West 190
152023-01-05 North 200
162023-01-05 South 210
172023-01-06 East 220
182023-01-06 West 230
19;
20 RUN;
21 
22 /* Partitionne la table par la variable 'Region' */
23 TABLE.partition /
24 name="raw_sales",
25 caslib="casuser",
26 groupBy={"Region"},
27 casOut={name="partitioned_sales_by_region", caslib="casuser", replace=true};
28 
29 /* Obtient les détails par partition, en limitant la sortie à 2 blocs par nœud */
30 TABLE.tableDetails /
31 name="partitioned_sales_by_region",
32 caslib="casuser",
33 level="PARTITION",
34 perNode=2;
35QUIT;
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.

Documentation liée : Gestion des données

Sujet / Mot-cléLien vers la ressource
DOC Définitions pour les fichiers externes fr/sampleCode/DEFINIA946
DOC Exemples : Afficher les informations sur une bibliothèque SAS fr/sampleCode/EXEMPL2677
Banner
Le Conseil de l'Expert
Expert
Michael
Responsable de l'infrastructure Viya.
« La gestion de la mémoire est le nerf de la guerre dans Cloud Analytic Services (CAS). L'action tableDetails est un outil de gouvernance indispensable pour identifier les tables qui consomment excessivement de ressources.

L'activation de showMem=TRUE révèle non seulement la taille réelle des données, mais aussi l'overhead mémoire associé. Pour les administrateurs, l'utilisation du paramètre perNode sur de très grandes tables est une 'best practice' : cela permet d'obtenir un échantillon représentatif de l'état des blocs sans saturer le journal d'exécution (log) avec des milliers de lignes, facilitant ainsi une prise de décision rapide sur le cycle de vie des données (archivage ou suppression des tables inactives). »