GoogleSQL para BigQuery admite esbozos de datos. Un esbozo de datos es un resumen compacto de una agregación de datos. Incorpora toda la información necesaria para extraer un resultado de agregación, continuar una agregación de datos o combinarlo con otro esbozo, lo que permite volver a realizar la agregación.
El cálculo una métrica con un esbozo es mucho menos costoso que el cálculo un valor exacto. Si tu procesamiento es demasiado lento o requiere demasiado almacenamiento temporal, usa esbozos para reducir el tiempo de consulta y los recursos.
Además, solo se puede calcular cardinalidades (como la cantidad de usuarios distintos) o cuantiles (como la mediana de duración de las visitas) sin esbozos mediante la ejecución de trabajos en los datos sin procesar, debido a que los datos ya agregados no se pueden combinar más.
Considera una tabla con los siguientes datos:
Producto | Número de usuarios | Mediana de duración de las visitas |
---|---|---|
Producto A | 500 millones | 10 minutos |
Producto B | 20 millones | 2 minutos |
No es posible calcular la cantidad total de usuarios de ambos productos porque no se sabe cuántos usuarios usaron ambos productos en la tabla.
Una solución es almacenar esbozos en la tabla. Cada esbozo es una representación aproximada y compacta de una propiedad de entrada específica, como la cardinalidad, que puedes almacenar, combinar (o volver a agregar) y consultar para obtener resultados casi exactos. En el ejemplo anterior, puedes estimar la cantidad de usuarios distintos del producto A y el producto B si creas y combinas (vuelves a agregar) los esbozos de cada producto. También puedes estimar la mediana de duración de las visitas con esbozos cuantiles que, de igual modo, puedes combinar y consultar.
Debido a que un esbozo tiene compresión con pérdida de los datos originales, ingresa un error estadístico que se representa mediante un límite de error o un intervalo de confianza (IC). Para la mayoría de las aplicaciones, esta incertidumbre es pequeña. Por ejemplo, un esbozo típico de recuento de cardinalidad tiene un error relativo de alrededor del 1% en el 95% de todos los casos. Un esbozo intercambia cierta exactitud o precisión por cálculos más rápidos y menos costosos, y menos almacenamiento.
En resumen, un esbozo tiene las siguientes propiedades principales:
- Representa una agregación aproximada para una métrica específica
- Es compacto
- Es una forma serializada de una estructura de datos sublineal en memoria
- Tiene, por lo general, un tamaño fijo y es asintóticamente más pequeño que la entrada
- Puede introducir un error estadístico que se determina con un nivel de precisión
- Se puede combinar con otros esbozos para resumir la unión de los conjuntos de datos subyacentes
Vuelve a agregar con la combinación de esbozos
Los esbozos te permiten almacenar y combinar datos para obtener una agregación eficiente. Esto hace que los esbozos sean muy útiles para las vistas materializadas de los conjuntos de datos. Puedes combinar los esbozos a fin de elaborar un resumen de varios flujos de datos basados en esbozos parciales creados para cada flujo.
Por ejemplo, si creas un esbozo para la cantidad estimada de usuarios distintos por día y, luego, combinas los esbozos diarios, puedes obtener la cantidad de usuarios distintos durante los últimos siete días. Volver a agregar los esbozos diarios combinados te ayuda a evitar leer la entrada completa del conjunto de datos.
La agregación de esbozos también es útil en el procesamiento analítico en línea (OLAP). Puedes combinar los esbozos para crear un resumen de un cubo de OLAP, en el que el esbozo resume los datos en una o más dimensiones específicas del cubo. Las agregaciones de OLAP no son posibles con recuentos distintos verdaderos.
Integración de esbozos
Puedes integrar esbozos en otros sistemas. Por ejemplo, puedes compilar esbozos en aplicaciones externas, como Dataflow o Apache Spark y consumirlos en GoogleSQL o viceversa.
Además de GoogleSQL, puedes usar esbozos con los siguientes lenguajes de programación:
- C++
- Go
- Java
- Python
Estima la cardinalidad sin eliminaciones
Si necesitas estimar la cardinalidad y no necesitas la capacidad de borrar elementos del esbozo, usa un esbozo de HLL++.
Por ejemplo, para obtener la cantidad de usuarios únicos que usaron de forma activa un producto en un mes determinado (métricas de MAU o 28DAU), usa un esbozo de HLL++.
Esbozos de HLL++
HyperLogLog++ (HLL++) es un algoritmo de esbozos para estimar la cardinalidad. HLL++ se basa en el documento HyperLogLog en la práctica, en el que ++ denota los aumentos realizados al algoritmo HyperLogLog.
La cardinalidad es el número de elementos distintos en la entrada de un esbozo. Por ejemplo, puedes usar un esbozo de HLL++ para obtener la cantidad de usuarios únicos que abrieron una aplicación.
HLL++ estima cardinalidades muy pequeñas y muy grandes. HLL++ incluye una función hash de 64 bits, una representación dispersa que reduce los requisitos de memoria para las estimaciones de cardinalidad pequeña y una corrección del sesgo empírico en las estimaciones de cardinalidad pequeñas.
Precisión
Los esbozos de HLL++ admiten la precisión personalizada. En la siguiente tabla se muestran los valores de precisión admitidos, el tamaño máximo de almacenamiento y el intervalo de confianza (IC) de los niveles de precisión típicos:
Precisión | Tamaño máximo de almacenamiento | IC 65% | IC 95% | IC 99% |
---|---|---|---|---|
10 | 1 KiB + 28 B | ±3.25% | ±6.50% | ±9.75% |
11 | 2 KiB + 28 B | ±2.30% | ±4.60% | ±6.89% |
12 | 4 KiB + 28 B | ±1.63% | ±3.25% | ±4.88% |
13 | 8 KiB + 28 B | ±1.15% | ±2.30% | ±3.45% |
14 | 16 KiB + 30 B | ±0.81% | ±1.63% | ±2.44% |
15 (predeterminada) | 32 KiB + 30 B | ±0.57% | ±1.15% | ±1.72% |
16 | 64 KiB + 30 B | ±0.41% | ±0.81% | ±1.22% |
17 | 128 KiB + 30 B | ±0.29% | ±0.57% | ±0.86% |
18 | 256 KiB + 30 B | ±0.20% | ±0.41% | ±0.61% |
19 | 512 KiB + 30 B | ±0.14% | ±0.29% | ±0.43% |
20 | 1,024 KiB + 30 B | ±0.10% | ±0.20% | ±0.30% |
21 | 2,048 KiB y 32 B | ±0.07% | ±0.14% | ±0.22% |
22 | 4,096 KiB + 32 B | ±0.05% | ±0.10% | ±0.15% |
23 | 8,192 KiB y 32 B | ±0.04% | ±0.07% | ±0.11% |
24 | 16,384 KiB + 32 B | ±0.03% | ±0.05% | ±0.08% |
Puedes definir la precisión de un esbozo de HLL++ cuando lo inicializas con la función HLL_COUNT.INIT
.
Eliminación
No puedes borrar los valores de un esbozo de HLL++.
Detalles adicionales
Para obtener la lista de funciones que puedes usar con los esbozos de HLL++, consulta Funciones de HLL++.
Funciones de agregación aproximada
Como alternativa a funciones de aproximación específicas basadas en esbozos, GoogleSQL proporciona funciones de agregación aproximada predefinidas. Estas funciones de agregación aproximada admiten esbozos para estimaciones comunes, como recuento distinto, cuantiles y recuento superior, pero no admiten la precisión personalizada. Tampoco exponen ni almacenan el esbozo para su agregación, como otros tipos de esbozos. Las funciones de agregación aproximadas están diseñadas para ejecutar consultas rápidas basadas en esbozos sin una configuración detallada.
Para obtener una lista de las funciones de agregación aproximada que puedes usar con la aproximación basada en esbozos, consulta Funciones de agregación aproximada.