highCardinality
Description
L'action `highCardinality` effectue une estimation aléatoire de la cardinalitéLa cardinalité représente le nombre de valeurs distinctes contenues dans une colonne. Une cardinalité élevée indique une grande diversité de données, influençant le choix des modèles dans CAS. (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émoireGemini said
Espace de stockage temporaire (RAM) utilisé par le moteur CAS pour charger et traiter les données à haute vitesse, minimisant les accès disque pour optimiser les performances de SAS Viya. 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 .
Paramètres Clés
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.
| 1 | cas; |
| 2 | caslib _all_ assign; |
| 3 | DATA 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; |
| 10 | RUN; |
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.
| 1 | PROC CAS; |
| 2 | dataPreprocess.highCardinality / |
| 3 | TABLE={name="achats", caslib="casuser"} |
| 4 | inputs={"client_id", "categorie"} |
| 5 | casOutHighCardinalityDetails={name="card_result", caslib="casuser", replace=true}; |
| 6 | QUIT; |
| 7 | PROC PRINT DATA=casuser.card_result; RUN; |
Résultat Attendu :
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`.
| 1 | PROC 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}; |
| 9 | QUIT; |