?>Array ( [lang] => fr [id] => 188 ) Scénario Performance : Ingestion de données IoT volumineuses avec partitionnement et promotion - WeAreCAS
table addTable

Scénario Performance : Ingestion de données IoT volumineuses avec partitionnement et promotion

Scénario de test & Cas d'usage

Contexte Métier

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 doivent être chargées en continu dans CAS. Le chargement doit être performant : la table doit être partitionnée par machine, compressée pour économiser la mémoire, et promue avec une portée globale pour être accessible par un dashboard de supervision en temps réel (une autre session CAS).
Préparation des Données

Génération d'une table SAS locale volumineuse (`WORK.SENSOR_DATA`) simulant 200 000 relevés de capteurs pour 4 machines différentes.

Copié !
1DATA WORK.SENSOR_DATA;
2 FORMAT TIMESTAMP datetime20.;
3 DO ID_MACHINE = 'MACHINE_A', 'MACHINE_B', 'MACHINE_C', 'MACHINE_D';
4 DO i = 1 to 50000;
5 TIMESTAMP = dhms(today(), 0, 0, 0) + i * 0.5;
6 TEMPERATURE = 80 + rand('Normal', 0, 5);
7 PRESSURE = 1013 + rand('Uniform') * 10;
8 OUTPUT;
9 END;
10 END;
11RUN;

Étapes de réalisation

1
Chargement des données volumineuses avec `addTable`, en spécifiant le partitionnement par `ID_MACHINE`, la compression, l'ordonnancement par `TIMESTAMP` et la promotion de la table dans une caslib globale (ex: Public).
Copié !
1PROC CAS;
2 TABLE.addTable /
3 caslib='Public',
4 TABLE={name='IOT_RAW_DATA', replace=TRUE, promote=TRUE, compress=TRUE, partition={'ID_MACHINE'}, orderBy={'TIMESTAMP'}},
5 indata='SENSOR_DATA';
6RUN;
7QUIT;
2
Vérification des propriétés de la table. On utilise `table.tableDetails` pour confirmer que la table est bien partitionnée, compressée et que le nombre de lignes est 200 000.
Copié !
1PROC CAS;
2 TABLE.tableDetails / caslib='Public' name='IOT_RAW_DATA';
3RUN;
4QUIT;
3
Validation du partitionnement et de l'ordonnancement en ne chargeant qu'une seule partition (celle de 'MACHINE_C') et en vérifiant que les données sont bien triées par timestamp.
Copié !
1PROC CAS;
2 TABLE.fetch /
3 TABLE={caslib='Public', name='IOT_RAW_DATA', where='ID_MACHINE=\"MACHINE_C\"'},
4 to=10;
5RUN;
6QUIT;

Résultat Attendu


Une table globale `IOT_RAW_DATA` est créée dans la caslib `Public`. Les détails de la table confirment qu'elle est partitionnée par `ID_MACHINE` et compressée. Une requête sur une partition spécifique retourne des lignes ordonnées par `TIMESTAMP`. La table est visible et requêtable depuis n'importe quelle autre session CAS.