Agregación aproximada en SQL estándar

En este tema, se explican los conceptos detrás de la agregación aproximada en BigQuery.

¿Qué es la agregación aproximada?

La agregación aproximada es la estimación de las salidas de funciones agregadas, como cardinalidad y cuantiles. La agregación aproximada requiere menos memoria que las funciones de agregación normales como COUNT(DISTINCT ...), pero también presentan incertidumbre estadística. Esto la hace apropiada para grandes flujos de datos en los cuales el uso de memoria lineal no es práctico, así como datos que ya son aproximados. Cuando se requieran resultados exactos, usa funciones agregadas exactas. En este tema, se describen los conceptos detrás de la agregación aproximada en BigQuery.

Agregación aproximada de precisión fija

BigQuery admite funciones agregadas de precisión fija para estimar cardinalidad y cuantiles. Estas funciones usan los datos de entrada de forma directa, en lugar de una estimación de los datos. Estas funciones no permiten que los usuarios especifiquen la precisión de la estimación.

Almacena valores agregados estimados como esbozos

BigQuery admite funciones de estimación de cardinalidad de HyperLogLog++ para estimar la cantidad de valores distintos en un conjunto de datos grande.

Estas funciones operan en esbozos que comprimen un conjunto arbitrario en una representación de memoria fija. BigQuery almacena estos esbozos como BYTES. Puedes fusionar los esbozos para generar uno nuevo que represente la unión de los de entrada antes de extraer una estimación numérica final a partir del esbozo.

Por ejemplo, considera la siguiente tabla, que contiene sabores de helados y la cantidad de personas que afirmaron disfrutar ese sabor:

Sabor Personas
Vainilla 3,945
Chocolate 1,728
Fresa 2,051

Si esta tabla es el resultado de una agregación, quizás no sea posible usarla para calcular la cardinalidad. Si quisieras conocer la cantidad de personas que respondieron, no podrías usar SUM para agregar la columna People, ya que algunas personas quizás respondieron de forma positiva a más de un sabor. Por otra parte, usar una función agregada en los datos sin procesar subyacentes puede consumir grandes cantidades de tiempo y memoria.

Una solución es almacenar una agregación aproximada o esbozo de los datos sin procesar. Un esbozo es un resumen de los datos sin procesar. Los esbozos requieren menos memoria que los datos sin procesar y permiten extraer estimaciones de ellos, como el número estimado de usuarios únicos.

Especifica la precisión de aproximación

Las funciones de agregación aproximada basada en esbozos de BigQuery te permiten especificar la precisión del esbozo cuando lo creas. La precisión del esbozo afecta la precisión de la estimación que puedes obtener de él. Una precisión mayor requiere memoria adicional para procesar los esbozos o almacenarlos en el disco, y reduce el error relativo de las estimaciones que extraigas de ellos. Una vez creado el esbozo, solo puedes fusionarlo con otros esbozos de la misma precisión.

Fusiona esbozos

Puedes fusionar dos o más esbozos para generar uno nuevo que representa una estimación de la unión de los datos subyacentes de cada uno. La función de fusión, como HLL_COUNT.MERGE, muestra la estimación como un número, mientras que la función de fusión parcial, como HLL_COUNT.MERGE_PARTIAL, muestra el esbozo nuevo en BYTES. Una fusión parcial es útil si deseas reducir una tabla que ya contiene esbozos, pero no deseas extraer una estimación aún. Por ejemplo, usa esta función si deseas crear un esbozo que luego fusionarás con otro.

Extrae estimaciones de los esbozos

Una vez que se almacene un esbozo o se combinen dos o más esbozos en uno nuevo, puedes usar la función de extracción, como HLL_COUNT.EXTRACT, para mostrar una estimación de los datos subyacentes en forma numérica, como la cantidad estimada de usuarios únicos.

Algoritmos

En esta sección, se describen los algoritmos de agregación aproximada que admite BigQuery.

HyperLogLog++

El algoritmo HyperLogLog++ es una mejora del algoritmo HyperLogLog para estimar los valores distintos en un conjunto de datos. En BigQuery, las funciones de estimación de cardinalidad HyperLogLog++ usan este algoritmo. El algoritmo HyperLogLog++ es una mejora del algoritmo HyperLogLog que usa la corrección de sesgo para reducir el error en un rango importante de cardinalidades.