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

> Selecciona hasta k series temporales en cada paso de la cuadrícula mediante una ordenación pseudoaleatoria determinista.

# timeSeriesLimitKMasks

<h2 id="timeSeriesLimitKMasks">
  timeSeriesLimitKMasks
</h2>

Introducido en: v26.8.0

Selecciona hasta k series temporales en cada paso de una cuadrícula temporal, de forma pseudoaleatoria y determinista.

Cada fila de entrada es una serie temporal: `key` identifica la serie, `sampling_key` es un hash por serie que se usa como
orden de selección, y `values` contiene los valores de la serie alineados con una cuadrícula temporal común (por lo que los arrays `values`
de todas las filas deben tener el mismo tamaño). En cada paso temporal se seleccionan, de entre las series
con valores no NULL en ese paso, aquellas con las k claves de muestreo más pequeñas. Los empates en la clave de muestreo se resuelven dando preferencia a la serie con el `key` más pequeño.

Esta función implementa el operador de agregación `limitk()` de PromQL y mantiene un único heap acotado de tamaño `k` por
paso temporal, de modo que el tamaño de su estado no depende del número de series agregadas.

<Note>
  Esta función está en vista previa privada; para habilitarla, establezca `enable_time_series_aggregate_functions = 1`.
</Note>

**Sintaxis**

```sql theme={null}
timeSeriesLimitKMasks(k, key, sampling_key, values)
```

**Argumentos**

* `k` — Número de series que se seleccionan en cada paso temporal: puede ser un único valor para todos los pasos temporales o un array con un valor por paso temporal. Debe ser el mismo para todas las filas. [`UInt*`](/es/reference/data-types/int-uint) o [`Array(UInt*)`](/es/reference/data-types/array)
* `key` — Identificador de la serie temporal. [`UInt64`](/es/reference/data-types/int-uint)
* `sampling_key` — Hash por serie que define el orden de selección, p. ej., `timeSeriesGroupToSamplingKey(key)`. [`UInt64`](/es/reference/data-types/int-uint)
* `values` — Valores de la serie temporal alineados con la cuadrícula temporal, con un elemento por paso temporal. [`Array(Nullable(Float32))`](/es/reference/data-types/array) o [`Array(Nullable(Float64))`](/es/reference/data-types/array) o [`Array(Float32)`](/es/reference/data-types/array) o [`Array(Float64)`](/es/reference/data-types/array)

**Valor devuelto**

Devuelve las series seleccionadas en orden ascendente de `key`, cada una junto con su máscara por paso: `steps_mask[t] = 1` si la serie está seleccionada en el paso temporal `t`. Las series que no se seleccionan en ningún paso temporal no se devuelven. [`Array(Tuple(key UInt64, steps_mask Array(UInt8)))`](/es/reference/data-types/array)

**Ejemplos**

**Selección de 2 series por paso temporal según las claves de muestreo más pequeñas**

```sql title=Query theme={null}
SET enable_time_series_aggregate_functions = 1;
WITH [(1, [10., 1., NULL], 300), (2, [20., 2., 2.], 100), (3, [30., NULL, 1.], 200)]::Array(Tuple(UInt64, Array(Nullable(Float64)), UInt64)) AS series
SELECT timeSeriesLimitKMasks(2, s.1, s.3, s.2)
FROM (SELECT arrayJoin(series) AS s);
```

```response title=Response theme={null}
[(1,[0,1,0]),(2,[1,1,1]),(3,[1,0,1])]
```
