57

如何从 influxdb 中删除数据?

文档显示它应该很简单:

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

出于某种原因,influxdb 拒绝我的删除语句说“删除查询不能有不参考时间的 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"

文档参考

https://docs.influxdata.com/influxdb/v2.0/query-data/influxql/

更新

其他查询

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

4

11 回答 11

52

看来您可以在 influxdb 0.9 中执行此操作。例如,这是一个对我来说刚刚成功的查询:

DROP SERIES FROM temperature WHERE machine='zagbar'

(根据@MuratCorlu 的慷慨评论,我将我之前的评论重新发布为答案......)

于 2015-09-14T05:22:47.007 回答
29

有了influx,只能按时间删除

例如,以下内容无效:

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

更新:这适用于 influx 8。据说它不适用于 influx 9

于 2014-10-09T16:08:54.013 回答
16

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

文档

CREATE RETENTION POLICY <retention_policy_name> ON <database_name> DURATION <duration> REPLICATION <n> [DEFAULT]
于 2015-12-30T15:08:15.040 回答
9

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

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

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

由于覆盖是无缝进行的,因此您也可以追溯添加架构。噪音。

于 2016-01-14T11:27:53.243 回答
3

这适用于 InfluxDB shell 版本:1.8.2

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

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

InfluxDB 创建数据库并使用它

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

在 influxdb 中添加行并打印

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

从 influxdb 中删除标签的所有行

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

于 2020-08-20T08:45:10.170 回答
3

在 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'
于 2021-05-26T08:42:55.117 回答
2

接受的答案(DROP SERIES)适用于许多情况,但如果您需要删除的记录分布在许多时间范围和标签集中,则将不起作用。

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

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

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

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

      一次发送一个查询

于 2019-07-20T18:31:48.650 回答
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'
于 2021-04-11T07:09:59.647 回答
1

您只能使用您的时间字段删除,这是一个数字。

Delete from <measurement> where time=123456

将工作。记住不要给单引号或双引号。它是一个数字。

于 2018-06-22T09:15:50.200 回答
0

添加到已经给出好的答案;如果您使用的版本 >2.* 并且可以使用其 UI(通常在端口 8086 上):

  • 转到“数据”
  • 选择“桶”
  • 并选择您要管理的存储桶
  • 并给出如下所述的保留时间;

在此处输入图像描述

于 2022-01-29T23:11:26.487 回答
-1

我正在添加此命令作为参考,以更改 kubernetes k8s 中 InfluxDB 容器内的保留。使用 wget 是因为容器没有 curl 和 influx 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-
于 2018-03-14T09:03:05.343 回答