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

> Documentation des fonctions de manipulation des séries temporelles

# Fonctions de manipulation des séries temporelles

Les fonctions ci-dessous sont conçues pour être utilisées avec les fonctions d’agrégation `timeSeries*()`, telles que
[`timeSeriesInstantRateToGrid`](/fr/reference/functions/aggregate-functions/timeSeriesInstantRateToGrid),
[`timeSeriesLastToGrid`](/fr/reference/functions/aggregate-functions/timeSeriesResampleToGridWithStaleness),
etc.

{/*AUTOGENERATED_START*/}

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

Introduite dans : v24.1.0

Décompose des données de série temporelle à l’aide de STL [(Seasonal-Trend Decomposition Procedure Based on Loess)](https://www.wessa.net/download/stl.pdf) en une composante saisonnière, une tendance et une composante résiduelle.

**Syntaxe**

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

**Arguments**

* `series` — Un tableau de valeurs numériques [`Array((U)Int8/16/32/64)`](/fr/reference/data-types/array) ou [`Array(Float*)`](/fr/reference/data-types/array)
* `period` — Un entier positif [`UInt8/16/32/64`](/fr/reference/data-types/int-uint)

**Valeur renvoyée**

Renvoie un tableau de quatre tableaux : le premier contient les composantes saisonnières, le deuxième la tendance, le troisième la composante résiduelle et le quatrième la composante de base (saisonnière + tendance). [`Array(Array(Float32), Array(Float32), Array(Float32), Array(Float32))`](/fr/reference/data-types/array)

**Exemples**

**Décomposer une série de données à l’aide de 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>

Introduite dans : v24.2.0

Détecte les valeurs aberrantes dans des données de série temporelle à l’aide des [bornes de Tukey](https://en.wikipedia.org/wiki/Outlier#Tukey%27s_fences).

**Syntaxe**

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

**Arguments**

* `series` — Un tableau de valeurs numériques. [`Array((UInt8/16/32/64))`](/fr/reference/data-types/array) ou [`Array(Float*)`](/fr/reference/data-types/array)
* `min_percentile` — Facultatif. Percentile minimal à utiliser pour calculer l'écart interquartile [(IQR)](https://en.wikipedia.org/wiki/Interquartile_range). La valeur doit être comprise dans l'intervalle \[0.02,0.98]. La valeur par défaut est 0.25. [`Float*`](/fr/reference/data-types/float)
* `max_percentile` — Facultatif. Percentile maximal à utiliser pour calculer l'écart interquartile (IQR). La valeur doit être comprise dans l'intervalle \[0.02,0.98]. La valeur par défaut est 0.75. [`Float*`](/fr/reference/data-types/float)
* `K` — Facultatif. Constante non négative permettant de détecter des valeurs aberrantes modérées ou plus prononcées. La valeur par défaut est 1.5. [`Float*`](/fr/reference/data-types/float)

**Valeur renvoyée**

Renvoie un tableau de la même longueur que le tableau d'entrée, dans lequel chaque valeur représente le score d'anomalie possible de l'élément correspondant de la série. Un score non nul indique une anomalie possible. [`Array(Float32)`](/fr/reference/data-types/array)

**Exemples**

**Détection de base des valeurs aberrantes**

```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] │
└───────────────────────────────────┘
```

**Détection des valeurs aberrantes avec des paramètres personnalisés**

```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>

Introduit dans : v23.12.0

Détecte la période des données de série temporelle fournies à l’aide de la FFT - [transformée de Fourier rapide](https://en.wikipedia.org/wiki/Fast_Fourier_transform)

**Syntaxe**

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

**Arguments**

* `series` — Un tableau de valeurs numériques. [`Array((U)Int8/16/32/64)`](/fr/reference/data-types/array) ou [`Array(Float*)`](/fr/reference/data-types/array)

**Valeur renvoyée**

Renvoie une valeur réelle égale à la période de la série. NaN lorsque le nombre de points de données est inférieur à quatre. [`Float64`](/fr/reference/data-types/float)

**Exemples**

**Détection de période avec un motif 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 │
└────────────────────────┘
```

**Détection de période avec un motif complexe**

```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>

Introduit dans : v26.1.0

Copie un tag donné d’un groupe de tags (`src_group`) vers un autre (`dest_group`).
La fonction remplace toute valeur précédente du tag copié dans `dest_group`.
Si le tag copié n’est pas présent dans `src_group`, la fonction le supprime également de `dest_group`.
La fonction reproduit la logique de copie des modificateurs prometheus
[group left/group right](https://prometheus.io/docs/prometheus/latest/querying/operators/#group-modifiers).

**Syntaxe**

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

**Arguments**

* `dest_group` — Le groupe de tags de destination. [`UInt64`](/fr/reference/data-types/int-uint)
* `src_group` — Le groupe source de tags. [`UInt64`](/fr/reference/data-types/int-uint)
* `tag_to_copy` — Le nom du tag à copier. [`String`](/fr/reference/data-types/string)

**Valeur renvoyée**

Renvoie un groupe de tags contenant ceux de `dest_group`, ainsi que les tags copiés depuis `src_group`. [`UInt64`](/fr/reference/data-types/int-uint)

**Exemples**

**Exemple**

```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>

Introduit dans : v26.1.0

Copie les tags spécifiés d’un groupe de tags (`src_group`) vers un autre (`dest_group`).
La fonction remplace toutes les valeurs précédentes des tags copiés dans `dest_group`.
Si certains des tags copiés ne sont pas présents dans `src_group`, la fonction les supprime également de `dest_group`.
La fonction reproduit la logique de copie des modificateurs Prometheus
[group left/group right](https://prometheus.io/docs/prometheus/latest/querying/operators/#group-modifiers).

**Syntaxe**

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

**Arguments**

* `dest_group` — Le groupe de tags de destination. [`UInt64`](/fr/reference/data-types/int-uint)
* `src_group` — Le groupe de tags source. [`UInt64`](/fr/reference/data-types/int-uint)
* `tags_to_copy` — Les noms des tags à copier. [`Array(String)`](/fr/reference/data-types/array)

**Valeur renvoyée**

Renvoie un groupe de tags contenant les tags de `dest_group`, ainsi que les tags copiés depuis `src_group`. [`UInt64`](/fr/reference/data-types/int-uint)

**Exemples**

**Exemple**

```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>

Introduit dans : v26.1.0

Extrait la valeur d’un tag spécifié dans le groupe. Renvoie NULL si le tag est introuvable.
Voir aussi la fonction [timeSeriesGroupToTags()](/fr/reference/functions/regular-functions/time-series-functions#timeSeriesGroupToTags).

**Syntaxe**

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

**Arguments**

* `group` — Un groupe de tags. [`UInt64`](/fr/reference/data-types/int-uint)
* `tag_to_extract` — Le nom d’un tag à extraire du groupe [`String`](/fr/reference/data-types/string)

**Valeur renvoyée**

Renvoie la valeur du tag spécifié. [`Nullable(String)`](/fr/reference/data-types/nullable)

**Exemples**

**Exemple**

```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>

Introduit dans : v25.8.0

Convertit un tableau de valeurs `[x1, x2, x3, ...]` en un tableau de tuples
`[(start_timestamp, x1), (start_timestamp + step, x2), (start_timestamp + 2 * step, x3), ...]`.

L’horodatage courant est incrémenté de `step` jusqu’à devenir supérieur à `end_timestamp`.
Si le nombre de valeurs ne correspond pas au nombre d’horodatages, la fonction déclenche une exception.

Les valeurs NULL dans `[x1, x2, x3, ...]` sont ignorées, mais l’horodatage courant est quand même incrémenté.
Par exemple, pour `[value1, NULL, x2]`, la fonction renvoie `[(start_timestamp, x1), (start_timestamp + 2 * step, x2)]`.

**Syntaxe**

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

**Arguments**

* `start_timestamp` — Début de la grille. [`DateTime64`](/fr/reference/data-types/datetime64) ou [`DateTime`](/fr/reference/data-types/datetime) ou [`UInt32`](/fr/reference/data-types/int-uint)
* `end_timestamp` — Fin de la grille. [`DateTime64`](/fr/reference/data-types/datetime64) ou [`DateTime`](/fr/reference/data-types/datetime) ou [`UInt32`](/fr/reference/data-types/int-uint)
* `step` — Pas de la grille en secondes [`Decimal64`](/fr/reference/data-types/decimal) ou [`Decimal32`](/fr/reference/data-types/decimal) ou [`UInt32/64`](/fr/reference/data-types/int-uint)
* `values` — Tableau de valeurs [`Array(Float*)`](/fr/reference/data-types/array) ou [`Array(Nullable(Float*))`](/fr/reference/data-types/array)

**Valeur renvoyée**

Renvoie les valeurs du tableau source, combinées à des horodatages sur une grille temporelle régulière définie par `start_timestamp` et `step`. [`Array(Tuple(DateTime64, Float64))`](/fr/reference/data-types/array)

**Exemples**

**Exemple d’utilisation**

```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>

Introduit dans : v26.4.0

Renvoie une clé d’échantillonnage `UInt64` stable dérivée des tags d’un groupe donné.

La valeur est déterministe : des tags d’entrée identiques produisent toujours la même clé.
Elle est conçue pour être utilisée comme clé de tri pour des opérateurs d’échantillonnage tels que `limitk` et `limit_ratio`.

**Syntaxe**

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

**Arguments**

* `group` — Un groupe de tags. [`UInt64`](/fr/reference/data-types/int-uint)

**Valeur renvoyée**

Un hachage `UInt64` stable dérivé des tags associés au groupe. [`UInt64`](/fr/reference/data-types/int-uint)

**Exemples**

**Exemple**

```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>

Introduite dans : v26.1.0

Renvoie les noms et les valeurs des tags associés à un groupe spécifié.
Voir aussi la fonction [timeSeriesTagsToGroup()](/fr/reference/functions/regular-functions/time-series-functions#timeSeriesTagsToGroup).

**Syntaxe**

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

**Alias** : `timeSeriesTagsGroupToTags`

**Arguments**

* `group` — Un groupe de tags. [`UInt64`](/fr/reference/data-types/int-uint)

**Valeur renvoyée**

Renvoie un tableau de paires `(tag_name, tag_value)`.
Le tableau renvoyé est toujours trié par `tag_name` et ne contient jamais le même `tag_name` plus d’une fois.
[`Array(Tuple(String, String))`](/fr/reference/data-types/array)

**Exemples**

**Exemple**

```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>

Introduit dans : v26.1.0

Renvoie les noms et les valeurs des tags associés à l’identifiant spécifié d’une série temporelle.
Voir aussi la fonction [timeSeriesStoreTags()](/fr/reference/functions/regular-functions/time-series-functions#timeSeriesStoreTags).

**Syntaxe**

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

**Alias** : `timeSeriesIdToTagsGroup`

**Arguments**

* `id` — Identifiant d’une série temporelle. [`UInt64`](/fr/reference/data-types/int-uint) ou [`UInt128`](/fr/reference/data-types/int-uint) ou [`UUID`](/fr/reference/data-types/uuid) ou [`FixedString(16)`](/fr/reference/data-types/fixedstring)

**Valeur renvoyée**

Renvoie un groupe de tags associé à l’identifiant `id` d’une série temporelle. [`UInt64`](/fr/reference/data-types/int-uint)

**Exemples**

**Exemple**

```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>

Introduit dans : v25.8.0

Renvoie les tags associés à l’identifiant spécifié d’une série temporelle.
Voir aussi la fonction [timeSeriesStoreTags()](/fr/reference/functions/regular-functions/time-series-functions#timeSeriesStoreTags).

**Syntaxe**

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

**Arguments**

* `id` — Identifiant d’une série temporelle. [`UInt64`](/fr/reference/data-types/int-uint) ou [`UInt128`](/fr/reference/data-types/int-uint) ou [`UUID`](/fr/reference/data-types/uuid) ou [`FixedString(16)`](/fr/reference/data-types/fixedstring)

**Valeur renvoyée**

Renvoie un tableau de paires `(tag_name, tag_value)`.
Le tableau renvoyé est toujours trié par `tag_name` et ne contient jamais le même `tag_name` plus d’une fois.
[`Array(Tuple(String, String))`](/fr/reference/data-types/array)

**Exemples**

**Exemple**

```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>

Introduite dans : v26.1.0

Concatène les valeurs des tags spécifiés, extraites d'un groupe de tags.
La fonction insère un séparateur entre les valeurs concaténées et renvoie un nouveau groupe de tags
avec le tag `dest_tag` défini sur la valeur concaténée.
Cette fonction reproduit la logique de la fonction Prometheus
[label\_join()](https://prometheus.io/docs/prometheus/latest/querying/functions/#label_join).

**Syntaxe**

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

**Arguments**

* `group` — Un groupe de tags. [`UInt64`](/fr/reference/data-types/int-uint)
* `dest_tag` — Le nom d’un tag contenant le résultat concaténé, qui sera ajouté au `group`. [`String`](/fr/reference/data-types/string)
* `separator` — Un séparateur à insérer entre les valeurs concaténées. [`String`](/fr/reference/data-types/string)
* `src_tags` — Les noms des tags sources contenant les valeurs à concaténer. [`Array(String)`](/fr/reference/data-types/array)

**Valeur renvoyée**

Renvoie un nouveau groupe de tags dans lequel le tag `dest_tag` est défini sur le résultat concaténé. [`UInt64`](/fr/reference/data-types/int-uint)

**Exemples**

**Exemple**

```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>

Introduit dans : v25.8.0

Génère une séquence d'horodatages \[start\_timestamp, start\_timestamp + step, start\_timestamp + 2 \* step, ..., end\_timestamp].

Si `start_timestamp` est égal à `end_timestamp`, la fonction renvoie un tableau d’un seul élément contenant `[start_timestamp]`.

La fonction `timeSeriesRange()` est similaire à la fonction [range](/fr/reference/functions/regular-functions/array-functions#range).

**Syntaxe**

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

**Arguments**

* `start_timestamp` — Début de la plage. [`DateTime64`](/fr/reference/data-types/datetime64) ou [`DateTime`](/fr/reference/data-types/datetime) ou [`UInt32`](/fr/reference/data-types/int-uint)
* `end_timestamp` — Fin de la plage. [`DateTime64`](/fr/reference/data-types/datetime64) ou [`DateTime`](/fr/reference/data-types/datetime) ou [`UInt32`](/fr/reference/data-types/int-uint)
* `step` — Pas de la plage, en secondes [`UInt32/64`](/fr/reference/data-types/int-uint) ou [`Decimal32/64`](/fr/reference/data-types/decimal)

**Valeur renvoyée**

Renvoie une plage d'horodatages. [`Array(DateTime64)`](/fr/reference/data-types/array)

**Exemples**

**Exemple d'utilisation**

```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>

Introduit dans : v26.1.0

Supprime tous les tags d’un groupe de tags, à l’exception de ceux spécifiés.
Voir aussi la fonction [timeSeriesRemoveTag()](/fr/reference/functions/regular-functions/time-series-functions#timeSeriesRemoveTag),
[timeSeriesRemoveTags()](/fr/reference/functions/regular-functions/time-series-functions#timeSeriesRemoveTags).

**Syntaxe**

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

**Arguments**

* `group` — Un groupe de tags. [`UInt64`](/fr/reference/data-types/int-uint)
* `tags_to_keep` — Les noms des tags à conserver dans le groupe. [`Array(String)`](/fr/reference/data-types/array)

**Valeur renvoyée**

Un nouveau groupe de tags dans lequel seuls les tags spécifiés sont conservés. [`UInt64`](/fr/reference/data-types/int-uint)

**Exemples**

**Exemple**

```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>

Introduit dans : v26.1.0

Supprime un tag donné d’un groupe de tags.
S’il n’existe pas de tag correspondant dans le groupe, celui-ci est renvoyé inchangé.
Voir aussi la fonction [timeSeriesRemoveTags()](/fr/reference/functions/regular-functions/time-series-functions#timeSeriesRemoveTags),
[timeSeriesRemoveAllTagsExcept()](/fr/reference/functions/regular-functions/time-series-functions#timeSeriesRemoveAllTagsExcept).

**Syntaxe**

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

**Arguments**

* `group` — Un groupe de tags. [`UInt64`](/fr/reference/data-types/int-uint)
* `tag_to_remove` — Le nom d’un tag à retirer du groupe. [`String`](/fr/reference/data-types/string)

**Valeur renvoyée**

Un nouveau groupe de tags sans le tag spécifié. [`UInt64`](/fr/reference/data-types/int-uint)

**Exemples**

**Exemple**

```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>

Introduit dans : v26.1.0

Supprime les tags spécifiés d’un groupe de tags.
Si certains des tags spécifiés ne sont pas présents dans le groupe de tags, la fonction les ignore.
Voir aussi la fonction [timeSeriesRemoveTag()](/fr/reference/functions/regular-functions/time-series-functions#timeSeriesRemoveTag),
[timeSeriesRemoveAllTagsExcept()](/fr/reference/functions/regular-functions/time-series-functions#timeSeriesRemoveAllTagsExcept).

**Syntaxe**

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

**Arguments**

* `group` — Un groupe de tags. [`UInt64`](/fr/reference/data-types/int-uint)
* `tags_to_remove` — Les noms des tags à supprimer du groupe. [`Array(String)`](/fr/reference/data-types/array)

**Valeur renvoyée**

Un nouveau groupe de tags ne contenant pas les tags spécifiés. [`UInt64`](/fr/reference/data-types/int-uint)

**Exemples**

**Exemple**

```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>

Introduit dans : v26.1.0

Fait correspondre l'expression régulière `regex` à la valeur du tag `src_tag`.
En cas de correspondance, la valeur du tag `dest_tag` dans le groupe renvoyé sera l'expansion de `replacement`,
ainsi que les tags d'origine de l'entrée.
Cette fonction reproduit la logique de la fonction Prometheus
[label\_replace()](https://prometheus.io/docs/prometheus/latest/querying/functions/#label_replace).

**Syntaxe**

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

**Arguments**

* `group` — Un groupe de tags. [`UInt64`](/fr/reference/data-types/int-uint)
* `dest_tag` — Le nom d’un tag de destination qui recevra le groupe résultant. [`String`](/fr/reference/data-types/string)
* `replacement` — Un motif de remplacement, pouvant contenir $1, $2 ou \$name pour référencer les groupes de capture dans l’expression régulière 'regex'. [`String`](/fr/reference/data-types/string)
* `src_tag` — Le nom d’un tag dont la valeur est utilisée pour la correspondance avec l’expression régulière 'regex'. [`String`](/fr/reference/data-types/string)
* `regex` — Une expression régulière. [`String`](/fr/reference/data-types/string)

**Valeur renvoyée**

Un nouveau groupe de tags, avec éventuellement `dest_tag` ajouté. [`UInt64`](/fr/reference/data-types/int-uint)

**Exemples**

**Exemple**

```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>

Introduit dans : v25.8.0

Stocke dans le contexte de la requête une association entre un identifiant donné de série temporelle et un ensemble de tags.
Les fonctions [timeSeriesIdToTags()](/fr/reference/functions/regular-functions/time-series-functions#timeSeriesIdToTags)
et [timeSeriesIdToGroup()](/fr/reference/functions/regular-functions/time-series-functions#timeSeriesIdToGroup)
peuvent être utilisées pour accéder à cette association par la suite lors de l'exécution de la requête.

**Syntaxe**

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

**Arguments**

* `id` — Identifiant d’une série temporelle. [`UInt64`](/fr/reference/data-types/int-uint) ou [`UInt128`](/fr/reference/data-types/int-uint) ou [`UUID`](/fr/reference/data-types/uuid) ou [`FixedString(16)`](/fr/reference/data-types/fixedstring)
* `tags_array` — Tableau de paires (tag\_name, tag\_value). [`Array(Tuple(String, String))`](/fr/reference/data-types/array) ou [`NULL`](/fr/reference/syntax#null)
* `separate_tag_name_i` — Le nom d’un tag. [`String`](/fr/reference/data-types/string) ou [`FixedString`](/fr/reference/data-types/fixedstring)
* `separate_tag_value_i` — La valeur d’un tag. [`String`](/fr/reference/data-types/string) ou [`FixedString`](/fr/reference/data-types/fixedstring) ou [`Nullable(String)`](/fr/reference/data-types/nullable)

**Valeur renvoyée**

Renvoie l’identifiant d’une série temporelle (c’est-à-dire simplement le premier argument).

**Exemples**

**Exemple**

```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>

Introduit dans : v26.1.0

Renvoyer un groupe de tags associé aux tags spécifiés.
Si le même groupe de tags est trouvé plusieurs fois lors de l'exécution de la requête, la fonction renvoie le même groupe.
Pour un ensemble vide de tags, la fonction renvoie toujours 0.
Voir aussi la fonction [timeSeriesGroupToTags()](/fr/reference/functions/regular-functions/time-series-functions#timeSeriesGroupToTags).

**Syntaxe**

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

**Arguments**

* `tags_array` — Tableau de paires (tag\_name, tag\_value). [`Array(Tuple(String, String))`](/fr/reference/data-types/array) ou [`NULL`](/fr/reference/syntax#null)
* `tag_name_i` — Le nom d’un tag. [`String`](/fr/reference/data-types/string) ou [`FixedString`](/fr/reference/data-types/fixedstring)
* `tag_value_i` — La valeur d’un tag. [`String`](/fr/reference/data-types/string) ou [`FixedString`](/fr/reference/data-types/fixedstring) ou [`Nullable(String)`](/fr/reference/data-types/nullable)

**Valeur renvoyée**

Renvoie un groupe de tags associé aux tags spécifiés. [`UInt64`](/fr/reference/data-types/int-uint)

**Exemples**

**Exemple**

```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>

Introduit dans : v26.2.0

Vérifie la `condition` et, si elle est vraie, lève une exception avec le message suivant :
`Multiple series have the same tags <tags>, duplicate series in the same result set are not allowed`.
Si la `condition` est fausse, la fonction renvoie `0`.
Cette fonction est similaire à [throwIf()](/fr/reference/functions/regular-functions/other-functions#throwIf),
mais utilise un code d’erreur différent et présente le message d’erreur différemment.

**Syntaxe**

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

**Arguments**

* `condition` — Condition à vérifier ; contient généralement la fonction [count()](/fr/reference/functions/aggregate-functions/count#count) [`UInt8`](/fr/reference/data-types/int-uint)
* `group` — Groupe de tags. [`UInt64`](/fr/reference/data-types/int-uint)

**Valeur renvoyée**

Renvoie `0`. [`UInt8`](/fr/reference/data-types/int-uint)

**Exemples**

**Exemple**

```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;  -- Throws exception "Multiple series have the same tags {'__name__': 'up'}"
```

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