Можете ли вы удалить данные из influxdb?

Как вы удаляете данные из influxdb?

Документация показывает, что она должна быть такой простой, как:

delete from foo where time < now() -1h

По какой-то причине, infuxdb отклоняет мои инструкции delete, говорящие: "В случае удаления запросов не может быть предложения where, которое не ссылается на время"

select * from bootstrap where duration > 1000 and time > 14041409940s and time < now()

Я хочу удалить эти 5 записей, продолжительность которых > 1000 секунд

enter image description here

Это должен быть действительный оператор sql, но он терпит неудачу

enter image description here

Ни одно из этих операторов удаления не работает либо

delete from bootstrap where duration > 3000000"

delete from bootstrap where duration > 300000"

delete from bootstrap where time = 1404140994043"

delete from bootstrap where duration > 300000 and time > 1404141054508 "

delete from bootstrap where duration > 300000 and time > 1404141054508s "

delete from bootstrap where time > 1404141054508s and duration > 300000 "

delete from bootstrap where duration > 30000 and time > 1s"

Ссылка на документацию

http://influxdb.com/docs/v0.8/api/query_language.html

Обновление

Дополнительные запросы

delete from bootstrap where time > 1404141416824 and duration > 3000;
delete sequence_number from bootstrap where time > 1s and duration > 1000;

Может, это ошибка?

https://github.com/influxdb/influxdb/issues/975
https://github.com/influxdb/influxdb/issues/84

Ответ 1

Похоже, вы можете сделать это в influxdb 0.9. Например, вот запрос, который мне только удалось:

DROP SERIES FROM temperature WHERE machine='zagbar'

(за щедрые комментарии от @MuratCorlu, я переписываю свой предыдущий комментарий как ответ...)

Ответ 2

При наплыве вы можете удалить только время

Например, следующие недопустимы:

#Wrong
DELETE FROM foo WHERE time < '2014-06-30' and duration > 1000 #Can't delete if where clause has non time entity

Вот как я смог удалить данные

DELETE FROM foo WHERE time > '2014-06-30' and time < '2014-06-30 15:16:01'

Обновление: это работало на приток 8. Предположительно, он не работает при притоке 9

Ответ 3

Я удивлен, что никто не упомянул политики хранения InfluxDB для автоматического удаления данных. Вы можете установить политику хранения по умолчанию, а также установить их на уровне каждой базы данных.

Из документов:

CREATE RETENTION POLICY <retention_policy_name> ON <database_name> DURATION <duration> REPLICATION <n> [DEFAULT]

Ответ 4

Поскольку InfluxDB немного мучительно относится к удалению, мы используем схему с булевым полем под названием "ForUse", которая выглядит так, когда вы отправляете по протоколу линии (v0.9):

your_measurement,your_tag=foo ForUse=TRUE,value=123.5 1262304000000000000

Вы можете перезаписать те же самые измерения, тег-ключ и время с помощью любых полевых ключей, которые вы отправляете, поэтому мы "удаляем", устанавливая значение "ForUse" равным false, и позволяя политике хранения поддерживать размер базы данных под контролем.

Так как перезапись происходит без проблем, вы можете ретроактивно добавить схему тоже. Noice.

Ответ 5

Вы можете удалить только с вашим полем времени, которое является числом.

Delete from <measurement> where time=123456

буду работать. Помните, чтобы не давать одинарные или двойные кавычки. Это номер.

Ответ 6

Я добавляю эти команды в качестве ссылки для изменения хранения внутри контейнера InfluxDB в kubernetes k8s. wget используется для того, чтобы контейнер не имел CLI curl и flow

wget 'localhost:8086/query?pretty=true' --post-data="db=k8s;q=ALTER RETENTION POLICY \"default\" on \"k8s\" duration 5h shard duration 4h default" -O-

верификация

wget 'localhost:8086/query?pretty=true' --post-data="db=k8s;q=SHOW RETENTION POLICIES" -O-

Ответ 7

Принятый ответ (DROP SERIES) будет работать во многих случаях, но не будет работать, если записи, которые необходимо удалить, распределены по многим временным диапазонам и наборам тегов.

Более универсальный подход (хотя и более медленный) состоит в том, чтобы выдавать запросы на удаление один за другим с использованием другого языка программирования.

  1. Запросите все записи, которые нужно удалить (или используйте логику фильтрации в вашем скрипте)
  2. Для каждой записи, которую вы хотите удалить:

    1. Извлеките время и набор тегов (игнорируйте поля)
    2. Отформатируйте это в запрос, например

      DELETE FROM "things" WHERE time=123123123 AND tag1='val' AND tag2='val'
      

      Отправляйте каждый из запросов по одному