首页 > 解决方案 > influxdb 插入错误:float 类型,已作为整数类型存在 drop=1

问题描述

一些测量字段很少出现大于 0 的值,我们需要确保第一次插入一个浮点值,以确保 influxdb 将该字段分配为浮点数。因为如果我们对演员表不小心,就会发生这样的事情:

Traceback (most recent call last):
  File "./src/[REDACTED]", line 301, in <module>
    insert(test.results, test.results)
  File "./src/[REDACTED]", line 193, in upload
    ret = creds.write_points([{"measurement": "networks",
  File "/usr/local/src/[REDACTED]/venv/lib/python3.8/site-packages/influxdb/client.py", line 603, in write_points
    return self._write_points(points=points,
  File "/usr/local/src/[REDACTED]/venv/lib/python3.8/site-packages/influxdb/client.py", line 681, in _write_points
    self.write(
  File "/usr/local/src/[REDACTED]/venv/lib/python3.8/site-packages/influxdb/client.py", line 413, in write
    self.request(
  File "/usr/local/src/[REDACTED]/venv/lib/python3.8/site-packages/influxdb/client.py", line 378, in request
    raise InfluxDBClientError(err_msg, response.status_code)
influxdb.exceptions.InfluxDBClientError: 400: {"error":"partial write: field type conflict: input field \"example_field\" on measurement \"[REDACTED]\" is type float, already exists as type integer dropped=1"}

标签: influxdb

解决方案


如 influxdb 1.8文档中所述,更改字段类型很复杂。一个非常简单的解决方案是在使用适当的 cast 部署代码后更改其名称example_field2 = float(example_field),因此现在 example_field (int) 和 example_field2 (float) 可以共存(可能直到当前的分片存在?),并且 example_field2 应该带有 float 类型数据。


推荐阅读