Можете ли вы удалить данные из 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) будет работать во многих случаях, но не будет работать, если записи, которые необходимо удалить, распределены по многим временным диапазонам и наборам тегов.
Более универсальный подход (хотя и более медленный) состоит в том, чтобы выдавать запросы на удаление один за другим с использованием другого языка программирования.
- Запросите все записи, которые нужно удалить (или используйте логику фильтрации в вашем скрипте)
-
Для каждой записи, которую вы хотите удалить:
- Извлеките время и набор тегов (игнорируйте поля)
-
Отформатируйте это в запрос, например
DELETE FROM "things" WHERE time=123123123 AND tag1='val' AND tag2='val'
Отправляйте каждый из запросов по одному