> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-3a82795f.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Documentación de la cláusula SAMPLE

# Cláusula SAMPLE

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).

<Note>
  Solo puede usar muestreo con tablas de la familia [MergeTree](/es/reference/engines/table-engines/mergetree-family/mergetree), y solo si la expresión de muestreo se especificó durante la creación de la tabla (consulte [motor MergeTree](/es/reference/engines/table-engines/mergetree-family/mergetree#table_engine-mergetree-creating-a-table)).
</Note>

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](/es/reference/statements/in). Además, puede combinar muestras con la cláusula [JOIN](/es/reference/statements/select/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](/es/reference/engines/table-engines/mergetree-family/mergetree#table_engine-mergetree-creating-a-table).

Para la cláusula `SAMPLE` se admite la siguiente sintaxis:

| Sintaxis de la cláusula SAMPLE | Descripción                                                                                                                                                                                                                                                                  |
| ------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `SAMPLE k`                     | Aquí, `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-k)                                                                       |
| `SAMPLE n`                     | Aquí, `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-n) |
| `SAMPLE k OFFSET m`            | Aquí, `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-offset-m)                                             |

<div id="sample-k">
  ## SAMPLE K
</div>

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:

```sql theme={null}
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.

<div id="sample-n">
  ## SAMPLE N
</div>

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](/es/reference/engines/table-engines/mergetree-family/mergetree#table_engine-mergetree-creating-a-table) 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:

```sql theme={null}
SELECT sum(PageViews * _sample_factor)
FROM visits
SAMPLE 10000000
```

El siguiente ejemplo muestra cómo calcular el número total de visitas:

```sql theme={null}
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.

```sql theme={null}
SELECT avg(Duration)
FROM visits
SAMPLE 10000000
```

<div id="sample-k-offset-m">
  ## SAMPLE K OFFSET M
</div>

Aquí, `k` y `m` son números entre 0 y 1. A continuación se muestran ejemplos.

**Ejemplo 1**

```sql theme={null}
SAMPLE 1/10
```

En este ejemplo, la muestra es 1/10 del total de los datos:

`[++------------]`

**Ejemplo 2**

```sql theme={null}
SAMPLE 1/10 OFFSET 1/2
```

Aquí se toma una muestra del 10 % de la segunda mitad de los datos.

`[------++------]`
