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:

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:
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:
El siguiente ejemplo muestra cómo calcular el número total de visitas:
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.

SAMPLE K OFFSET M

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