如何在 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 _internal 数据库测量?