Daten in InfluxDB verändern

Ich nutze zum Speichern von Daten die InfluxDB ab Version 2.x. Immer wieder passiert es, dass von einem der Sensoren ein falscher Wert oder im schlimmsten Fall ein ganzer Zeitraum mit falschen Werten geliefert und gespeichert wird. Um bei späteren Auswertungen z.B. mit Grafana keine komischen Grafiken zu erhalten möchte ich diese Werte korrigieren. Im folgenden Beitrag zeige ich, wie man das machen kann.

Fehlerhafte Daten identifizieren

Im ersten Schritt muss man herausfinden, wo die fehlerhaften Daten sind. Ich verwende hierzu die InfluxDB UI. Alternativ kann man das auch über Grafana machen.

Dazu wähle ich im Data-Explorer für mein Bucket als erstes das Measurement und das Feld im Query Builder aus. Wichtig ist, dass man anschließend in den Script Editor wechselt und dort die Aggregate-Zeile löscht. Denn sonst erhält man aggregierte Werte über den voreingestellten Zeitraum.

In der anschließenden Grafik sieht man sehr deutlich Ausreißer, die man nun durch Klicken, Festhalten und Ziehen der linken Maustaste im Grafikfenster  näher eingrenzen kann.

Durch Klicken auf den Zeitbereich und dort auf "Custom Time Range" kann man den Zeitraum dann exakt einstellen, der jetzt von Interesse ist.

Alternativ kann man auch einfach eine zusätzliche Filterfunktion angeben. In meinem Beispiel habe ich nach Werten gesucht die kleiner Null sind.

Das Script sieht dann beispielsweise wie folgt aus:

Copy to Clipboard

Nun schalte ich um auf die RAW-Data Ansicht und erhalte den Datenpunkt mit allen Details, der fehlerhaft ist.

Wert ändern

Wenn ich den Wert  nur ändern möchte, dann nutze ich die Möglichkeit der InfluxDB-UI, Werte einfach überschreiben zu können.

Hierzu benötigt man

  • den Namen des Measurements
  • den Namen des Fields sowie den neuen Wert
  • den exakten Timestamp im UNIX-Form mit Millisekunden (ich speichere alle Werte immer nur maximal mit Millisekunden ab).

All diese Daten sind verfügbar, einzig die Zeitangabe für den fehlerhaften Wert muss umgerechnet werden. Dazu verwendet man z.B, die Webseite https://it-tools.tech/date-converter. Mein falsche Zählerstand wurde am "2023-08-03T15:45:06.018Z" (_Time-Spalte) gespeichert. Umgerechnet ins UNIX-Format mit Millisekunden  erhalte ich die Zahl "1691077506018" (bitte Timestamp Feld des Konverters mit den Millisekunden verwenden und nicht das Unix-Feld).

Nun geht man in der InfluxDB-UI auf den Menüpunkt "Load Data / Sources" und wählt dort "Line Protocol" aus. Hier wählt man den Bucket, in dem sich das Measurement befindet, anschließend die Option "Enter manually" und stellt die Zeitangabe auf "precision milliseconds" (wer hier andere Genauigkeiten verwendet, stellt das entsprechend anders ein und rehnet dann auch die Zeit mit anderen Genauigkeiten um).

Jetzt kann ich den folgenden Befehl eingeben, um die falsche Daten zu korrigieren und drücke anschließend "Write Data":

"Erzeugung.HDach.Strom.Zaehlerstand value=875.5 1691077506018"

Es sollte im Anschluss eine grüne Erfolgsmeldung erscheinen und der Wert in der InfluxDB für diesen Zeitstempel wurde den Wert 875.5 geändert

Wert löschen

Alternativ kann ich den Wert auch löschen. Dies geht beispielsweise mit dem curl-Befehl.  Sofern man Windows nutzt, kann man das curl-Kommandozeilen-Tool über den Link https://curl.se/windows/  installieren. Der Befehl, um einenDatensatz mittels curl-Befehl zu löschen sieht wie folgt aus:

Copy to Clipboard

Alternativ kann man auch über die influxdb-Konsole einen Löschbefehl ausführen. Ich rufe z.B. in dem Docker Container, in dem influxdb läuft eine bash-Console auf und gebe einfach den folgenden Befehl ein:

influx delete --token --org --bucket nodered --start 2023-08-03T15:45:06.018Z --stop 2023-08-03T15:45:06.018Z --predicate '_measurement="Erzeugung.HDach.Strom.Zaehlerstand"'

In beiden Fällen würde der Eintrag aus der Datenbank gelöscht.

Ergebnis

Ich habe mittlerweile ganze Zeitreihen angepasst, in dem ich über Excel ganz viele Befehlszeilen generiert, in den Line-Protocol-Konsole geladen und anschließend ausgeführt habe.  Die Vorgehensweise ist immer die gleiche, egal ob man einen oder mehrere Werte anpasst.

Teile diesen Beitrag