Agrégation approximative en SQL standard

Cet article explique les concepts relatifs à l'agrégation approximative dans BigQuery.

Qu'est-ce que l'agrégation approximative ?

L'agrégation approximative correspond à l'estimation des résultats des fonctions d'agrégation (cardinalité et quantiles, par exemple). Elle requiert moins de mémoire que les fonctions d'agrégation standards, telles que COUNT(DISTINCT ...), mais engendre une incertitude statistique. Elle s'avère par conséquent adaptée aux flux de données volumineux pour lesquels l'utilisation linéaire de la mémoire est peu pratique, ainsi que pour les données qui sont déjà approximatives. Si vous avez besoin d'obtenir des résultats précis, utilisez les fonctions d'agrégation exactes. Cet article décrit les concepts relatifs à l'agrégation approximative dans BigQuery.

Agrégation approximative à précision fixe

BigQuery accepte les fonctions d'agrégation à précision fixe pour l'estimation de la cardinalité et des quantiles. Ces fonctions s'exécutent directement sur les données d'entrée, et non sur une estimation intermédiaire des données. Elles ne permettent pas aux utilisateurs de spécifier la précision de l'estimation.

Stocker les valeurs agrégées estimées sous forme de résumés

BigQuery accepte les fonctions d'estimation de la cardinalité HyperLogLog++ pour l'évaluation du nombre de valeurs distinctes présentes dans un ensemble de données volumineux.

Ces fonctions s'appliquent à des résumés qui compressent un ensemble arbitraire en une représentation en mémoire fixe. BigQuery stocke ces résumés sous forme de données de type BYTES. Vous pouvez les fusionner pour obtenir un nouveau résumé représentant l'union des résumés d'entrée, avant d'extraire une estimation numérique finale de ce dernier.

Prenons l'exemple de la table suivante, qui répertorie des parfums de glace et le nombre de personnes déclarant aimer chacun d'eux :

Parfum Personnes
Vanille 3 945
Chocolat 1 728
Fraise 2 051

Si cette table résulte d'une agrégation, vous ne pourrez peut-être pas l'utiliser pour calculer la cardinalité. Si vous souhaitez connaître le nombre de personnes interrogées, vous ne pourrez pas utiliser SUM pour agréger la colonne People, car certaines personnes ont peut-être répondu qu'elles aiment plusieurs parfums. Par ailleurs, l'exécution d'une fonction d'agrégation sur les données brutes sous-jacentes peut nécessiter beaucoup de temps et de mémoire.

Une solution consiste à stocker une agrégation approximative, ou résumé, des données brutes. Un résumé est une synthèse des données brutes. Les résumés requièrent moins de mémoire que les données brutes. Vous pouvez extraire de ces derniers une estimation, telle que le nombre estimé d'utilisateurs uniques.

Spécifier la précision d'approximation

Les fonctions d'agrégation approximative de BigQuery qui sont basées sur des résumés vous permettent de spécifier la précision d'un résumé lors de sa création. La précision du résumé influe sur celle de l'estimation que vous pouvez extraire de ce dernier. Un haut niveau de précision requiert plus de mémoire pour le traitement des résumés ou leur stockage sur le disque. Par ailleurs, il réduit l'erreur relative liée à toute estimation extraite des résumés. Une fois que vous avez créé un résumé, vous ne pouvez le fusionner qu'avec d'autres résumés ayant la même précision.

Fusionner les résumés

Vous pouvez fusionner deux résumés ou plus pour en générer un nouveau représentant une estimation de l'union de leurs données sous-jacentes. La fonction de fusion, telle que HLL_COUNT.MERGE, renvoie l'estimation sous forme de nombre, tandis que la fonction de fusion partielle, telle que HLL_COUNT.MERGE_PARTIAL, renvoie le nouveau résumé au format BYTES. Une fusion partielle est utile si vous souhaitez réduire une table contenant déjà des résumés, mais ne voulez pas extraire d'estimation pour l'instant. Par exemple, vous pouvez utiliser cette fonction pour créer un résumé que vous fusionnerez ultérieurement avec un autre.

Extraire des estimations à partir de résumés

Une fois que vous avez stocké un résumé ou que vous en avez fusionné deux (ou plus) dans un nouveau, vous pouvez utiliser la fonction d'extraction, telle que HLL_COUNT.EXTRACT, pour renvoyer une estimation des données sous-jacentes (nombre estimé d'utilisateurs uniques, par exemple) sous forme de nombre.

Algorithmes

Cette section décrit les algorithmes d'agrégation approximative acceptés par BigQuery.

HyperLogLog++

HyperLogLog++ est une version améliorée de l'algorithme HyperLogLog permettant d'estimer le nombre de valeurs distinctes présentes dans un ensemble de données. Dans BigQuery, les fonctions d'estimation de la cardinalité HyperLogLog++ utilisent cet algorithme. HyperLogLog++ améliore l'algorithme HyperLogLog en utilisant la correction de biais afin de réduire les erreurs pour une large plage de cardinalités.

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Besoin d'aide ? Consultez notre page d'assistance.