Saltar al contenido principal
La cláusula SAMPLE permite el procesamiento aproximado de consultas SELECT. Cuando el muestreo de datos está habilitado, la consulta no se ejecuta sobre todos los datos, sino solo sobre una fracción determinada de ellos (muestra). Por ejemplo, si necesita calcular estadísticas de todas las visitas, basta con ejecutar la consulta sobre 1/10 de todas las visitas y luego multiplicar el resultado por 10. El procesamiento aproximado de consultas puede ser útil en los siguientes casos:
  • Cuando tiene requisitos estrictos de latencia (por ejemplo, inferiores a 100 ms), pero no puede justificar el coste de recursos de hardware adicionales para cumplirlos.
  • Cuando sus datos brutos no son precisos, por lo que la aproximación no degrada de forma apreciable la calidad.
  • Cuando los requisitos del negocio exigen resultados aproximados (por rentabilidad o para ofrecer resultados exactos a usuarios premium).
Solo puede usar muestreo con tablas de la familia MergeTree, y solo si la expresión de muestreo se especificó durante la creación de la tabla (consulte motor MergeTree).
A continuación se enumeran las características del muestreo de datos:
  • El muestreo de datos es un mecanismo determinista. El resultado de la misma consulta SELECT .. SAMPLE siempre es el mismo.
  • El muestreo funciona de forma coherente entre distintas tablas. En tablas con una única clave de muestreo, una muestra con el mismo coeficiente siempre selecciona el mismo subconjunto de datos posibles. Por ejemplo, una muestra de ID de usuario toma filas con el mismo subconjunto de todos los ID de usuario posibles de distintas tablas. Esto significa que puede usar la muestra en subconsultas dentro de la cláusula IN. Además, puede combinar muestras con la cláusula JOIN.
  • El muestreo permite leer menos datos del disco. Tenga en cuenta que debe especificar correctamente la clave de muestreo. Para obtener más información, consulte Creación de una tabla MergeTree.
Para la cláusula SAMPLE se admite la siguiente sintaxis:
Sintaxis de la cláusula SAMPLEDescripción
SAMPLE kAquí, k es un número entre 0 y 1. La consulta se ejecuta sobre una fracción k de los datos. Por ejemplo, SAMPLE 0.1 ejecuta la consulta sobre el 10 % de los datos. Más información
SAMPLE nAquí, n es un entero suficientemente grande. La consulta se ejecuta sobre una muestra de al menos n filas (pero no significativamente más que eso). Por ejemplo, SAMPLE 10000000 ejecuta la consulta sobre un mínimo de 10 000 000 filas. Más información
SAMPLE k OFFSET mAquí, k y m son números entre 0 y 1. La consulta se ejecuta sobre una muestra de una fracción k de los datos. Los datos utilizados para la muestra se desplazan en una fracción m. Más información

SAMPLE K

Aquí, k es un número entre 0 y 1 (se admiten tanto la notación fraccionaria como la decimal). Por ejemplo, SAMPLE 1/2 o SAMPLE 0.5. En una cláusula SAMPLE k, la muestra se toma de la fracción k de los datos. A continuación se muestra un ejemplo:
SELECT
    Title,
    count() * 10 AS PageViews
FROM hits_distributed
SAMPLE 0.1
WHERE
    CounterID = 34
GROUP BY Title
ORDER BY PageViews DESC LIMIT 1000
En este ejemplo, la consulta se ejecuta sobre una muestra del 0.1 (10%) de los datos. Los valores de las funciones de agregación no se corrigen automáticamente, por lo que, para obtener un resultado aproximado, el valor de count() se multiplica manualmente por 10.

SAMPLE N

Aquí, n es un entero lo bastante grande. Por ejemplo, SAMPLE 10000000. En este caso, la consulta se ejecuta sobre una muestra de al menos n filas (pero no de muchas más). Por ejemplo, SAMPLE 10000000 ejecuta la consulta sobre un mínimo de 10,000,000 filas. Como la unidad mínima de lectura de datos es un gránulo (su tamaño se define mediante la configuración index_granularity), tiene sentido establecer una muestra mucho mayor que el tamaño del gránulo. Al usar la cláusula SAMPLE n, no se sabe qué porcentaje relativo de los datos se procesó. Por lo tanto, no se sabe por qué coeficiente deben multiplicarse las funciones de agregación. Use la columna virtual _sample_factor para obtener un resultado aproximado. La columna _sample_factor contiene coeficientes relativos que se calculan dinámicamente. Esta columna se crea automáticamente cuando crea una tabla con la clave de muestreo especificada. A continuación se muestran ejemplos de uso de la columna _sample_factor. Consideremos la tabla visits, que contiene estadísticas sobre las visitas al sitio. El primer ejemplo muestra cómo calcular el número de páginas vistas:
SELECT sum(PageViews * _sample_factor)
FROM visits
SAMPLE 10000000
El siguiente ejemplo muestra cómo calcular el número total de visitas:
SELECT sum(_sample_factor)
FROM visits
SAMPLE 10000000
El ejemplo siguiente muestra cómo calcular la duración media de la sesión. Tenga en cuenta que no es necesario usar el coeficiente relativo para calcular los valores medios.
SELECT avg(Duration)
FROM visits
SAMPLE 10000000

SAMPLE K OFFSET M

Aquí, k y m son números entre 0 y 1. A continuación se muestran ejemplos. Ejemplo 1
SAMPLE 1/10
En este ejemplo, la muestra es 1/10 del total de los datos: [++------------] Ejemplo 2
SAMPLE 1/10 OFFSET 1/2
Aquí se toma una muestra del 10 % de la segunda mitad de los datos. [------++------]
Última modificación el 10 de junio de 2026