我在我的项目中使用了Influxdb,当我一次写入多个点时,我遇到了查询问题
我使用Influxdb-python为Influxdb写入1000个唯一的点。
在Influxdb-python中有一个名为influxclient.write_points()
的函数我现在有两个选择:
第一个选项代码如下所示(仅限伪代码),它可以工作:
thousand_points = [0...9999
while i < 1000:
...
...
point = [{thousand_points[i]}] # A point must be converted to dictionary object first
influxclient.write_points(point, time_precision="ms")
i += 1
写完所有要点之后,当我写这样的查询时:
SELECT * FROM "mydb"
我获得了所有1000分。
为了避免每次迭代中每次写入所增加的开销,我觉得要一次探索写多个点。这是write_points
函数支持的。
write_points(points,time_precision = None,database = None, retention_policy = None,tags = None,batch_size = None)
写入多个时间序列名称。
参数:points(字典列表,每个字典代表 a) - 要在数据库中写入的点列表
所以,我做的是:
thousand_points = [0...999]
points = []
while i < 1000:
...
...
points.append({thousand_points[i]}) # A point must be converted to dictionary object first
i += 1
influxclient.write_points(points, time_precision="ms")
通过此更改,当我查询:
SELECT * FROM "mydb"
结果只得到1分。我不明白为什么。
非常感谢任何帮助。
答案 0 :(得分:2)
您可能对SeriesHelper
实际上,您提前设置了SeriesHelper
课程,每次发现要添加的数据点时,都会拨打电话。 SeriesHelper
将为您批量写入,每次写入最多bulk_size
个点
答案 1 :(得分:0)
我知道这个问题已经一年多了,但是,为了将多个数据点批量发布到influxdb,每个数据点似乎需要一个唯一的时间戳,否则它将被连续覆盖。
我将导入一个datetime
并将以下内容添加到for loop
中的每个数据点:
'time': datetime.datetime.now().strftime("%Y-%m-%dT%H:%M:%SZ")
所以每个数据点应该看起来像...
{'fields': data, 'measurement': measurement, 'time': datetime....}
希望这对遇到此问题的其他人有帮助!
编辑:阅读文档后发现,另一个唯一的标识符是一个标记,因此,如果您希望指定时间,则可以添加{'tag' : i}
(假设每个迭代值都是唯一的)。 (但是我没有尝试过)