InfluxDB – Script zur Datensatzlöschung

Das Löschen einzelner Datensätze aus einem Measurement ist etwas umständlich zu formulieren. Ich habe im Netz ein Script zur Löschung von Datensätzen in Influx-DB gefunden: https://lhlab.wiki/wiki/Influxdb_falsche_Werte_löschen .

Damit lässt sich das einigermaßen zügig im InfluxDB-Container erledigen.

Ich habe es z. B. verwendete, um aus dem Measurement iob_Solar_Temperatur_Kollektor alle Messwerte mit einem Wert größer 90 Grad Celsius zu löschen. Der Grund war, dass ich versehentlich in der Tabelle auch die Messwerte für die Gesamtleistung der Solaraufbereitung gespeichert hatte. 

Zur Ausführung des Scripts habe ich mich mittels Portainer im Influx-DB-Server angemeldete unn das Script erstellt und ausführen lassen.

sudo vi delete-wrong-influxdb-measurements.sh

#!/bin/bash
#########################################################################
#Name: delete-wrong-influxdb-measurements.sh
#Subscription: This Script deletes measurements in influxdb which are too high or too small.
#
#by A. Laub
#andreas[-at-]laub-home.de
#
#License:
#This program is free software: you can redistribute it and/or modify it
#under the terms of the GNU General Public License as published by the
#Free Software Foundation, either version 3 of the License, or (at your option)
#any later version.
#This program is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
#or FITNESS FOR A PARTICULAR PURPOSE.
#########################################################################
#Set the language
export LANG="en_US.UTF-8"
#Load the Pathes
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

#set the variables:

# InfluxDB Command
INFLUX="docker exec -ti influxdb influx"
# InfluxDB Host
INFLUXHOST=localhost
# influxdb Database
INFLUXDB=iobroker
# influxdb measurement
INFLUXDBMEASUREMENT=iob_Solar_Temperatur_Kollektor
# influxdb wrong value (<;>;=)
INFLUXDBWRONGVALUE="> 90"
#INFLUXDBWRONGVALUE="> 100"
#INFLUXDBWRONGVALUE="= 0"

# do the stuff
for i in $($INFLUX -host $INFLUXHOST -port '8086' -database $INFLUXDB -execute "select * from $INFLUXDBMEASUREMENT where value $INFLUXDBWRONGVALUE" | grep -i ^[0-9] | cut -d' ' -f1); do
        $INFLUX -host $INFLUXHOST -port '8086' -database $INFLUXDB -execute "delete from $INFLUXDBMEASUREMENT where time = $i"
        echo "deleting $i"
done