如何在 InfluxDB 中编辑测量值(= 带有时间戳的值集)?

Posted

技术标签:

【中文标题】如何在 InfluxDB 中编辑测量值(= 带有时间戳的值集)?【英文标题】:How do I edit a measurement (= set of values with timestamp) in InfluxDB? 【发布时间】:2020-07-29 13:07:15 【问题描述】:

我正在运行一个从各种来源收集数据的 Influx 数据库实例。有时,这些数据根本不正确,需要更正,否则以后的分析将失败和/或产生不正确的结果。但是,InfluxDB 的类 SQL 方言没有 UPDATE 功能,“更新”单个数据点只能通过使用另一个 INSERT 替换具有相同时间戳的数据点来实现。

为此,我正在寻找一种方法来批量编辑测量中的选定数据点,而不会中断可能在我编辑时插入新数据点的数据收集过程。这是我尝试过的:

我可以查询测量的子集以进行编辑,例如使用SELECT * FROM measurement WHERE time > ... 使用 HTTP API,我得到一个 JSON 文件,但没有(明显的)方法可以重新插入此 JSON(在编辑后)并替换更正的测量值。 我可以使用influx_inspect 导出整个数据库并重新导入,但这太慢了。这样一来,200MB 的原始数据就会被放大到超过 1GB 的线路协议数据,这对于纠正 2-3 个数据点来说太过分了。

还有其他想法吗?我可以在文本编辑器中编写脚本和编辑内容,但我不适合为每个需要更正的数据点手动创建 INSERT。

【问题讨论】:

InfluxDB 通常不设计为“更新繁重”,但在插入操作方面确实表现出色。我通常会假设,您最好在将数据实际插入数据库之前“更正”数据。这怎么可能? 一些数据馈送是相机馈送的 OCR 引擎。这个引擎偶尔会出错,OCR 并不完美。这些是罕见的,但如果它们发生,它们会破坏所有统计数据和推断。一个例子见这里:forum.iobroker.net/topic/23577/wasserz%C3%A4hler-selfmade 【参考方案1】:

由于似乎没有真正的解决方案,因此我编写了一个脚本来执行此操作。 当心,它真的是又快又脏,除了我自己的硬件外未经测试,并且包含很多假设(例如,本地主机上的数据库、可用的 Perl 等)。

https://gist.github.com/jensb/9efa234b80024a0e335de760d9a4f3aa

【讨论】:

【参考方案2】:

如果这是您需要做的很多事情,您可以查看 QuestDB(Github 上的https://questdb.io/ 或 https://github.com/questdb/questdb)。这是一个超快的时序数据库,但支持传统的 SQL CRUD 操作。

【讨论】:

看起来不错。是否支持 Grafana 可视化、IOBroker 等? 所以,我们现在有了一个 grafana 插件——只是等待他们合并它——但是在新的 5.0.3 版本中,我们的 postgres 有线协议支持非常好,你可以使用 postgres 插件.

以上是关于如何在 InfluxDB 中编辑测量值(= 带有时间戳的值集)?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 InfluxDB 中创建测量

从 InfluxDB 测量中删除具有不需要的字段值的点

获取测量的标签值 - influxDB

如何查询所有 InfluxDB _internal 数据库测量?

influxDB:如何在 influxDB v2.0 中将字段转换为标签

通过 WinHttpRequest 将多个测量值发布到 influxDB 的正确行分隔符是啥?