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

> Documentación de las funciones para trabajar con series temporales

# Funciones para trabajar con series temporales

Las funciones siguientes están diseñadas para usarse con funciones de agregación `timeSeries*()`, como
[`timeSeriesInstantRateToGrid`](/es/reference/functions/aggregate-functions/timeSeriesInstantRateToGrid),
[`timeSeriesLastToGrid`](/es/reference/functions/aggregate-functions/timeSeriesResampleToGridWithStaleness),
entre otras.

{/*AUTOGENERATED_START*/}

<div id="seriesDecomposeSTL">
  ## seriesDecomposeSTL
</div>

Introducido en: v24.1.0

Descompone una serie temporal mediante STL [(procedimiento de descomposición estacional-tendencia basado en Loess)](https://www.wessa.net/download/stl.pdf) en un componente estacional, una tendencia y un componente residual.

**Sintaxis**

```sql theme={null}
seriesDecomposeSTL(series, period)
```

**Argumentos**

* `series` — Un array de valores numéricos [`Array((U)Int8/16/32/64)`](/es/reference/data-types/array) o [`Array(Float*)`](/es/reference/data-types/array)
* `period` — Un entero positivo [`UInt8/16/32/64`](/es/reference/data-types/int-uint)

**Valor devuelto**

Devuelve un array de cuatro arrays, donde el primero incluye los componentes estacionales, el segundo la tendencia, el tercero el componente residual y el cuarto el componente base (estacional + tendencia). [`Array(Array(Float32), Array(Float32), Array(Float32), Array(Float32))`](/es/reference/data-types/array)

**Ejemplos**

**Descomposición de datos de series temporales con STL**

```sql title=Query theme={null}
SELECT seriesDecomposeSTL([10.1, 20.45, 40.34, 10.1, 20.45, 40.34, 10.1, 20.45, 40.34, 10.1, 20.45, 40.34, 10.1, 20.45, 40.34, 10.1, 20.45, 40.34, 10.1, 20.45, 40.34, 10.1, 20.45, 40.34], 3) AS print_0
```

```response title=Response theme={null}
┌───────────print_0──────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ [[
        -13.529999, -3.1799996, 16.71,      -13.53,     -3.1799996, 16.71,      -13.53,     -3.1799996,
        16.71,      -13.530001, -3.18,      16.710001,  -13.530001, -3.1800003, 16.710001,  -13.530001,
        -3.1800003, 16.710001,  -13.530001, -3.1799994, 16.71,      -13.529999, -3.1799994, 16.709997
    ],
    [
        23.63,     23.63,     23.630003, 23.630001, 23.630001, 23.630001, 23.630001, 23.630001,
        23.630001, 23.630001, 23.630001, 23.63,     23.630001, 23.630001, 23.63,     23.630001,
        23.630001, 23.63,     23.630001, 23.630001, 23.630001, 23.630001, 23.630001, 23.630003
    ],
    [
        0, 0.0000019073486, -0.0000019073486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.0000019073486, 0,
        0
    ],
    [
        10.1, 20.449999, 40.340004, 10.100001, 20.45, 40.34, 10.100001, 20.45, 40.34, 10.1, 20.45, 40.34,
        10.1, 20.45, 40.34, 10.1, 20.45, 40.34, 10.1, 20.45, 40.34, 10.100002, 20.45, 40.34
    ]]                                                                                                                   │
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
```

<div id="seriesOutliersDetectTukey">
  ## seriesOutliersDetectTukey
</div>

Introducido en: v24.2.0

Detecta valores atípicos en datos de series mediante [Tukey Fences](https://en.wikipedia.org/wiki/Outlier#Tukey%27s_fences).

**Sintaxis**

```sql theme={null}
seriesOutliersDetectTukey(series[, min_percentile, max_percentile, K])
```

**Argumentos**

* `series` — Un array de valores numéricos. [`Array((UInt8/16/32/64))`](/es/reference/data-types/array) o [`Array(Float*)`](/es/reference/data-types/array)
* `min_percentile` — Opcional. El percentil mínimo que se usará para calcular el rango intercuartílico [(IQR)](https://en.wikipedia.org/wiki/Interquartile_range). El valor debe estar en el intervalo \[0.02,0.98]. El valor predeterminado es 0.25. [`Float*`](/es/reference/data-types/float)
* `max_percentile` — Opcional. El percentil máximo que se usará para calcular el rango intercuartílico (IQR). El valor debe estar en el intervalo \[0.02,0.98]. El valor predeterminado es 0.75. [`Float*`](/es/reference/data-types/float)
* `K` — Opcional. Valor constante no negativo para detectar valores atípicos leves o más extremos. El valor predeterminado es 1.5. [`Float*`](/es/reference/data-types/float)

**Valor devuelto**

Devuelve un array de la misma longitud que el array de entrada, donde cada valor representa la puntuación de posible anomalía del elemento correspondiente de la serie. Una puntuación distinta de cero indica una posible anomalía. [`Array(Float32)`](/es/reference/data-types/array)

**Ejemplos**

**Detección básica de valores atípicos**

```sql title=Query theme={null}
SELECT seriesOutliersDetectTukey([-3, 2, 15, 3, 5, 6, 4, 5, 12, 45, 12, 3, 3, 4, 5, 6]) AS print_0
```

```response title=Response theme={null}
┌───────────print_0─────────────────┐
│[0,0,0,0,0,0,0,0,0,27,0,0,0,0,0,0] │
└───────────────────────────────────┘
```

**Detección de anomalías con parámetros personalizados**

```sql title=Query theme={null}
SELECT seriesOutliersDetectTukey([-3, 2, 15, 3, 5, 6, 4.50, 5, 12, 45, 12, 3.40, 3, 4, 5, 6], 0.2, 0.8, 1.5) AS print_0
```

```response title=Response theme={null}
┌─print_0──────────────────────────────┐
│ [0,0,0,0,0,0,0,0,0,19.5,0,0,0,0,0,0] │
└──────────────────────────────────────┘
```

<div id="seriesPeriodDetectFFT">
  ## seriesPeriodDetectFFT
</div>

Introducido en: v23.12.0

Encuentra el período de los datos de la serie dada mediante FFT: [transformada rápida de Fourier](https://en.wikipedia.org/wiki/Fast_Fourier_transform)

**Sintaxis**

```sql theme={null}
seriesPeriodDetectFFT(series)
```

**Argumentos**

* `series` — Un array de valores numéricos. [`Array((U)Int8/16/32/64)`](/es/reference/data-types/array) o [`Array(Float*)`](/es/reference/data-types/array)

**Valor devuelto**

Devuelve un valor real igual al período de los datos de series. NaN cuando el número de puntos de datos es menor que cuatro. [`Float64`](/es/reference/data-types/float)

**Ejemplos**

**Detección de períodos con un patrón simple**

```sql title=Query theme={null}
SELECT seriesPeriodDetectFFT([1, 4, 6, 1, 4, 6, 1, 4, 6, 1, 4, 6, 1, 4, 6, 1, 4, 6, 1, 4, 6]) AS print_0
```

```response title=Response theme={null}
┌───────────print_0──────┐
│                      3 │
└────────────────────────┘
```

**Detección de período con un patrón complejo**

```sql title=Query theme={null}
SELECT seriesPeriodDetectFFT(arrayMap(x -> abs((x % 6) - 3), range(1000))) AS print_0
```

```response title=Response theme={null}
┌─print_0─┐
│       6 │
└─────────┘
```

<div id="timeSeriesCopyTag">
  ## timeSeriesCopyTag
</div>

Introducido en: v26.1.0

Copia una etiqueta especificada de un grupo de etiquetas (`src_group`) a otro (`dest_group`).
La función reemplaza cualquier valor anterior de la etiqueta copiada en `dest_group`.
Si la etiqueta copiada no está presente en `src_group`, la función también la eliminará de `dest_group`.
La función reproduce la lógica de copia de los modificadores de prometheus
[group left/group right](https://prometheus.io/docs/prometheus/latest/querying/operators/#group-modifiers).

**Sintaxis**

```sql theme={null}
timeSeriesCopyTag(dest_group, src_group, tag_to_copy)
```

**Argumentos**

* `dest_group` — El grupo de etiquetas de destino. [`UInt64`](/es/reference/data-types/int-uint)
* `src_group` — El grupo de etiquetas de origen. [`UInt64`](/es/reference/data-types/int-uint)
* `tag_to_copy` — El nombre de una etiqueta que se copiará. [`String`](/es/reference/data-types/string)

**Valor devuelto**

Devuelve un grupo de etiquetas que contiene las etiquetas de `dest_group`, junto con las etiquetas copiadas de `src_group`. [`UInt64`](/es/reference/data-types/int-uint)

**Ejemplos**

**Ejemplo**

```sql title=Query theme={null}
SELECT timeSeriesTagsToGroup([('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') AS dest_group,
       timeSeriesTagsToGroup([('code', '404'), ('message', 'Page not found')], '__name__', 'http_codes') AS src_group,
       timeSeriesCopyTag(dest_group, src_group, '__name__') AS result_group,
       timeSeriesGroupToTags(result_group)
```

```response title=Response theme={null}
┌─dest_group─┬─src_group─┬─result_group─┬─timeSeriesGroupToTags(result_group)────────────────────────┐
│          1 │         2 │            3 │ [('__name__','http_codes'),('code','404'),('region','eu')] │
└────────────┴───────────┴──────────────┴────────────────────────────────────────────────────────────┘
```

<div id="timeSeriesCopyTags">
  ## timeSeriesCopyTags
</div>

Introducido en: v26.1.0

Copia las etiquetas especificadas de un grupo de etiquetas (`src_group`) a otro (`dest_group`).
La función reemplaza cualquier valor anterior de las etiquetas copiadas en `dest_group`.
Si alguna de las etiquetas copiadas no está presente en `src_group`, la función también la eliminará de `dest_group`.
La función imita la lógica de copia de los modificadores de Prometheus
[group left/group right](https://prometheus.io/docs/prometheus/latest/querying/operators/#group-modifiers).

**Sintaxis**

```sql theme={null}
timeSeriesCopyTags(dest_group, src_group, tags_to_copy)
```

**Argumentos**

* `dest_group` — El grupo de etiquetas de destino. [`UInt64`](/es/reference/data-types/int-uint)
* `src_group` — El grupo de etiquetas de origen. [`UInt64`](/es/reference/data-types/int-uint)
* `tags_to_copy` — Los nombres de las etiquetas que se copiarán. [`Array(String)`](/es/reference/data-types/array)

**Valor devuelto**

Devuelve un grupo de etiquetas que contiene las etiquetas de `dest_group`, junto con las etiquetas copiadas de `src_group`. [`UInt64`](/es/reference/data-types/int-uint)

**Ejemplos**

**Ejemplo**

```sql title=Query theme={null}
SELECT timeSeriesTagsToGroup([('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') AS dest_group,
       timeSeriesTagsToGroup([('code', '404'), ('message', 'Page not found')], '__name__', 'http_codes') AS src_group,
       timeSeriesCopyTags(dest_group, src_group, ['__name__', 'code', 'env']) AS result_group,
       timeSeriesGroupToTags(result_group)
```

```response title=Response theme={null}
┌─dest_group─┬─src_group─┬─result_group─┬─timeSeriesGroupToTags(result_group)────────────────────────┐
│          1 │         2 │            3 │ [('__name__','http_codes'),('code','404'),('region','eu')] │
└────────────┴───────────┴──────────────┴────────────────────────────────────────────────────────────┘
```

<div id="timeSeriesExtractTag">
  ## timeSeriesExtractTag
</div>

Introducido en: v26.1.0

Extrae el valor de una etiqueta especificada del grupo. Devuelve NULL si no se encuentra.
Véase también la función [timeSeriesGroupToTags()](/es/reference/functions/regular-functions/time-series-functions#timeSeriesGroupToTags).

**Sintaxis**

```sql theme={null}
timeSeriesExtractTag(group)
```

**Argumentos**

* `group` — Un grupo de etiquetas. [`UInt64`](/es/reference/data-types/int-uint)
* `tag_to_extract` — El nombre de una etiqueta que se extraerá del grupo [`String`](/es/reference/data-types/string)

**Valor devuelto**

Devuelve el valor de una etiqueta especificada. [`Nullable(String)`](/es/reference/data-types/nullable)

**Ejemplos**

**Ejemplo**

```sql title=Query theme={null}
SELECT timeSeriesTagsToGroup([('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') AS group,
       timeSeriesExtractTag(group, '__name__'),
       timeSeriesExtractTag(group, 'env'),
       timeSeriesExtractTag(group, 'instance')
```

```response title=Response theme={null}
┌─group─┬─timeSeriesExtractTag(group, '__name__')─┬─timeSeriesExtractTag(group, 'env')─┬─timeSeriesExtractTag(group, 'instance')─┐
│     1 │ http_requests_count                     │ dev                                │ ᴺᵁᴸᴸ                                    │
└───────┴─────────────────────────────────────────┴────────────────────────────────────┴─────────────────────────────────────────┘
```

<div id="timeSeriesFromGrid">
  ## timeSeriesFromGrid
</div>

Introducido en: v25.8.0

Convierte un Array de valores `[x1, x2, x3, ...]` en un Array de Tuplas
`[(start_timestamp, x1), (start_timestamp + step, x2), (start_timestamp + 2 * step, x3), ...]`.

El timestamp actual se incrementa en `step` hasta que es mayor que `end_timestamp`
Si la cantidad de valores no coincide con la cantidad de timestamps, la función lanza una excepción.

Los valores NULL en `[x1, x2, x3, ...]` se omiten, pero el timestamp actual se sigue incrementando.
Por ejemplo, para `[value1, NULL, x2]` la función devuelve `[(start_timestamp, x1), (start_timestamp + 2 * step, x2)]`.

**Sintaxis**

```sql theme={null}
timeSeriesFromGrid(start_timestamp, end_timestamp, step, values)
```

**Argumentos**

* `start_timestamp` — Inicio de la rejilla. [`DateTime64`](/es/reference/data-types/datetime64) o [`DateTime`](/es/reference/data-types/datetime) o [`UInt32`](/es/reference/data-types/int-uint)
* `end_timestamp` — Fin de la rejilla. [`DateTime64`](/es/reference/data-types/datetime64) o [`DateTime`](/es/reference/data-types/datetime) o [`UInt32`](/es/reference/data-types/int-uint)
* `step` — Paso de la rejilla en segundos [`Decimal64`](/es/reference/data-types/decimal) o [`Decimal32`](/es/reference/data-types/decimal) o [`UInt32/64`](/es/reference/data-types/int-uint)
* `values` — Array de valores [`Array(Float*)`](/es/reference/data-types/array) o [`Array(Nullable(Float*))`](/es/reference/data-types/array)

**Valor devuelto**

Devuelve los valores del array de origen combinados con marcas de tiempo en una rejilla temporal regular descrita por `start_timestamp` y `step`. [`Array(Tuple(DateTime64, Float64))`](/es/reference/data-types/array)

**Ejemplos**

**Ejemplo de uso**

```sql title=Query theme={null}
SELECT timeSeriesFromGrid('2025-06-01 00:00:00'::DateTime64(3), '2025-06-01 00:01:30.000'::DateTime64(3), 30, [10, 20, NULL, 30]) AS result;
```

```response title=Response theme={null}
┌─────────────────────────────────────────────result─────────────────────────────────────────────┐
│ [('2025-06-01 00:00:00.000',10),('2025-06-01 00:00:30.000',20),('2025-06-01 00:01:30.000',30)] │
└────────────────────────────────────────────────────────────────────────────────────────────────┘
```

<div id="timeSeriesGroupToSamplingKey">
  ## timeSeriesGroupToSamplingKey
</div>

Introducido en: v26.4.0

Devuelve una clave de muestreo `UInt64` estable derivada de las etiquetas del grupo especificado.

El valor es determinista: si las etiquetas de entrada son idénticas, siempre producen la misma clave.
Está pensada como clave de ordenación para operadores de muestreo como `limitk` y `limit_ratio`.

**Sintaxis**

```sql theme={null}
timeSeriesGroupToSamplingKey(group)
```

**Argumentos**

* `group` — Un grupo de etiquetas. [`UInt64`](/es/reference/data-types/int-uint)

**Valor devuelto**

Un hash `UInt64` estable derivado de las etiquetas asociadas al grupo. [`UInt64`](/es/reference/data-types/int-uint)

**Ejemplos**

**Ejemplo**

```sql title=Query theme={null}
SELECT timeSeriesTagsToGroup([('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') AS group,
       timeSeriesGroupToSamplingKey(group) AS sampling_key
```

```response title=Response theme={null}
┌─group─┬─────────sampling_key─┐
│     1 │ 12876543210987654321 │
└───────┴──────────────────────┘
```

<div id="timeSeriesGroupToTags">
  ## timeSeriesGroupToTags
</div>

Introducida en: v26.1.0

Devuelve los nombres y valores de las etiquetas asociadas a un grupo especificado.
Véase también la función [timeSeriesTagsToGroup()](/es/reference/functions/regular-functions/time-series-functions#timeSeriesTagsToGroup).

**Sintaxis**

```sql theme={null}
timeSeriesGroupToTags(group)
```

**Alias**: `timeSeriesTagsGroupToTags`

**Argumentos**

* `group` — Un grupo de etiquetas. [`UInt64`](/es/reference/data-types/int-uint)

**Valor devuelto**

Devuelve un array de pares `(tag_name, tag_value)`.
El array devuelto siempre está ordenado por `tag_name` y nunca contiene el mismo `tag_name` más de una vez.
[`Array(Tuple(String, String))`](/es/reference/data-types/array)

**Ejemplos**

**Ejemplo**

```sql title=Query theme={null}
SELECT timeSeriesTagsToGroup([('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') AS group,
       timeSeriesGroupToTags(group) AS sorted_tags,
       timeSeriesTagsToGroup(sorted_tags) AS same_group,
       throwIf(same_group != group)
```

```response title=Response theme={null}
┌─group─┬─sorted_tags────────────────────────────────────────────────────────┬─same_group─┬─throwIf(notE⋯up, group))─┐
│     1 │ [('__name__','http_requests_count'),('env','dev'),('region','eu')] │          1 │                        0 │
└───────┴────────────────────────────────────────────────────────────────────┴────────────┴──────────────────────────┘
```

<div id="timeSeriesIdToGroup">
  ## timeSeriesIdToGroup
</div>

Introducido en: v26.1.0

Devuelve los nombres y valores de las etiquetas asociadas a un identificador de serie temporal especificado.
Véase también la función [timeSeriesStoreTags()](/es/reference/functions/regular-functions/time-series-functions#timeSeriesStoreTags).

**Sintaxis**

```sql theme={null}
timeSeriesIdToGroup(id)
```

**Alias**: `timeSeriesIdToTagsGroup`

**Argumentos**

* `id` — Identificador de una serie temporal. [`UInt64`](/es/reference/data-types/int-uint) o [`UInt128`](/es/reference/data-types/int-uint) o [`UUID`](/es/reference/data-types/uuid) o [`FixedString(16)`](/es/reference/data-types/fixedstring)

**Valor devuelto**

Devuelve un grupo de etiquetas asociado al identificador `id` de una serie temporal. [`UInt64`](/es/reference/data-types/int-uint)

**Ejemplos**

**Ejemplo**

```sql title=Query theme={null}
SELECT 8374283493092 AS id,
       timeSeriesStoreTags(id, [('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') AS same_id,
       throwIf(same_id != id),
       timeSeriesIdToGroup(same_id) AS group,
       timeSeriesGroupToTags(group)
```

```response title=Response theme={null}
┌────────────id─┬───────same_id─┬─throwIf(notE⋯me_id, id))─┬─group─┬─timeSeriesGroupToTags(group)───────────────────────────────────────┐
│ 8374283493092 │ 8374283493092 │                        0 │     1 │ [('__name__','http_requests_count'),('env','dev'),('region','eu')] │
└───────────────┴───────────────┴──────────────────────────┴───────┴────────────────────────────────────────────────────────────────────┘
```

<div id="timeSeriesIdToTags">
  ## timeSeriesIdToTags
</div>

Introducido en: v25.8.0

Devuelve las etiquetas asociadas al identificador especificado de una serie temporal.
Véase también la función [timeSeriesStoreTags()](/es/reference/functions/regular-functions/time-series-functions#timeSeriesStoreTags).

**Sintaxis**

```sql theme={null}
timeSeriesIdToTags(id)
```

**Argumentos**

* `id` — Identificador de una serie temporal. [`UInt64`](/es/reference/data-types/int-uint) o [`UInt128`](/es/reference/data-types/int-uint) o [`UUID`](/es/reference/data-types/uuid) o [`FixedString(16)`](/es/reference/data-types/fixedstring)

**Valor devuelto**

Devuelve un array de pares `(tag_name, tag_value)`.
El array devuelto siempre está ordenado por `tag_name` y nunca contiene el mismo `tag_name` más de una vez.
[`Array(Tuple(String, String))`](/es/reference/data-types/array)

**Ejemplos**

**Ejemplo**

```sql title=Query theme={null}
SELECT 8374283493092 AS id,
       timeSeriesStoreTags(id, [('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') AS same_id,
       throwIf(same_id != id),
       timeSeriesIdToTags(same_id)
```

```response title=Response theme={null}
┌────────────id─┬───────same_id─┬─throwIf(notE⋯me_id, id))─┬─timeSeriesIdToTags(same_id)────────────────────────────────────────┐
│ 8374283493092 │ 8374283493092 │                        0 │ [('__name__','http_requests_count'),('env','dev'),('region','eu')] │
└───────────────┴───────────────┴──────────────────────────┴────────────────────────────────────────────────────────────────────┘
```

<div id="timeSeriesJoinTags">
  ## timeSeriesJoinTags
</div>

Introducido en: v26.1.0

Une los valores de las etiquetas especificadas extraídos de un grupo de etiquetas.
La función inserta un separador entre los valores unidos y devuelve un nuevo grupo de etiquetas
con la etiqueta `dest_tag` establecida con el valor unido.
Esta función imita la lógica de la función de Prometheus
[label\_join()](https://prometheus.io/docs/prometheus/latest/querying/functions/#label_join).

**Sintaxis**

```sql theme={null}
timeSeriesJoinTags(group, dest_tag, separator, src_tags)
```

**Argumentos**

* `group` — Un grupo de etiquetas. [`UInt64`](/es/reference/data-types/int-uint)
* `dest_tag` — El nombre de una etiqueta con el resultado combinado que se añadirá al `group`. [`String`](/es/reference/data-types/string)
* `separator` — Un separador para insertar entre los valores combinados. [`String`](/es/reference/data-types/string)
* `src_tags` — Los nombres de las etiquetas de origen cuyos valores se combinarán. [`Array(String)`](/es/reference/data-types/array)

**Valor devuelto**

Devuelve un nuevo grupo de etiquetas con la etiqueta `dest_tag` establecida con el resultado combinado. [`UInt64`](/es/reference/data-types/int-uint)

**Ejemplos**

**Ejemplo**

```sql title=Query theme={null}
SELECT timeSeriesTagsToGroup([('__name__', 'up'), ('job', 'api-server'), ('src1', 'a'), ('src2', 'b'), ('src3', 'c')]) AS group,
       timeSeriesJoinTags(group, 'foo', ',', ['src1', 'src2', 'src3']) AS result_group,
       timeSeriesGroupToTags(result_group)
```

```response title=Response theme={null}
┌─group─┬─result_group─┬─timeSeriesGroupToTags(result_group)─────────────────────────────────────────────────────────────┐
│     1 │            2 │ [('__name__','up'),('foo','a,b,c'),('job','api-server'),('src1','a'),('src2','b'),('src3','c')] │
└───────┴──────────────┴─────────────────────────────────────────────────────────────────────────────────────────────────┘
```

<div id="timeSeriesRange">
  ## timeSeriesRange
</div>

Introducido en: v25.8.0

Genera un rango de marcas de tiempo \[start\_timestamp, start\_timestamp + step, start\_timestamp + 2 \* step, ..., end\_timestamp].

Si `start_timestamp` es igual a `end_timestamp`, la función devuelve un array de un solo elemento que contiene `[start_timestamp]`.

La función `timeSeriesRange()` es similar a la función [range](/es/reference/functions/regular-functions/array-functions#range).

**Sintaxis**

```sql theme={null}
timeSeriesRange(start_timestamp, end_timestamp, step)
```

**Argumentos**

* `start_timestamp` — Inicio del rango. [`DateTime64`](/es/reference/data-types/datetime64) o [`DateTime`](/es/reference/data-types/datetime) o [`UInt32`](/es/reference/data-types/int-uint)
* `end_timestamp` — Fin del rango. [`DateTime64`](/es/reference/data-types/datetime64) o [`DateTime`](/es/reference/data-types/datetime) o [`UInt32`](/es/reference/data-types/int-uint)
* `step` — Incremento del rango en segundos [`UInt32/64`](/es/reference/data-types/int-uint) o [`Decimal32/64`](/es/reference/data-types/decimal)

**Valor devuelto**

Devuelve un rango de marcas de tiempo. [`Array(DateTime64)`](/es/reference/data-types/array)

**Ejemplos**

**Ejemplo de uso**

```sql title=Query theme={null}
SELECT timeSeriesRange('2025-06-01 00:00:00'::DateTime64(3), '2025-06-01 00:01:00'::DateTime64(3), 30)
```

```response title=Response theme={null}
┌────────────────────────────────────result─────────────────────────────────────────┐
│ ['2025-06-01 00:00:00.000', '2025-06-01 00:00:30.000', '2025-06-01 00:01:00.000'] │
└───────────────────────────────────────────────────────────────────────────────────┘
```

<div id="timeSeriesRemoveAllTagsExcept">
  ## timeSeriesRemoveAllTagsExcept
</div>

Introducido en: v26.1.0

Elimina todas las etiquetas de un grupo, excepto las especificadas.
Véase también la función [timeSeriesRemoveTag()](/es/reference/functions/regular-functions/time-series-functions#timeSeriesRemoveTag),
[timeSeriesRemoveTags()](/es/reference/functions/regular-functions/time-series-functions#timeSeriesRemoveTags).

**Sintaxis**

```sql theme={null}
timeSeriesRemoveAllTagsExcept(group, tags_to_keep)
```

**Argumentos**

* `group` — Un grupo de etiquetas. [`UInt64`](/es/reference/data-types/int-uint)
* `tags_to_keep` — Los nombres de las etiquetas que se conservarán en el grupo. [`Array(String)`](/es/reference/data-types/array)

**Valor devuelto**

Un nuevo grupo de etiquetas en el que solo se conservan las etiquetas especificadas. [`UInt64`](/es/reference/data-types/int-uint)

**Ejemplos**

**Ejemplo**

```sql title=Query theme={null}
SELECT timeSeriesTagsToGroup([('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') AS group,
       timeSeriesRemoveAllTagsExcept(group, ['env']) AS result_group,
       timeSeriesGroupToTags(result_group)
```

```response title=Response theme={null}
┌─group─┬─result_group─┬─timeSeriesGroupToTags(result_group)─┐
│     1 │            2 │ [('env','dev')]                     │
└───────┴──────────────┴─────────────────────────────────────┘
```

<div id="timeSeriesRemoveTag">
  ## timeSeriesRemoveTag
</div>

Introducido en: v26.1.0

Elimina una etiqueta especificada de un grupo de etiquetas.
Si esa etiqueta no existe en el grupo, el grupo se devuelve sin cambios.
Véase también la función [timeSeriesRemoveTags()](/es/reference/functions/regular-functions/time-series-functions#timeSeriesRemoveTags),
[timeSeriesRemoveAllTagsExcept()](/es/reference/functions/regular-functions/time-series-functions#timeSeriesRemoveAllTagsExcept).

**Sintaxis**

```sql theme={null}
timeSeriesRemoveTag(group, tag_to_remove)
```

**Argumentos**

* `group` — Un grupo de etiquetas. [`UInt64`](/es/reference/data-types/int-uint)
* `tag_to_remove` — El nombre de la etiqueta que se debe eliminar del grupo. [`String`](/es/reference/data-types/string)

**Valor devuelto**

Un nuevo grupo de etiquetas sin la etiqueta especificada. [`UInt64`](/es/reference/data-types/int-uint)

**Ejemplos**

**Ejemplo**

```sql title=Query theme={null}
SELECT timeSeriesTagsToGroup([('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') AS group_of_3,
       timeSeriesRemoveTag(group_of_3, '__name__') AS group_of_2,
       timeSeriesGroupToTags(group_of_2),
       timeSeriesRemoveTag(group_of_2, 'env') AS group_of_1,
       timeSeriesGroupToTags(group_of_1),
       timeSeriesRemoveTag(group_of_1, 'region') AS empty_group,
       timeSeriesGroupToTags(empty_group)
```

```response title=Response theme={null}
┌─group_of_3─┬─group_of_2─┬─timeSeriesGroupToTags(group_of_2)─┬─group_of_1─┬─timeSeriesGroupToTags(group_of_1)─┬─empty_group─┬─timeSeriesGroupToTags(empty_group)─┐
│          1 │          2 │ [('env','dev'),('region','eu')]   │          3 │ [('region','eu')]                 │           0 │ []                                 │
└────────────┴────────────┴───────────────────────────────────┴────────────┴───────────────────────────────────┴─────────────┴────────────────────────────────────┘
```

<div id="timeSeriesRemoveTags">
  ## timeSeriesRemoveTags
</div>

Introducido en: v26.1.0

Elimina las etiquetas especificadas de un grupo de etiquetas.
Si algunas de las etiquetas especificadas no están en el grupo de etiquetas, la función las ignora.
Véase también la función [timeSeriesRemoveTag()](/es/reference/functions/regular-functions/time-series-functions#timeSeriesRemoveTag),
[timeSeriesRemoveAllTagsExcept()](/es/reference/functions/regular-functions/time-series-functions#timeSeriesRemoveAllTagsExcept).

**Sintaxis**

```sql theme={null}
timeSeriesRemoveTags(group, tags_to_remove)
```

**Argumentos**

* `group` — Un grupo de etiquetas. [`UInt64`](/es/reference/data-types/int-uint)
* `tags_to_remove` — Los nombres de las etiquetas que se deben eliminar del grupo. [`Array(String)`](/es/reference/data-types/array)

**Valor devuelto**

Un nuevo grupo de etiquetas sin las etiquetas especificadas. [`UInt64`](/es/reference/data-types/int-uint)

**Ejemplos**

**Ejemplo**

```sql title=Query theme={null}
SELECT timeSeriesTagsToGroup([('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') AS group_of_3,
       timeSeriesRemoveTags(group_of_3, ['env', 'region']) AS group_of_1,
       timeSeriesGroupToTags(group_of_1),
       timeSeriesRemoveTags(group_of_1, ['__name__', 'nonexistent']) AS empty_group,
       timeSeriesGroupToTags(empty_group)
```

```response title=Response theme={null}
┌─group_of_3─┬─group_of_1─┬─timeSeriesGroupToTags(group_of_1)────┬─empty_group─┬─timeSeriesGroupToTags(empty_group)─┐
│          1 │          2 │ [('__name__','http_requests_count')] │           0 │ []                                 │
└────────────┴────────────┴──────────────────────────────────────┴─────────────┴────────────────────────────────────┘
```

<div id="timeSeriesReplaceTag">
  ## timeSeriesReplaceTag
</div>

Introducido en: v26.1.0

Aplica la expresión regular `regex` al valor de la etiqueta `src_tag`.
Si hay coincidencia, el valor de la etiqueta `dest_tag` en el grupo devuelto será la expansión de `replacement`,
junto con las etiquetas originales de la entrada.
Esta función imita la lógica de la función de Prometheus
[label\_replace()](https://prometheus.io/docs/prometheus/latest/querying/functions/#label_replace).

**Sintaxis**

```sql theme={null}
timeSeriesReplaceTag(group, dest_tag, replacement, src_tag, regex)
```

**Argumentos**

* `group` — Un grupo de etiquetas. [`UInt64`](/es/reference/data-types/int-uint)
* `dest_tag` — El nombre de una etiqueta de destino para obtener el grupo resultante. [`String`](/es/reference/data-types/string)
* `replacement` — Un patrón de reemplazo que puede contener $1, $2 o \$name para hacer referencia a grupos de captura en la expresión regular 'regex'. [`String`](/es/reference/data-types/string)
* `src_tag` — El nombre de una etiqueta cuyo valor se usa para hacer coincidir la expresión regular 'regex'. [`String`](/es/reference/data-types/string)
* `regex` — Una expresión regular. [`String`](/es/reference/data-types/string)

**Valor devuelto**

Un nuevo grupo de etiquetas al que puede haberse añadido `dest_tag`. [`UInt64`](/es/reference/data-types/int-uint)

**Ejemplos**

**Ejemplo**

```sql title=Query theme={null}
SELECT timeSeriesTagsToGroup([('__name__', 'up'), ('job', 'api-server'), ('service', 'a:c')]) AS group,
       timeSeriesReplaceTag(group, 'foo', '$1', 'service', '(.*):.*') AS result_group,
       timeSeriesGroupToTags(result_group)
```

```response title=Response theme={null}
┌─group─┬─result_group─┬─timeSeriesGroupToTags(result_group)────────────────────────────────────┐
│     1 │            2 │ [('__name__','up'),('foo','a'),('job','api-server'),('service','a:c')] │
└───────┴──────────────┴────────────────────────────────────────────────────────────────────────┘
```

<div id="timeSeriesStoreTags">
  ## timeSeriesStoreTags
</div>

Introducido en: v25.8.0

Almacena en el contexto de la consulta una correspondencia entre un identificador especificado de una serie temporal y un conjunto de etiquetas.
Las funciones [timeSeriesIdToTags()](/es/reference/functions/regular-functions/time-series-functions#timeSeriesIdToTags)
y [timeSeriesIdToGroup()](/es/reference/functions/regular-functions/time-series-functions#timeSeriesIdToGroup)
se pueden usar para acceder a esta correspondencia más adelante durante la ejecución de la consulta.

**Sintaxis**

```sql theme={null}
timeSeriesStoreTags(id, tags_array, separate_tag_name_1, separate_tag_value_1, ...)
```

**Argumentos**

* `id` — Identificador de una serie temporal. [`UInt64`](/es/reference/data-types/int-uint) o [`UInt128`](/es/reference/data-types/int-uint) o [`UUID`](/es/reference/data-types/uuid) o [`FixedString(16)`](/es/reference/data-types/fixedstring)
* `tags_array` — Array de pares (tag\_name, tag\_value). [`Array(Tuple(String, String))`](/es/reference/data-types/array) o [`NULL`](/es/reference/syntax#null)
* `separate_tag_name_i` — El nombre de una etiqueta. [`String`](/es/reference/data-types/string) o [`FixedString`](/es/reference/data-types/fixedstring)
* `separate_tag_value_i` — El valor de una etiqueta. [`String`](/es/reference/data-types/string) o [`FixedString`](/es/reference/data-types/fixedstring) o [`Nullable(String)`](/es/reference/data-types/nullable)

**Valor devuelto**

Devuelve el identificador de una serie temporal (es decir, solo el primer argumento).

**Ejemplos**

**Ejemplo**

```sql title=Query theme={null}
SELECT 8374283493092 AS id,
       timeSeriesStoreTags(id, [('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') AS same_id,
       throwIf(same_id != id),
       timeSeriesIdToTags(same_id),
       timeSeriesGroupToTags(timeSeriesIdToGroup(same_id))
```

```response title=Response theme={null}
┌────────────id─┬───────same_id─┬─throwIf(notEquals(same_id, id))─┬─timeSeriesIdToTags(same_id)────────────────────────────────────────┬─timeSeriesGroupToTags(timeSeriesIdToGroup(same_id))────────────────┐
│ 8374283493092 │ 8374283493092 │                               0 │ [('__name__','http_requests_count'),('env','dev'),('region','eu')] │ [('__name__','http_requests_count'),('env','dev'),('region','eu')] │
└───────────────┴───────────────┴─────────────────────────────────┴────────────────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────┘
```

<div id="timeSeriesTagsToGroup">
  ## timeSeriesTagsToGroup
</div>

Introducido en: v26.1.0

Devuelve un grupo de etiquetas asociado a las etiquetas especificadas.
Si se encuentra el mismo grupo de etiquetas varias veces durante la ejecución de la consulta, la función devuelve el mismo grupo.
Para un conjunto vacío de etiquetas, la función siempre devuelve 0.
Véase también la función [timeSeriesGroupToTags()](/es/reference/functions/regular-functions/time-series-functions#timeSeriesGroupToTags).

**Sintaxis**

```sql theme={null}
timeSeriesTagsToGroup(tags_array, tag_name_1, tag_value_1, tag_name2, tag_value2, ...)
```

**Argumentos**

* `tags_array` — Array de pares (tag\_name, tag\_value). [`Array(Tuple(String, String))`](/es/reference/data-types/array) o [`NULL`](/es/reference/syntax#null)
* `tag_name_i` — El nombre de una etiqueta. [`String`](/es/reference/data-types/string) o [`FixedString`](/es/reference/data-types/fixedstring)
* `tag_value_i` — El valor de una etiqueta. [`String`](/es/reference/data-types/string) o [`FixedString`](/es/reference/data-types/fixedstring) o [`Nullable(String)`](/es/reference/data-types/nullable)

**Valor devuelto**

Devuelve un grupo de etiquetas asociado a las etiquetas especificadas. [`UInt64`](/es/reference/data-types/int-uint)

**Ejemplos**

**Ejemplo**

```sql title=Query theme={null}
SELECT timeSeriesTagsToGroup([('region', 'eu'), ('env', 'dev')], '__name__', 'http_requests_count') AS group1,
       timeSeriesTagsToGroup([], '__name__', 'http_failures') AS group2,
       timeSeriesTagsToGroup([]) AS empty_group,
       timeSeriesTagsToGroup([], '__name__', 'http_failures') AS same_group2,
       throwIf(same_group2 != group2),
       timeSeriesGroupToTags(group2)
```

```response title=Response theme={null}
┌─group1─┬─group2─┬─empty_group─┬─same_group2─┬─throwIf(notEquals(same_group2, group2))─┬─timeSeriesGroupToTags(group2)──┐
│      1 │      2 │           0 │           2 │                                       0 │ [('__name__','http_failures')] │
└────────┴────────┴─────────────┴─────────────┴─────────────────────────────────────────┴────────────────────────────────┘
```

<div id="timeSeriesThrowDuplicateSeriesIf">
  ## timeSeriesThrowDuplicateSeriesIf
</div>

Introducido en: v26.2.0

Comprueba la `condition` y, si es `true`, lanza una excepción con el siguiente mensaje:
`Multiple series have the same tags <tags>, duplicate series in the same result set are not allowed`.
Si la `condition` es `false`, la función devuelve `0`.
Esta función es similar a [throwIf()](/es/reference/functions/regular-functions/other-functions#throwIf),
pero usa un código de error diferente y presenta el mensaje de error con un formato distinto.

**Sintaxis**

```sql theme={null}
timeSeriesThrowDuplicateSeriesIf(condition, group)
```

**Argumentos**

* `condition` — Condición que se va a comprobar; normalmente contiene la función [count()](/es/reference/functions/aggregate-functions/count#count) [`UInt8`](/es/reference/data-types/int-uint)
* `group` — Grupo de etiquetas. [`UInt64`](/es/reference/data-types/int-uint)

**Valor devuelto**

Devuelve `0`. [`UInt8`](/es/reference/data-types/int-uint)

**Ejemplos**

**Ejemplo**

```sql title=Query theme={null}
CREATE TABLE test(tags Array(Tuple(String, String))) engine=Memory;

INSERT INTO test VALUES ([('__name__', 'up')]);

SELECT timeSeriesTagsToGroup(tags) AS group
FROM test
GROUP BY group
HAVING timeSeriesThrowDuplicateSeriesIf(count() > 1, group) = 0;  -- OK

INSERT INTO test VALUES ([('__name__', 'up')]);

SELECT timeSeriesTagsToGroup(tags) AS group
FROM test
GROUP BY group
HAVING timeSeriesThrowDuplicateSeriesIf(count() > 1, group) = 0;  -- Lanza la excepción "Multiple series have the same tags {'__name__': 'up'}"
```

```response title=Response theme={null}
```
