你能从Influxdb中删除数据吗?

时间:2014-10-09 00:32:09

标签: sql influxdb

如何从Influxdb中删除数据?

文档显示它应该简单:

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

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

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

我想要删除持续时间为&gt;的这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

9 个答案:

答案 0 :(得分:19)

使用涌入,您只能按时间删除

例如,以下内容无效:

#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

答案 1 :(得分:12)

我很惊讶没有人提到InfluxDB retention policies自动数据删除。您可以设置默认保留策略,也可以按数据库级别设置它们。

来自the docs

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

答案 2 :(得分:7)

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

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

您可以使用您发送的任何字段键覆盖相同的度量,标记键和时间,因此我们会执行&#34;删除&#34;通过设置&#34; ForUse&#34;为false,让保留策略控制数据库大小。

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

答案 3 :(得分:2)

在 InfluxDB 2 中,像 DROP 这样的 InfluxQL 命令不存在(仅支持 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'

答案 4 :(得分:1)

您只能使用时间字段(数字)进行删除。

Delete from <measurement> where time=123456

将起作用。切记不要给单引号或双引号。它是一个数字。

答案 5 :(得分:1)

可接受的答案(DROP SERIES)在许多情况下都可以使用,但是如果您需要删除的记录分布在许多时间范围和标签集中,则该答案将无效。

一种更通用的方法(尽管速度较慢)是使用另一种编程语言来逐个发出删除查询。

  1. 查询所有需要删除的记录(或在脚本中使用一些过滤逻辑)
  2. 对于要删除的每个记录:

    1. 提取时间和标签集(忽略字段)
    2. 将此格式设置为查询,例如

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

      一次发送每个查询

答案 6 :(得分:1)

运行 influxdb 并选择数据库:

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'

答案 7 :(得分:0)

我正在添加此命令作为参考,用于更改kubernetes k8s中InfluxDB容器内的保留。使用wget,因为容器没有卷曲和流入CLI

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-

答案 8 :(得分:0)

这是针对InfluxDB Shell版本:1.8.2

删除也没有时间字段。从一系列屏幕截图中可以看到:

  1. 我创建一个数据库并开始使用它。

InfluxDB create DB and use it

  1. 在其中添加一些行。验证是否添加了这些行。

Add rows in influxdb and print

  1. 删除所有带有标签“ Dev1”并进行验证。

Delete all rows for tag from influxdb

注意:标签名称只能用单引号引起来。不是两倍。