influxdb-client-python 的简单示例

问题描述 投票:0回答:1

我正在从 influxdb-client-python 代码库运行脚本

example.py
。它运行数据点并将其写入本地 influxDB 实例,仅用于测试和学习目的。 据我了解,这个脚本应该以两种不同的方式编写一个点:使用
line_protocol
(字符串)和
Point
数据结构。 我对
Point
数据结构没有任何问题;然而,
line_protocol
在1970年2月的某个地方写了一个点。恐怕这是WritePrecision的问题。也许在使用转换为
Datetime
line_protocol
对象时不应该指定它? 有人可以确认这种行为(如果这不是我这边的错误)并且这是预期的吗?非常感谢。

python influxdb influxdb-python influx-line-protocol
1个回答
0
投票

嗨,我有几个想法:

Point 对象行为:使用 Point 数据结构时,可以使用 datetime.now(tz=timezone.utc) 和 WritePrecision.MS 指定时间戳。 Point 对象确保时间戳以毫秒为单位正确格式化(自 Unix 纪元以来),正如 InfluxDB 所要求的。

line_protocol 行为:当您调用 p.to_line_protocol() 时,Point 对象中的时间戳已经转换为毫秒。但是,当您直接使用 write_api.write() 写入此字符串时,InfluxDB 假定时间戳以纳秒为单位(默认精度),除非您另外指定。

如果在此写入操作期间未指定 WritePrecision,则时间戳将被误解,导致日期为 1970 年 2 月(Unix 纪元时间戳不匹配的典型症状)。

解决方案:在写入line_protocol字符串时,需要显式指定WritePrecision以匹配line_protocol中使用的时间戳格式。

请测试一下:

enter code here
  write_api.write(bucket="my-bucket", record=line_protocol, 
  write_precision=WritePrecision.MS)

这可确保 InfluxDB 将 line_protocol 字符串中的时间戳正确解释为毫秒。 另外,当使用 Point 对象时,WritePrecision 是在内部管理的,因此不会出现问题。对于直接 line_protocol 写入,您必须始终确保 write_ precision 参数与时间戳的格式匹配。此行为是预期行为,而不是 InfluxDB 客户端库中的错误。这只是在使用 line_protocol 字符串时正确指定 WritePrecision 的问题。 祝你好运

© www.soinside.com 2019 - 2024. All rights reserved.