dataPreprocess

highCardinality

##set_datapreprocess

Description

L'action `highCardinality` effectue une estimation aléatoire de la cardinalité (c'est-à-dire le nombre de valeurs distinctes) en utilisant l'algorithme HyperLogLogUn algorithme probabiliste qui estime le nombre d'éléments uniques (cardinalité) dans de grands jeux de données en utilisant très peu de mémoire, avec une erreur type d'environ 2%.++. C'est l'outil parfait pour éviter de faire fondre la mémoire de votre serveur CASMoteur analytique "in-memory" de SAS Viya. Il traite les données en parallèle (MPP) sur plusieurs nœuds pour offrir une puissance de calcul massive et une exécution ultra-rapide des actions. lorsque vous analysez des colonnes contenant des millions de niveaux uniques (oui, on vous voit avec vos identifiants de transactions et vos adresses IP !). Pour plus de détails techniques, n'hésitez pas à consulter la documentation officielle .

Syntaxe Officielle
proc cas;
dataPreprocess.highCardinality /
table={name="nom_table", caslib="nom_caslib"}
casOutHighCardinalityDetails={name="table_sortie", caslib="nom_caslib", replace=true}
inputs={"var1", "var2"}
nRegisterBits=10
includeMissingGroup=false;
quit;

Paramètres Clés

Nom du paramètre Description
table Spécifie la table d'entrée en mémoire CAS contenant les données à analyser. Ce paramètre est requis.
casOutHighCardinalityDetails Spécifie les paramètres de la table de sortie qui contiendra les estimations détaillées de la cardinalité. Alias: casout.
inputs Spécifie la liste des variables à analyser. Si ce n'est pas spécifié, l'action tentera d'analyser toutes les variables de la table. Alias: vars.
nRegisterBits Exposant qui détermine le nombre de registres à allouer pour l'estimateur HyperLogLog++. La valeur doit être comprise entre 5 et 16 (par défaut 10). Plus le chiffre est élevé, plus l'estimation sera précise... mais cela consommera davantage de RAM !
includeMissingGroup Si défini sur True, les valeurs manquantes seront comptabilisées comme un groupe ou un niveau distinct lors de l'estimation de la cardinalité. Par défaut: False.
freq Spécifie une variable de fréquence numérique si vos données sont déjà pré-agrégées. Alias: frequency.
weight Spécifie une variable de pondération (poids) numérique pour l'analyse.
outputTableOptions Options pour gérer la restitution des tables de résultats. Permet par exemple d'utiliser `forceTableReturn=True` pour afficher les résultats même si une table de sortie a été demandée. Alias: tblOpts.

Préparation des données

Génération de données de test avec une forte cardinalité

Nous allons créer une table en mémoire CAS contenant 100 000 lignes avec des identifiants clients générés aléatoirement et quelques catégories.

1cas;
2caslib _all_ assign;
3DATA casuser.achats;
4 call streaminit(123);
5 DO i = 1 to 100000;
6 client_id = int(rand("Uniform") * 50000);
7 categorie = choosec(int(rand("Uniform") * 3) + 1, 'A', 'B', 'C');
8 OUTPUT;
9 END;
10RUN;

Exemples d'utilisation

Estimation basique de la cardinalité

Un appel minimaliste de l'action pour estimer rapidement le nombre de clients uniques et de catégories dans notre grande table d'achats.

1PROC CAS;
2 dataPreprocess.highCardinality /
3 TABLE={name="achats", caslib="casuser"}
4 inputs={"client_id", "categorie"}
5 casOutHighCardinalityDetails={name="card_result", caslib="casuser", replace=true};
6QUIT;
7PROC PRINT DATA=casuser.card_result; RUN;
Résultat Attendu :
L'action génère instantanément une table `card_result` affichant une cardinalité estimée très proche de 50 000 pour `client_id` et de 3 pour `categorie`.
Haute précision et affichage forcé des résultats

Nous augmentons ici la précision de l'algorithme avec `nRegisterBits=16` (la limite maximale), incluons les valeurs manquantes, et nous forçons l'affichage du résultat dans le journal via `outputTableOptions`.

1PROC CAS;
2 dataPreprocess.highCardinality /
3 TABLE={name="achats", caslib="casuser"}
4 inputs={"client_id", "categorie"}
5 nRegisterBits=16
6 includeMissingGroup=true
7 casOutHighCardinalityDetails={name="card_result_precis", caslib="casuser", replace=true}
8 outputTableOptions={forceTableReturn=true};
9QUIT;
Résultat Attendu :
Le tableau récapitulatif de la cardinalité s'affiche directement dans SAS Studio. L'estimation pour `client_id` est extrêmement précise (marge d'erreur minime) grâce aux 16 bits de registre alloués, ce qui est idéal pour des audits de données stricts.