Résumés

GoogleSQL pour BigQuery est compatible avec les résumés de données. Un résumé de données est un résumé compact d'une agrégation de données. Il capture toutes les informations nécessaires pour extraire un résultat d'agrégation, pour poursuivre une agrégation de données, ou les fusionner avec une autre, ce qui permet la réagrégation.

Le calcul d'une métrique à l'aide d'un résumé est souvent beaucoup moins coûteux qu'un calcul de valeur exacte. Si votre calcul est trop lent ou nécessite trop d'espace de stockage temporaire, utilisez des résumés pour réduire le temps de requête et les ressources.

En outre, le calcul des cardinalités, telles que le nombre d'utilisateurs distincts ou les quantiles, tels que la durée moyenne des visites, sans résumé, n'est généralement possible qu'en exécutant des jobs sur les données brutes, car les données déjà agrégées ne peuvent plus être combinées.

Prenons l'exemple d'une table contenant les données suivantes :

Produit Nombre d'utilisateurs Durée moyenne d'une visite
Produit A 500 millions 10 minutes
Produit B 20 millions 2 minutes

Il n'est pas possible de calculer le nombre total d'utilisateurs des deux produits, car nous ne savons pas combien d'utilisateurs ont utilisé les deux produits dans la table.

Une solution consiste à stocker les résumés dans la table. Chaque résumé est une représentation approximative et compacte d'une propriété d'entrée particulière, telle que la cardinalité, que vous pouvez stocker, fusionner (ou réagréger) et interroger pour obtenir des résultats quasi exacts. Dans l'exemple précédent, vous pouvez estimer le nombre d'utilisateurs distincts pour les produits A et B en créant et en fusionnant (réagrégeant) les résumés de chaque produit. Vous pouvez aussi estimer la durée moyenne d'une visite avec des résumés de quantiles que vous pouvez également fusionner et interroger.

Étant donné qu'un résumé comporte une compression avec perte des données d'origine, il introduit une erreur statistique représentée par une limite d'erreur ou un intervalle de confiance (CI). Pour la plupart des applications, cette incertitude est minime. Par exemple, un résumé classique de la cardinalité compte une erreur relative d'environ 1 % dans 95 % des cas. Un résumé apporte une certaine exactitude, ou précision, les opérations de calcul sont plus rapides, moins coûteuses et utilisent moins d'espace de stockage.

En bref, un résumé comporte les propriétés suivantes :

  • Représente une agrégation approximative pour une métrique spécifique
  • Est compact
  • Est une forme sérialisée d'une structure de données sous-linéaire en mémoire
  • Généralement de taille fixe et asymptotiquement plus petite que l'entrée
  • Peut introduire une erreur statistique que vous déterminez avec un niveau de précision
  • Peut être fusionné avec d'autres résumés pour résumer l'union des ensembles de données sous-jacents

Réagrégation avec la fusion de résumés

Les résumés vous permettent de stocker et de fusionner des données pour une réagrégation efficace. Cela rend les résumés particulièrement utiles pour les vues matérialisées d'ensembles de données. Vous pouvez fusionner des résumés pour créer un résumé de plusieurs flux de données basés sur des résumés partiels créés pour chaque flux.

Par exemple, si vous créez un résumé pour le nombre estimé d'utilisateurs distincts chaque jour, vous pouvez obtenir le nombre d'utilisateurs distincts au cours des sept derniers jours en fusionnant des résumés quotidiens. La réagrégation des résumés quotidiens fusionnés vous permet d'éviter la lecture de l'entrée complète de l'ensemble de données.

La réagrégation de résumé est également utile dans le traitement analytique en ligne (OLAP). Vous pouvez fusionner des résumés pour créer un cumul d'un cube OLAP, où le résumé récapitule les données avec une ou plusieurs dimensions spécifiques du cube. Les cumuls OLAP ne sont pas possibles avec des décomptes distincts réels.

Intégration de résumé

Vous pouvez intégrer des résumés à d'autres systèmes. Par exemple, vous pouvez créer des résumés dans des applications externes, telles que Dataflow ou Apache Spark, et les utiliser dans GoogleSQL ou inversement.

En plus du langage GoogleSQL, vous pouvez utiliser des résumés avec les langages de programmation suivants :

  • C++
  • Go
  • Java
  • Python

Estimer la cardinalité sans suppression

Si vous devez estimer la cardinalité et qu'il n'est pas nécessaire de supprimer les éléments du résumé, utilisez un résumé HLL++.

Par exemple, pour obtenir le nombre d'utilisateurs uniques qui ont activement utilisé un produit au cours d'un mois donné (métriques UAM ou 28DAU), utilisez un résumé HLL++.

Résumés HLL++

HyperLogLog++ (HLL++) est un algorithme de résumé permettant d'estimer la cardinalité. HLL++ est basé sur l'article HyperLogLog dans la pratique, où ++ désigne les augmentations apportées à l'algorithme HyperLogLog.

La cardinalité correspond au nombre d'éléments distincts dans l'entrée d'un résumé. Par exemple, vous pouvez utiliser un résumé HLL++ pour obtenir le nombre d'utilisateurs uniques qui ont ouvert une application.

HLL++ estime des cardinalités très petites ou très volumineuses. L'algorithme HLL++ inclut une fonction de hachage 64 bits, une représentation creuse pour réduire les besoins en mémoire, ainsi que la correction de biais empirique pour les faibles estimations de cardinalité.

Les résumés HLL++ sont compatibles avec la précision personnalisée. Le tableau suivant indique les valeurs de précision acceptées, la taille de stockage maximale et l'intervalle de confiance (CI) des niveaux de précision types :

Précision Taille maximale de l'espace de stockage IC à 65 % IC à 95 % IC à 99 %
10 1 Kio + 28 octets ±3,25 % ±6,50 % ±9,75 %
11 2 Kio + 28 octets ±2,30 % ±4,60 % ±6,89 %
12 4 Kio + 28 octets ±1,63 % ±3,25 % ±4,88 %
13 8 Kio + 28 octets ±1,15 % ±2,30 % ±3,45 %
14 16 Kio + 30 octets ±0,81 % ±1,63 % ±2,44 %
15 (par défaut) 32 Kio + 30 octets ±0,57 % ±1,15 % ±1,72 %
16 64 Kio + 30 octets ±0,41 % ±0,81 % ±1,22 %
17 128 Kio + 30 octets ±0,29 % ±0,57 % ±0,86 %
18 256 Kio + 30 octets ±0,20 % ±0,41 % ±0,61 %
19 512 Kio + 30 octets ±0,14 % ±0,29 % ±0,43 %
20 1 024 Kio + 30 octets ±0,10 % ±0,20 % ±0,30 %
21 2 048 Kio + 32 octets ±0,07 % ±0,14 % ±0,22 %
22 4 096 Kio + 32 octets ±0,05 % ±0,10 % ±0,15 %
23 8 192 Kio + 32 octets ±0,04 % ±0,07 % ±0,11 %
24 16 384 Kio + 32 octets ±0,03 % ±0,05 % ±0,08 %

Vous pouvez définir la précision d'un résumé HLL++ lorsque vous l'initialisez à l'aide de la fonction HLL_COUNT.INIT.

Vous ne pouvez pas supprimer des valeurs d'un résumé HLL++.

Pour obtenir la liste des fonctions que vous pouvez utiliser avec les résumés HLL++, consultez la page Fonctions HLL++.

Fonctions d'agrégation approximative

À la place des fonctions HLL++, D3A ou KLL spécifiques pour une approximation basée sur des résumés, GoogleSQL fournit des fonctions d'agrégation approximative prédéfinies. Ces fonctions d'agrégation approximative acceptent des résumés pour les estimations courantes telles que le décompte distinct, les quantiles et le décompte principal, mais ils ne permettent pas une précision personnalisée. Ils ne permettent pas non plus d'exposer et de stocker les résumés à des fins de réagrégation, comme les autres types de résumés. Les fonctions d'agrégation approximative sont conçues pour exécuter des requêtes rapides basées sur des résumés sans configuration détaillée.

Pour obtenir la liste des fonctions d'agrégation approximative que vous pouvez utiliser avec les approximations basées sur les résumés, consultez la section Fonctions d'agrégation approximative.