你能从Influxdb中删除数据吗?

spu*_*der 45 sql influxdb

如何从Influxdb中删除数据?

文档显示它应该像下面这样简单:

delete from foo where time < now() -1h
Run Code Online (Sandbox Code Playgroud)

出于某种原因,Influxdb拒绝我的删除语句说"删除查询不能有where子句不引用时间"

select * from bootstrap where duration > 1000 and time > 14041409940s and time < now()
Run Code Online (Sandbox Code Playgroud)

我想删除持续时间> 1000秒的这5个条目

在此输入图像描述

这应该是一个有效的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"
Run Code Online (Sandbox Code Playgroud)

文档参考

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;
Run Code Online (Sandbox Code Playgroud)

也许这是一个错误?

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

Joh*_*nts 39

看来你可以在Influxdb 0.9中做到这一点.例如,这是一个对我来说成功的查询:

DROP SERIES FROM temperature WHERE machine='zagbar'
Run Code Online (Sandbox Code Playgroud)

(根据@MuratCorlu的慷慨评论,我将我之前的评论作为回答......)

  • 当问题包含时间跨度时,我不明白如何删除系列是一个答案? (4认同)

spu*_*der 20

有了涌入,你只能按时间删除

例如,以下内容无效:

#Wrong
DELETE FROM foo WHERE time < '2014-06-30' and duration > 1000 #Can't delete if where clause has non time entity
Run Code Online (Sandbox Code Playgroud)

这就是我能够删除数据的方式

DELETE FROM foo WHERE time > '2014-06-30' and time < '2014-06-30 15:16:01'
Run Code Online (Sandbox Code Playgroud)

更新:这适用于涌入8.据说它不适用于涌入9

  • 我还惊讶地发现Influxdb目前只支持基于时间的查询. (3认同)
  • 看来你可以在Influxdb 0.9中做到这一点.例如,这是一个对我来说成功的查询:"DROP SERIES FROM温度WHERE machine ='zagbar';" (抱歉分号,这是反射......) (3认同)
  • 是的,我发现涌入的时间很多.您无法指定特定时间,您需要为其指定一个围绕所需日期的范围. (2认同)
  • @spuder,我想你可以添加一个链接到官方[文档](http://influxdb.com/docs/v0.7/api/query_language.html#deleting-data-or-dropping-series)。我想它可能对正在寻找答案的人有用。 (2认同)

Dan*_*rza 13

我很惊讶没有人提到关于自动数据删除的InfluxDB保留策略.您可以设置默认保留策略,也可以在每个数据库级别设置它们.

来自文档:

CREATE RETENTION POLICY <retention_policy_name> ON <database_name> DURATION <duration> REPLICATION <n> [DEFAULT]
Run Code Online (Sandbox Code Playgroud)

  • 为避免任何可能的混淆,这些保留策略链接适用于InfluxDB 0.9,原始海报使用InfluxDB 0.8.也就是说,在InfluxDB 0.9中,保留策略绝对是删除数据的第一个也是最好的方法,但当然它们必须预先配置. (2认同)
  • 此外,保留策略仅在设置后删除数据,它们不会删除以前的数据 - 但是,该数据属于不同的保留策略,并且可以单独删除,因为新旧RP的数据不重叠(除非您有意和手动)从一个复制到另一个) (2认同)

Jas*_*son 8

因为InfluxDB对删除有点痛苦,我们使用一个名为"ForUse"的布尔字段的模式,当通过行协议(v0.9)发布时,它看起来像这样:

your_measurement,your_tag=foo ForUse=TRUE,value=123.5 1262304000000000000
Run Code Online (Sandbox Code Playgroud)

您可以使用您发送的任何字段键覆盖相同的度量,标记键和时间,因此我们通过将"ForUse"设置为false来"删除",并让保留策略使数据库大小受到控制.

由于覆盖无缝地发生,您也可以追溯添加模式.在降噪.

  • 字段没有编入索引,因此每种查询都有一个每个删除条目的成本.哪个可能有问题,也可能没有问题. (4认同)
  • @maxpleaner - 我使用字段而不是标签,因为如果我使用标签,它将显示为新条目。例如`site=north,cabinet=3,server=2,foruse=True`和`site=north,cabinet=3,server=2,foruse=False`将是两个完全不同的记录。 (2认同)

jrc*_*jrc 5

在 InfluxDB 2 中,不存在类似的 InfluxQL 命令DROP(仅支持 InfluxQL 只读查询)。相反,您需要使用CLIREST 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'
Run Code Online (Sandbox Code Playgroud)