Funciones HyperLogLog ++ en SQL estándar

BigQuery admite las siguientes funciones agregadas aproximadas mediante el uso del algoritmo HyperLogLog++. Para obtener una explicación de cómo operan las funciones agregadas aproximadas, consulta Agregación aproximada.

HLL_COUNT.INIT

HLL_COUNT.INIT(input [, precision])

Descripción

Una función agregada que toma uno o más valores input y los agrega en un boceto HyperLogLog ++ . Cada boceto se representa con el tipo de datos BYTES. Luego, puedes combinar los bocetos con HLL_COUNT.MERGE o HLL_COUNT.MERGE_PARTIAL. Si no es necesaria la combinación, puedes extraer el recuento final de los valores distintos del boceto con HLL_COUNT.EXTRACT.

Esta función admite un parámetro opcional, precision. Este parámetro define la precisión de la estimación a costo de memoria adicional necesaria para procesar los bocetos o almacenarlos en el disco. La siguiente tabla muestra los valores de precisión permitidos, el tamaño máximo del boceto por grupo y el intervalo de confianza (IC) de las precisiones típicas:

Precisión Tamaño máx. del boceto (KiB) IC 65% IC 95% IC 99%
10 1 ±1.63% ±3.25% ±6.50%
11 2 ±1.15% ±2.30% ±4.60%
12 4 ±0.81% ±1.63% ±3.25%
13 8 ±0.57% ±1.15% ±1.72%
14 16 ±0.41% ±0.81% ±1.22%
15 (predeterminada) 32 ±0.29% ±0.57% ±0.86%
16 64 ±0.20% ±0.41% ±0.61%
17 128 ±0.14% ±0.29% ±0.43%
18 256 ±0.10% ±0.20% ±0.41%
19 512 ±0.07% ±0.14% ±0.29%
20 1,024 ±0.05% ±0.10% ±0.20%
21 2,048 ±0.04% ±0.07% ±0.14%
22 4,096 ±0.03% ±0.05% ±0.10%
23 8192 ±0.02% ±0.04% ±0.07%
24 16384 ±0.01% ±0.03% ±0.05%

Si la entrada es NULL, esta función muestra NULL.

Para obtener más información, consulta HyperLogLog en la práctica: Ingeniería algorítmica de un algoritmo de estimación de cardinalidad de última generación.

Tipos de entrada admitidos

INT64, NUMÉRICO, STRING, BYTES

Tipo de devolución

BYTES

Ejemplo

SELECT
  HLL_COUNT.INIT(respondent) AS respondents_hll,
  flavor,
  country
FROM UNNEST([
  STRUCT(1 AS respondent, "Vanilla" AS flavor, "CH" AS country),
  (1, "Chocolate", "CH"),
  (2, "Chocolate", "US"),
  (2, "Strawberry", "US")])
GROUP BY flavor, country;

HLL_COUNT.MERGE

HLL_COUNT.MERGE(sketch)

Descripción

Una función agregada que muestra la cardinalidad de varios bocetos de conjuntos HyperLogLog ++ mediante el cálculo de su unión.

Cada sketch debe tener la misma precisión y debe inicializarse en el mismo tipo. Los intentos de combinar bocetos con diferentes precisiones o para diferentes tipos dan como resultado un error. Por ejemplo, no puedes combinar un boceto inicializado a partir de datos INT64 con uno inicializado a partir de datos STRING.

Esta función ignora los valores NULL durante la combinación de bocetos. Si la combinación se realiza en cero filas o solo en valores NULL, la función muestra 0.

Tipos de entrada admitidos

BYTES

Tipo de devolución

INT64

Ejemplo

SELECT HLL_COUNT.MERGE(respondents_hll) AS num_respondents, flavor
FROM (
  SELECT
    HLL_COUNT.INIT(respondent) AS respondents_hll,
    flavor,
    country
  FROM UNNEST([
    STRUCT(1 AS respondent, "Vanilla" AS flavor, "CH" AS country),
    (1, "Chocolate", "CH"),
    (2, "Chocolate", "US"),
    (2, "Strawberry", "US")])
  GROUP BY flavor, country)
GROUP BY flavor;

HLL_COUNT.MERGE_PARTIAL

HLL_COUNT.MERGE_PARTIAL(sketch)

Descripción

Una función agregada que toma uno o más datos de entrada de sketch HyperLogLog ++ y las combina en un boceto nuevo.

Esta función muestra NULL si no hay entrada o si todas las entradas son NULL.

Tipos de entrada admitidos

BYTES

Tipo de devolución

BYTES

Ejemplo

SELECT HLL_COUNT.MERGE_PARTIAL(respondents_hll) AS num_respondents, flavor
FROM (
  SELECT
    HLL_COUNT.INIT(respondent) AS respondents_hll,
    flavor,
    country
  FROM UNNEST([
    STRUCT(1 AS respondent, "Vanilla" AS flavor, "CH" AS country),
    (1, "Chocolate", "CH"),
    (2, "Chocolate", "US"),
    (2, "Strawberry", "US")])
  GROUP BY flavor, country)
GROUP BY flavor;

HLL_COUNT.EXTRACT

HLL_COUNT.EXTRACT(sketch)

Descripción

Una función escalar que extrae una estimación de cardinalidad de un solo boceto HyperLogLog ++.

Si sketch es NULL, esta función muestra una estimación de cardinalidad de 0.

Tipos de entrada admitidos

BYTES

Tipo de devolución

INT64

Ejemplo

SELECT
  flavor,
  country,
  HLL_COUNT.EXTRACT(respondents_hll) AS num_respondents
FROM (
  SELECT
    HLL_COUNT.INIT(respondent) AS respondents_hll,
    flavor,
    country
  FROM UNNEST([
    STRUCT(1 AS respondent, "Vanilla" AS flavor, "CH" AS country),
    (1, "Chocolate", "CH"),
    (2, "Chocolate", "US"),
    (2, "Strawberry", "US")])
  GROUP BY flavor, country);

+------------+---------+-----------------+
| flavor     | country | num_respondents |
+------------+---------+-----------------+
| Vanilla    | CH      | 1               |
| Chocolate  | CH      | 1               |
| Chocolate  | US      | 1               |
| Strawberry | US      | 1               |
+------------+---------+-----------------+
¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

¿Necesitas ayuda? Visita nuestra página de asistencia.