如何使用Golang InfluxDB Client写入指定_field字段的数据?
问题:InfluxDB写入时_field字段不符合预期的解决方法
希望向InfluxDB写入如下格式的数据点:
{ "_field": "some_uuid", "_value": float64, "_time": "2006-01-02T15:04:05.000Z" }但实际写入时,UUID被写入到了"field"字段,而非"_field"字段,且"_field"字段默认值为"value"。示例代码如下:
import ( "fmt" influxdb2 "github.com/influxdata/influxdb-client-go/v2" "time" ) type TagData struct { TagId string `json:"tag_id"` Value float64 `json:"value"` Timestamp string `json:"timestamp"` } func main() { inflClient := influxdb2.NewClient("my_url", "my_token") writeAPI := inflClient.WriteAPI("my_org", "my_bucket") data := TagData{ TagId: "d8f623a9-c255-4e0d-9c2f-126056875cef", Value: 300, Timestamp: "2023-12-11T15:35:42.343Z", } parsedTime, err := time.Parse("2006-01-02T15:04:05.000Z", data.Timestamp) if err != nil { fmt.Println("Error parsing time:", err) return } point := influxdb2.NewPointWithMeasurement("data"). AddTag("field", data.TagId). AddField("value", data.Value). SetTime(parsedTime.UTC()) writeAPI.WritePoint(point) writeAPI.Flush() inflClient.Close() }
解决方法
你代码的核心问题是混淆了InfluxDB的Tag和Field概念:你把UUID作为Tag添加,但实际上要让UUID成为_field字段的内容,必须把UUID作为Field的键,数值作为Field的值。
修正后的代码如下:
import ( "fmt" influxdb2 "github.com/influxdata/influxdb-client-go/v2" "time" ) type TagData struct { TagId string `json:"tag_id"` Value float64 `json:"value"` Timestamp string `json:"timestamp"` } func main() { inflClient := influxdb2.NewClient("my_url", "my_token") writeAPI := inflClient.WriteAPI("my_org", "my_bucket") data := TagData{ TagId: "d8f623a9-c255-4e0d-9c2f-126056875cef", Value: 300, Timestamp: "2023-12-11T15:35:42.343Z", } parsedTime, err := time.Parse("2006-01-02T15:04:05.000Z", data.Timestamp) if err != nil { fmt.Println("Error parsing time:", err) return } // 修改点:移除AddTag,将UUID作为Field的键传入 point := influxdb2.NewPointWithMeasurement("data"). AddField(data.TagId, data.Value). SetTime(parsedTime.UTC()) writeAPI.WritePoint(point) writeAPI.Flush() inflClient.Close() }
关键修正说明
- 删掉了
AddTag("field", data.TagId):不需要把UUID作为Tag存储 - 将
AddField("value", data.Value)改为AddField(data.TagId, data.Value):这样UUID就会成为_field字段的取值,对应的数值会写入_value字段,完全符合你想要的格式。
内容的提问来源于stack exchange,提问作者Motixa
相关产品推荐
相关产品推荐

