highCardinality
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 .
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; |