Influxdb umbenennen von Measurements

Aus Laub-Home Wiki

Die InfluxDB bringt leider keine Möglichkeit von Haus aus mit ein Measurement umzubenennen. Deshalb bleibt einem nichts anderes Übrig als einfach alle Daten von einem Measurement in ein Neues, oder bereits bestehendes zu übertragen und das Alte danach zu Löschen. Dies kann man entweder händisch oder mit dem unten stehenden Bash Script machen.

Manuelles Umbenennen

Nutzt ihr eine direkte Installation der InfluxDB dann startet einfach den client auf dem System:

influx

Bei einem Docker Setup:

docker exec -ti DOCKERCONTAINER_NAME influx

Nun ist man in der SQL Command line und sollte sich zunächst an die gewünschte Datenbank verbinden. Bei mir heißt diese openhab_db:

use openhab_db

wenn ihr nicht wisst wie euer Measurement heißt, könnt ihr euch eine Liste aller ausgeben lassen:

show measurements

nun können wir das Measurement umbenennen:

# Inhalt von OLD nach NEW
SELECT * INTO {NEWMEASUREMENT} FROM {OLDMEASUREMENT}
# löschen des OLD Measurement
drop {OLDMEASUREMENT}

## Beispiel
# Inhalt von DHT22_Temperature nach DHT22_Temperature1
SELECT * INTO DHT22_Temperature1 FROM DHT22_Temperature
# löschen des DHT22_Temperature Measurement
drop DHT22_Temperature

Umbenennen via Script

Download des Scriptes hier möglich: https://github.com/alaub81/openHAB/raw/master/rename-influxdb-measurement.sh

/usr/local/sbin/rename-influxdb-measurement.sh

#!/bin/bash
#########################################################################
#Name: rename-influxdb-measurement.sh
#Subscription: This Script renames influxdb measurements
#
#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 openhab3_influxdb_1 influx"
# InfluxDB Host
INFLUXHOST=localhost
# openHAB Database
INFLUXDB=openhab_db

OLDMEASUREMENT=$1
NEWMEASUREMENT=$2

# do the stuff
if [ "$1" = "" -o "$2" = "" ]; then
        echo -e "Usage: ${0} { OldMeasurementName } { NewMeasurementName }\n"
        exit
fi

# Rename MEASUREMENT
$INFLUX -host $INFLUXHOST -port '8086' -database $INFLUXDB -execute "SELECT * INTO $NEWMEASUREMENT FROM $OLDMEASUREMENT"
$INFLUX -host $INFLUXHOST -port '8086' -database $INFLUXDB -execute "DROP MEASUREMENT $OLDMEASUREMENT"
echo "deleted old measurement: $OLDMEASUREMENT"

wie immer dem Script das Execute rechte geben:

chmod +x /usr/local/sbin/rename-influxdb-measurement.sh

Dann das Script einfach starten, in dem man ihm den Alten Measurement Namen gibt und darauf gefolgt den Neuen Measurement Namen:

/usr/local/sbin/rename-influxdb-measurement.sh { OldMeasurementName } { NewMeasurementName }
# Beispiel
rename-influxdb-measurement.sh DHT22Temperature DHT22Temperature1