Documentation

Go客户端库

使用InfluxDB Go 客户端库将 InfluxDB 集成到 Go 脚本和应用程序中。

本指南假设读者对Go和InfluxDB有一定的了解。
如果刚刚入门,请参见 开始使用InfluxDB

开始之前

  1. 安装 Go 1.13 或更高版本

  2. 将客户包添加到您的项目依赖中。

    # Add InfluxDB Go client package to your project go.mod
    go get github.com/influxdata/influxdb-client-go/v2
    
  3. 确保 InfluxDB 正在运行并且您可以连接到它。有关使用哪个 URL 连接到 InfluxDB OSS 或 InfluxDB Cloud 的信息,请参见 InfluxDB URLs

InfluxDB Go客户端库的样板代码

使用Go库从InfluxDB中写入和查询数据。

  1. 在你的Go程序中,导入必要的包并指定可执行程序的入口点。

    package main
    
    import (
        "context"
        "fmt"
        "time"
    
        "github.com/influxdata/influxdb-client-go/v2"
    )
    
  2. 为您的 InfluxDB bucketorganizationtoken 定义变量。

    bucket := "example-bucket"
    org := "example-org"
    token := "example-token"
    // Store the URL of your InfluxDB instance
    url := "http://localhost:8086"
    
  3. 创建 InfluxDB Go 客户端并传入 urltoken 参数。

    client := influxdb2.NewClient(url, token)
    
  4. 使用 写客户端 创建一个 WriteAPIBlocking 方法,并传入 orgbucket 参数。

    writeAPI := client.WriteAPIBlocking(org, bucket)
    
  5. 要查询数据,请创建一个 InfluxDB 查询客户端 并传入您的 InfluxDB org

    queryAPI := client.QueryAPI(org)
    

使用Go写入数据到InfluxDB

使用Go库将数据写入InfluxDB。

  1. 创建一个 point 并使用 API writer 结构体的 WritePoint 方法将其写入 InfluxDB。

  2. 关闭客户端以刷新所有待处理的写入并完成。

    p := influxdb2.NewPoint("stat",
      map[string]string{"unit": "temperature"},
      map[string]interface{}{"avg": 24.5, "max": 45},
      time.Now())
    writeAPI.WritePoint(context.Background(), p)
    client.Close()
    

完整示例编写脚本

func main() {
    bucket := "example-bucket"
    org := "example-org"
    token := "example-token"
    // Store the URL of your InfluxDB instance
    url := "http://localhost:8086"
    // Create new client with default option for server url authenticate by token
    client := influxdb2.NewClient(url, token)
    // User blocking write client for writes to desired bucket
    writeAPI := client.WriteAPIBlocking(org, bucket)
    // Create point using full params constructor
    p := influxdb2.NewPoint("stat",
        map[string]string{"unit": "temperature"},
        map[string]interface{}{"avg": 24.5, "max": 45},
        time.Now())
    // Write point immediately
    writeAPI.WritePoint(context.Background(), p)
    // Ensures background processes finishes
    client.Close()
}

使用Go从InfluxDB查询数据

使用Go库查询存储在InfluxDB中的数据。

  1. 创建一个 Flux 查询并传递 bucket 参数,参数值为您的存储桶名称。

    from(bucket:"<bucket>")
        |> range(start: -1h)
        |> filter(fn: (r) => r._measurement == "stat")
    

    查询客户端将Flux查询发送到InfluxDB,并以FluxRecord对象的表格结构返回结果。

查询客户端包含以下方法:

  • Query: 将 Flux 查询发送到 InfluxDB。
  • Next: 遍历查询响应。
  • TableChanged: 标识组键何时变化。
  • Record:返回最后解析的 FluxRecord,并提供对值和行属性的访问。
  • Value: 返回实际字段值。
result, err := queryAPI.Query(context.Background(), `from(bucket:"<bucket>")
    |> range(start: -1h) 
    |> filter(fn: (r) => r._measurement == "stat")`)
if err == nil {
    for result.Next() {
        if result.TableChanged() {
            fmt.Printf("table: %s\n", result.TableMetadata().String())
        }
        fmt.Printf("value: %v\n", result.Record().Value())
    }
    if result.Err() != nil {
        fmt.Printf("query parsing error: %s\n", result.Err().Error())
    }
} else {
    panic(err)
}

FluxRecord对象包含以下访问数据的方法:

  • Table(): 返回记录所属表的索引。
  • Start(): 返回当前表中所有记录的包含下限时间界限。
  • Stop(): 返回当前表中所有记录的独占上限时间界限。
  • Time(): 返回记录的时间。
  • Value() : 返回实际字段值。
  • Field(): 返回字段名称。
  • Measurement(): 返回记录的测量名称。
  • Values(): 返回一个列值的映射。
  • ValueByKey(): 返回给定列键的记录值。

完整示例查询脚本

 func main() {
    // Create client
    client := influxdb2.NewClient(url, token)
    // Get query client
    queryAPI := client.QueryAPI(org)
    // Get QueryTableResult
    result, err := queryAPI.Query(context.Background(), `from(bucket:"my-bucket")|> range(start: -1h) |> filter(fn: (r) => r._measurement == "stat")`)
    if err == nil {
        // Iterate over query response
        for result.Next() {
            // Notice when group key has changed
            if result.TableChanged() {
                fmt.Printf("table: %s\n", result.TableMetadata().String())
            }
            // Access data
            fmt.Printf("value: %v\n", result.Record().Value())
        }
        // Check for an error
        if result.Err() != nil {
            fmt.Printf("query parsing error: %s\n", result.Err().Error())
        }
    } else {
        panic(err)
    }
    // Ensures background processes finishes
    client.Close()
}

欲了解更多信息,请参阅 Go客户端的README在GitHub上



Flux的未来

Flux 正在进入维护模式。您可以像现在一样继续使用它,而无需对您的代码进行任何更改。

阅读更多

InfluxDB 3 开源版本现已公开Alpha测试

InfluxDB 3 Open Source is now available for alpha testing, licensed under MIT or Apache 2 licensing.

我们将发布两个产品作为测试版的一部分。

InfluxDB 3 核心,是我们新的开源产品。 它是一个用于时间序列和事件数据的实时数据引擎。 InfluxDB 3 企业版是建立在核心基础之上的商业版本,增加了历史查询能力、读取副本、高可用性、可扩展性和细粒度安全性。

有关如何开始的更多信息,请查看: