如何从influxdb中删除特定的数据行

3
我有一些不必要的influxdb数据,例如一些值为“0”的值,那么我该如何删除这些特定的值。我的数据库名称是“bootstrap”,测量名称是“response_time”。
尝试使用以下命令:“delete from response_time where time > 2016-01-22T06:32:44Z”,但是它会显示错误:“服务器返回错误:解析查询时发生错误:在第1行,第44个字符处找到-01,期望SELECT、DELETE、SHOW、CREATE、DROP、GRANT、REVOKE、ALTER、SET”
也尝试过这个命令:“delete from bootstrap where time > 2016-01-22T06:32:44Z”。
1个回答

2
InfluxDB的当前版本在删除方面有些棘手。您可以删除整个测量、特定系列、整个数据库或早于“x”(保留策略)的一部分系列。比这更细粒度的操作仍处于测试阶段。显然,在v 0.7中它更加灵活,但该功能已经消失了。可能不是您希望得到的答案,抱歉。
请参见此处:

https://docs.influxdata.com/influxdb/v0.9/query_language/database_management/

“不要介意,接下来是无耻的自我宣传。”
“类似的问题已经在这里提出(链接)。请注意:某些答案似乎取决于您使用的InfluxDB版本。”
“我的答案似乎与版本无关(至少目前是这样的):”
由于InfluxDB在删除方面有点棘手,因此我们使用一个具有名为“ForUse”的布尔字段的模式,当通过行协议(v0.9)发布时,它看起来像这样:
your_measurement,your_tag=foo ForUse=TRUE,value=123.5 1262304000000000000

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

由于覆盖是无缝的,因此您也可以事后添加模式。不错。


这样做,您可以设置Grafana查询以包括“WHERE ForUse = TRUE”。通过这种方式过滤,并更新“ForUse”字段,您可以复制“删除”或“取消删除”点的功能。
虽然有些笨拙,但我已经习惯了 - 我使用过的每个时间序列数据库似乎都在部分删除方面有些棘手,所以这一定是它们本质的一些东西。

我如何为现有数据添加“ForUse”字段? - Vishal Puliani
很希望在InfluxDB中有一个"alter table add column..."的命令,但实际上并没有。相反,你需要覆盖现有记录。因此,在每个SELECT * FROM ...查询的每一行中,你需要构建一个写入命令(很可能使用http api),包括相同的时间戳、标签键、标签值,并追加"ForUse"值。有点麻烦,但完全可行。 - Jason
哦!我看到自从0.9版本以来事情已经发生了变化。现在只需要复制标签键和时间戳即可添加点,不需要复制字段。请参见此处:https://docs.influxdata.com/influxdb/v0.10/troubleshooting/frequently_encountered_issues/#writing-duplicate-points - Jason
谢谢,看起来很有帮助。但是我如何在InfluxDB中编写新的数据点呢? - Vishal Puliani
我不确定我理解这个问题。你的意思是现有的写入InfluxDB的应用程序需要哪些修改吗?每个当前正在写入的值也需要写入一个“ForUse”布尔值。这可以由应用程序计算,或默认为True,并且其他应用程序或手动选择可以根据需要覆盖ForUse。 - Jason
1
这在Influx 1.0中没有得到任何改善。关于“我使用过的每个时间序列数据库似乎都对部分删除有些笨拙,所以这一定是它们本质上的问题”的评论 - 你尝试过Axibase吗?它支持null,不像InfluxDB。 - Dan Dascalescu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接