Deleting multiple records from InfluxDB

weil ich eben die influx-history mit löscheinzeilern zugespammt habe, gelobe ich besserung und habe dafür ein skript gebastelt (bzw. llm-basiert basteln lassen, überarbeitet, getestet; transparenz als mindest-best-practice im umgang mit “ki”), mit dem das löschen vieler einzelner zeitstempel in einer zeile passiert.

gelöscht werden soll eine liste von zeitstempeln, die ich in influx z.b. so erhebe (mehr nützliches influx-handwerkszeug ist vorgestellt in “ausreißer erkennen und ggf. beheben”):

select "weight hive1" from xyz_sensors where "weight hive1" < 42 and time >= 1708000000000000000

ab damit in die datei del.csv:

1704805766784202757 35.89
1704806255190894572 41.9
1704979020013475236 39.47
1704979135911656977 41.39
...

der prompt ist gespeichert in output.txt und sieht so aus, der ist auch gleich schon im clipboard:

delete from mois_yun_sensors where time = 1704805766784202757; delete from mois_yun_sensors where time = 1704806255190894572; delete from mois_yun_sensors where time = 1704979020013475236; delete from mois_yun_sensors where time = 1704979135911656977; ...

das bash-skript dafür sieht so aus und erwartet die datei del.csv im gleichen verzeichnis:

#
# Skript zur Herstellung eines Multi-Löschprompts für die CLI von influx1
# Creation supported by https://chat.openai.com/share/8eb558bb-820b-4fda-be56-f855ced20969
# 
# Script benötigt: 
# >apt install xclip
# Außerdem muss weiter unten der Name der Eingabedatei korrekt gesetzt sein.
#
# Howto:
# Zuerst die Zeitstempel aller zu löschenden Punkte suchen, z.B.:
# > select "weight hive1" from xyz_sensors where "weight hive1" < 42 and time >= 1708000000000000000
# Ausgabe in file del.csv schreiben
# Script im gleichen Verzeichnis ausführen, die Bildschirmausgabe ist der Löschprompt.
# Der Löschprompt ist in der Datei output.txt gespeichert und in den Arbeitsspeicher
# kopiert.
#
###### Name der Eingabedatei
input_file="del.csv"
######

# Überprüfen, ob die dritte Zeile nur Leerzeichen und Bindestriche enthält
third_line=$(sed -n '4p' "$input_file") # Beachten Sie, dass die Zählung der Zeilen in sed bei 1 beginnt
if [[ "$third_line" =~ ^[[:space:]-]+$ ]]; then
    # Wenn ja, lösche die ersten drei Zeilen
    sed -i '1,3d' "$input_file"
fi

# Führe die ursprüngliche Transformation aus und speichere die Ausgabe in einer Variablen
output=$(awk '{printf("%s%s", (NR==1) ? "delete from mois_yun_sensors where time = " : "; delete from mois_yun_sensors where time = ", $1)}' "$input_file")

# Gib die Ausgabe auf dem Bildschirm aus
echo "$output"

# Speichere die Ausgabe in einer temporären Datei
echo "$output" > output.txt

# Kopiere den Inhalt der Ausgabedatei in den Arbeitsspeicher
cat output.txt | xclip -selection clipboard

influx braucht eine sekunde für circa 2-3 löschbefehle. löscht man also ein paar hundert zeitstempel, dann dauert das eine ganze weile. influx gibt am prompt dazu kein feedback. also einfach geduldig warten. irgendwann ists durch.

3 Likes

Ohje, vielen Dank für Deinen Einsatz. Vielleicht gibt es ja bald mal ein Backend mit besserem SQL Support, damit solche Klimmzüge nicht mehr nötig sind.

[CrateDB] Add support for data acquisition and data export by amotl · Pull Request #148 · daq-tools/kotori · GitHub