如何从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秒
这应该是一个有效的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
答案 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 只读查询)。相反,您需要使用 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'
答案 4 :(得分:1)
您只能使用时间字段(数字)进行删除。
Delete from <measurement> where time=123456
将起作用。切记不要给单引号或双引号。它是一个数字。
答案 5 :(得分:1)
可接受的答案(DROP SERIES)在许多情况下都可以使用,但是如果您需要删除的记录分布在许多时间范围和标签集中,则该答案将无效。
一种更通用的方法(尽管速度较慢)是使用另一种编程语言来逐个发出删除查询。
对于要删除的每个记录:
将此格式设置为查询,例如
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)