Saltar al contenido

Eliminar puntos con valores de campo no deseados de la medición de InfluxDB

La guía o código que verás en este artículo es la solución más sencilla y efectiva que hallamos a tus dudas o dilema.

Solución:

Esto todavía (2015 – 2020) no es posible en InfluxDB; consulte el ticket 3210.

Puede sobrescribir el punto con otros valores insertando en la medición un punto con la misma marca de tiempo y conjunto de etiquetas:

Un punto se identifica de forma única por el nombre de la medición, el conjunto de etiquetas y la marca de tiempo. Si envía un punto nuevo con la misma medida, conjunto de etiquetas y marca de tiempo que un punto existente, el conjunto de campos se convierte en la unión del conjunto de campos anterior y el conjunto de campos nuevo, donde los vínculos van al conjunto de campos nuevo. Este es el comportamiento previsto.

Como se supone que no debe insertar valores nulos, probablemente querrá repetir los valores de los puntos anteriores.

Puede pensar en insertar un punto con la misma marca de tiempo y establecer un valor único para una de las etiquetas, luego ejecutar una eliminación en esa etiqueta:

DELETE FROM measurement WHERE some_existing_tag='deleteme'

Aunque esto no funcionará. Cuando insertas ese segundo deleteme punto, tiene un conjunto de etiquetas diferente debido a la deleteme etiqueta, por lo que InfluxDB creará un nuevo punto para él. Entonces la DELETE el comando eliminará esopero no el punto original que desea eliminar.

enfoques caros

Sin intervalo de tiempo

# Copy all valid data to a temporary measurement
SELECT * INTO metrics_clean FROM metrics WHERE cpu!=-1

# Drop existing dirty measurement
DROP measurement metrics

# Copy temporary measurement to existing measurement
SELECT * INTO metrics FROM metrics_clean

con rango de tiempo

# Copy all valid data to a temporary measurement within timerange
SELECT * INTO metrics_clean FROM metrics WHERE cpu!=-1 and time > '' and time '';

# Delete existing dirty data within timerange
DELETE FROM metrics WHERE time > '' and time '';

# Copy temporary measurement to existing measurement
SELECT * INTO metrics FROM metrics_clean

Solución fea y lenta pero bastante robusta: almacenar marcas de tiempo, luego eliminar entradas por marca de tiempo, filtrar opcionalmente DELETE declaración con etiquetas adicionales.

nótese bien ¡esto solo funciona si los campos tienen marcas de tiempo únicas! Por ejemplo, si hay varios campos para una marca de tiempo, todos estos campos se eliminan con el siguiente comando. Utilizando epoch=ns prácticamente mitiga esto, a menos que tenga ~ mil millones de puntos de datos / segundo

curl -G 'http://localhost:8086/query?db=DATABASE&epoch=ns' 
  --data-urlencode "q=SELECT * FROM metrics WHERE cpu=-1" |
  jq -r "(.results[0].series[0].values[][0])" > delete_timestamps.txt

for i in $(cat delete_timestamps.txt); do
  echo $i;
  curl -G 'http://localhost:8086/query?db=DATABASE&epoch=ns' 
    --data-urlencode "q=DELETE FROM metrics WHERE time=$i AND cpu=-1"; 
done

valoraciones y comentarios

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *