Flux

Présentation

Langage propriétaire d’InfluxDB plus puissant qu’InfluxQL.

Support des jointures entre measurements.

Syntaxe fonctionnelle avec pipe (|>).

Plus éloigné de SQL mais plus expressif.

Structure d’une requête

Pattern de base :

from(bucket: "nom_bucket")
  |> range(start: -1h)
  |> filter(fn: (r) => r._measurement == "temperature")

Exemples de requêtes

Requête simple :

from(bucket: "meteo")
  |> range(start: -24h)
  |> filter(fn: (r) => r._measurement == "temperature")
  |> filter(fn: (r) => r.location == "paris")

Agrégation avec fenêtre temporelle :

from(bucket: "meteo")
  |> range(start: -7d)
  |> filter(fn: (r) => r._measurement == "temperature")
  |> aggregateWindow(every: 1h, fn: mean)

Groupement :

from(bucket: "meteo")
  |> range(start: -1d)
  |> filter(fn: (r) => r._measurement == "temperature")
  |> group(columns: ["location"])
  |> mean()

Opérations sur les buckets

Création de bucket :

buckets.create(name: "nouveau_bucket", retentionRules: [{everySeconds: 2592000}])

Suppression de bucket :

buckets.delete(id: "bucket_id")

Insertion de données :

import "influxdata/influxdb"
 
data = "temperature,location=paris value=22.5"
influxdb.write(bucket: "meteo", data: data)

Suppression de données :

from(bucket: "meteo")
  |> range(start: 2023-01-01T00:00:00Z, stop: 2023-12-31T23:59:59Z)
  |> filter(fn: (r) => r._measurement == "temperature")
  |> drop()