如何在 InfluxDB 中编辑测量值(= 带时间戳的值集)?
How do I edit a measurement (= set of values with timestamp) in InfluxDB?
我是 运行 Influx 数据库实例,它从各种来源收集数据。有时,此数据根本不正确,需要更正,否则以后的分析将失败 and/or 产生不正确的结果。然而,InfluxDB 的 SQL-like 方言没有更新功能,并且 "updating" 单个数据点只能通过使用另一个 INSERT 替换具有相同时间戳的数据点来实现。
为此,我正在寻找一种方法来在测量中批量编辑选定的数据点,而不会中断数据收集过程,这可能会在我编辑时插入新的数据点。这是我尝试过的:
- 我可以查询测量的子集以进行编辑,例如使用
SELECT * FROM measurement WHERE time > ...
使用 HTTP API 并且我得到了一个 JSON 文件,但是没有(明显的)方法来重新插入这个 JSON(编辑后)并替换更正测量值。
- 我可以使用
influx_inspect
导出整个数据库并重新导入它,但这太慢了。这样,200MB 的原始数据会膨胀到 >1GB 的线路协议数据,这对于纠正 2-3 个数据点来说太过分了。
还有其他想法吗?我可以在文本编辑器中编写脚本和编辑内容,但我不能为每个需要更正的数据点手动创建 INSERT。
由于似乎没有真正的解决方案,我已经编写了一个脚本来执行此操作。
当心,它真的很快'n'dirty,除了我自己的硬件之外未经任何测试,并且包含很多假设(例如本地主机上的数据库,可用的 Perl 等)。
https://gist.github.com/jensb/9efa234b80024a0e335de760d9a4f3aa
如果这是您需要经常做的事情,您可以查看 QuestDB(https://questdb.io/ or https://github.com/questdb/questdb 在 Github 上)。它是一个超快的时间序列数据库,但支持传统的 SQL CRUD 操作。
我是 运行 Influx 数据库实例,它从各种来源收集数据。有时,此数据根本不正确,需要更正,否则以后的分析将失败 and/or 产生不正确的结果。然而,InfluxDB 的 SQL-like 方言没有更新功能,并且 "updating" 单个数据点只能通过使用另一个 INSERT 替换具有相同时间戳的数据点来实现。
为此,我正在寻找一种方法来在测量中批量编辑选定的数据点,而不会中断数据收集过程,这可能会在我编辑时插入新的数据点。这是我尝试过的:
- 我可以查询测量的子集以进行编辑,例如使用
SELECT * FROM measurement WHERE time > ...
使用 HTTP API 并且我得到了一个 JSON 文件,但是没有(明显的)方法来重新插入这个 JSON(编辑后)并替换更正测量值。 - 我可以使用
influx_inspect
导出整个数据库并重新导入它,但这太慢了。这样,200MB 的原始数据会膨胀到 >1GB 的线路协议数据,这对于纠正 2-3 个数据点来说太过分了。
还有其他想法吗?我可以在文本编辑器中编写脚本和编辑内容,但我不能为每个需要更正的数据点手动创建 INSERT。
由于似乎没有真正的解决方案,我已经编写了一个脚本来执行此操作。 当心,它真的很快'n'dirty,除了我自己的硬件之外未经任何测试,并且包含很多假设(例如本地主机上的数据库,可用的 Perl 等)。
https://gist.github.com/jensb/9efa234b80024a0e335de760d9a4f3aa
如果这是您需要经常做的事情,您可以查看 QuestDB(https://questdb.io/ or https://github.com/questdb/questdb 在 Github 上)。它是一个超快的时间序列数据库,但支持传统的 SQL CRUD 操作。