Todos los productos
Search
Centro de documentos

Realtime Compute for Apache Flink:APPROX_COUNT_DISTINCT

Última actualización: Sep 03, 2026

APPROX_COUNT_DISTINCT devuelve un recuento aproximado de valores distintos en una columna. Esta función sacrifica una porción pequeña y configurable de precisión para reducir significativamente la sobrecarga de estado en el nodo de agregación, lo que la hace ideal para casos de uso con alta cardinalidad, como el conteo de visitantes únicos (UV), where no se requieren recuentos exactos.

Requisito de versión: Ververica Runtime (VVR) 3.0.0 o posterior.

Cuándo utilizarla

Utilice APPROX_COUNT_DISTINCT en lugar de COUNT DISTINCT cuando se cumplan las dos condiciones a continuación:

  • La columna tiene una gran cantidad de claves distintas (por ejemplo, ID de usuario, tokens de sesión, URL). La función no ofrece ninguna ventaja de rendimiento significativa para columnas de baja cardinalidad.

  • El flujo de entrada no contiene mensajes de retractación.

Si no se cumple alguna de estas condiciones, utilice COUNT DISTINCT en su lugar.

Cómo funciona

COUNT DISTINCT debe almacenar cada clave distinta en los datos de estado para producir un resultado exacto. En columnas de alta cardinalidad, esto provoca una sobrecarga significativa de lectura y escritura que se convierte en un cuello de botella de rendimiento.

APPROX_COUNT_DISTINCT estima el recuento de valores distintos sin necesidad de almacenar cada clave. Esto elimina el cuello de botella de estado y habilita las optimizaciones miniBatch y local-global en el nodo de agregación.

El parámetro accuracy controla la precisión del cálculo. Un valor mayor indica una precisión más alta, pero también incrementa la sobrecarga de estado y reduce la ventaja de rendimiento frente a COUNT DISTINCT.

Sintaxis

APPROX_COUNT_DISTINCT(col [, accuracy])

Parámetros

Parámetro

Tipo

Obligatorio

Descripción

col

Todos los tipos de datos

Sí

La columna en la que se contarán los valores distintos.

accuracy

FLOAT

No

La precisión del cálculo. Valores válidos: (0.0, 1.0). Valor predeterminado: 0.99. Un valor más alto ofrece mayor precisión a costa de incrementar la sobrecarga de estado, lo que reduce la ventaja de rendimiento frente a COUNT DISTINCT.

Ejemplo

A continuación se comparan los resultados obtenidos con la precisión predeterminada (0.99) y con una precisión menor (0.9).

Tabla de entrada T1

a (VARCHAR)

b (BIGINT)

Hi

1

Hi

2

Hi

3

Hi

4

Hi

5

Hi

6

Hello

1

Hello

2

Hello

3

Hello

4

Consulta

SELECT
  a,
  APPROX_COUNT_DISTINCT(b) AS b,
  APPROX_COUNT_DISTINCT(b, 0.9) AS c
FROM T1
GROUP BY a;

Resultados

a (VARCHAR)

b (BIGINT)

c (BIGINT)

Hi

6

6

Hello

4

4

La columna b utiliza la precisión predeterminada de 0.99; la columna c utiliza 0.9.