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

Как удалить данные из Influxdb?

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

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

По какой-то причине infxdb отклоняет мои операторы удаления, говоря, что «запросы на удаление не могут иметь предложение where, которое не ссылается на время»

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

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

введите описание изображения здесь

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

введите описание изображения здесь

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

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


person spuder    schedule 09.10.2014    source источник
comment
проблема с вашими запросами только 2. сначала вы не можете удалить из чего-либо, кроме времени, поэтому: ‹p› удалить из начальной загрузки, где продолжительность ›3000000 ‹p› не работает, и с этим запросом ‹p› удалить из начальной загрузки, где время› 1404141416824s ‹ p ›вы говорите, что это секунды, но это время в миллисекундах, поэтому вам нужно перейти на мс :)   -  person Ricardo Origin    schedule 15.12.2015
comment
Привет, @spuder, принятый ответ неверен. Есть ли шанс, что вы сможете выбрать ответ Джона Клементса как правильный?   -  person Dan Dascalescu    schedule 21.09.2016


Ответы (10)


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

DROP SERIES FROM temperature WHERE machine='zagbar'

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

person John Clements    schedule 14.09.2015
comment
Как ни странно, теперь это не работает для меня (немного другой запрос), сигнализируя об ошибке ERR: база данных не открыта - person John Clements; 04.10.2015
comment
Выглядит похоже (идентично?) github.com/influxdb/influxdb/issues/3087 , и аналогичным образом я вижу, что, хотя я получил сообщение об ошибке, удаление действительно прошло успешно. - person John Clements; 04.10.2015
comment
Я не понимаю, как отказ от серии является ответом, если вопрос включает временной интервал? - person Ryan The Leach; 28.02.2018
comment
Мне кажется, что вы могли бы указать временной интервал, используя пару предложений WHERE, нет? (NB: не пробовал, у InfxDB нет установленного банкомата). - person John Clements; 03.04.2019
comment
Я больше не работаю там, где этот вопрос актуален, поэтому не могу проверить. - person Ryan The Leach; 04.04.2019

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

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

#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.

person spuder    schedule 09.10.2014
comment
Я также с тревогой узнал, что Influxdb в настоящее время поддерживает только запросы, основанные на времени. - person dminer; 09.03.2015
comment
Что для меня не имеет смысла, так это то, что у этого запроса есть время: DELETE from foo where time = '2014-06-30 12:18:00' Но это не работает. Я попробовал время ›время‹, и он не жаловался на время, но удалил ВСЕ данные, которые были больше времени › - person VMcPherron; 23.05.2015
comment
Да, я обнаружил, что наплыв не зависит от времени. Вы не можете указать конкретное время, вам нужно указать диапазон, который окружает желаемую дату. - person spuder; 23.05.2015
comment
Привет, я не могу удалять строки по имени контейнера, можно? - person Undolog; 25.05.2015
comment
@spuder, думаю можно добавить ссылку на официальный документация. Полагаю, это может быть полезно тем, кто ищет ответ. - person Jimilian; 03.06.2015
comment
Похоже, Infxdb 0.9 может позволить использовать более гибкий язык запросов. Надеюсь, кто-то, кто знает больше меня, сможет это подтвердить ... - person John Clements; 02.09.2015
comment
Похоже, вы можете сделать это в Influxdb 0.9. Например, вот запрос, который мне только что удался: DROP SERIES FROM temperature WHERE machine = 'zagbar'; (извините за точку с запятой, это рефлекс ...) - person John Clements; 02.09.2015
comment
Привет, @JohnClements. У меня это сработало. Добавьте свой комментарий как новый ответ, чтобы сделать его более заметным. Спасибо - person Murat Çorlu; 11.09.2015
comment
+1 к @JohnClements за ввод объяснения точки с запятой вместо простого выхода (backspace). Теперь я не чувствую себя одиноким. - person Jason; 07.07.2016

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

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

CREATE RETENTION POLICY <retention_policy_name> ON <database_name> DURATION <duration> REPLICATION <n> [DEFAULT]
person Dan Esparza    schedule 30.12.2015
comment
Чтобы избежать возможной путаницы, эти ссылки политики хранения предназначены для InfluxDB 0.9, исходный плакат использует InfluxDB 0.8. Тем не менее, в InfluxDB 0.9 политики хранения - это абсолютно первый и лучший способ удаления данных, но, конечно, они должны быть предварительно настроены. - person beckettsean; 06.01.2016
comment
Кроме того, политики хранения удаляют данные только после того, как они установлены, они не удаляют предыдущие данные - однако эти данные находятся под другой политикой хранения и могут быть отброшены отдельно, поскольку данные старого и нового RP не перекрываются (если вы не намеренно и вручную копировать с одного на другой) - person Julian Knight; 29.04.2016

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

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

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

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

person Jason    schedule 14.01.2016
comment
Там, где есть воля, есть и способ. - person user7817808; 07.07.2017
comment
Однако поля не индексируются, поэтому для каждого запроса устанавливается стоимость каждой удаленной записи. Что может быть проблематичным, а может и не быть. - person Tommy; 20.09.2017
comment
Прекрасный. Я никогда не думал, что можно удалить, вставив новую точку, используя другое логическое значение! Блестяще! - person sivabudh; 21.07.2018
comment
Это отличная идея, но почему вы делаете это с полем вместо тега? - person max pleaner; 20.07.2019
comment
@maxpleaner - я использовал поле вместо тега, потому что, если бы я использовал тег, он появился бы как новая запись. например site=north,cabinet=3,server=2,foruse=True и site=north,cabinet=3,server=2,foruse=False будут двумя совершенно разными записями. - person Jason; 20.07.2019

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

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

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

    1. Extract the time and the tag set (ignore the fields)
    2. Отформатируйте это в запрос, например

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

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

person max pleaner    schedule 20.07.2019

Это для версии оболочки InfluxDB: 1.8.2

Удалить работает и без поля времени. Как видно из серии снимков экрана:

  1. Создаю БД и добавляю начать пользоваться.

InfluxDB создать БД и использовать ее

  1. Добавьте в него несколько строк. Проверьте, добавлены ли они.

Добавить строки в Influxdb и распечатать

  1. Удалите все с тегом Dev1 и проверьте то же самое.

Удалить все строки для тега из Influxdb

Примечание. Имя тега должно быть только в одинарных кавычках. Не вдвое.

person Arindam Roychowdhury    schedule 20.08.2020

В InfluxDB 2 команды InfluxQL, такие как DROP, не существуют (поддерживаются только запросы InfluxQL только для чтения). Вместо этого вам нужно использовать CLI или REST API.

Пример:

influx delete --bucket "MY BUCKET" --predicate '_measurement="MY_MEASUREMENT"' -o "MY ORG" --start '1970-01-01T00:00:00Z' --stop '2025-12-31T23:59:00Z'
person jrc    schedule 26.05.2021
comment
Мне пришлось добавить поле токена, чтобы оно работало. - person louis xie; 16.07.2021

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

Delete from <measurement> where time=123456

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

person Mahaveer Jangir    schedule 22.06.2018
comment
Это неверно, вы также можете указать теги в запросе на удаление. - person max pleaner; 20.07.2019

Запускаем infxdb и выбираем базу данных:

influx -databse '<database-name>'

Затем запустите запрос:

DELETE WHERE time < '2021-04-11 7:00:00'

или если вы хотите удалить данные из определенного measurement

DELETE FROM <measurement> WHERE time > '2014-06-30' and time < '2021-04-10 15:16:01'
person Benyamin Jafari    schedule 11.04.2021

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

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-
person Zaur    schedule 14.03.2018