文档文档

Go Flight 客户端

Apache Arrow for Go 与 Go 脚本和应用程序集成,以查询存储在 InfluxDB 中的数据。

使用 InfluxDB 3 客户端库

我们建议使用 influxdb3-go Go 客户端库 将 InfluxDB 3 与您的 Go 应用程序代码集成。

InfluxDB 3 客户端库封装了 Apache Arrow Flight 客户端,并提供了用于 写入查询 和处理存储在 InfluxDB 3 Core 中的数据的便捷方法。客户端库可以使用 SQL 或 InfluxQL 进行查询。

Flight SQL 客户端

使用 Flight SQL 的示例查询

以下示例演示了如何使用 Arrow Flight SQL Go 客户端查询 InfluxDB 3 核心数据库。

  1. 在您的编辑器中,打开一个名为 query.go 的新文件,然后输入以下示例代码。

    package main
    
    import (
      "context"
      "crypto/x509"
      "encoding/json"
      "fmt"
      "os"
    
      "github.com/apache/arrow/go/v14/arrow/flight/flightsql"
      "google.golang.org/grpc"
      "google.golang.org/grpc/credentials"
      "google.golang.org/grpc/metadata"
    )
    
    func dbQuery(ctx context.Context) error {
      url := "localhost:8181:443"
    
      // INFLUX_TOKEN is an environment variable you created for your database READ token
      token := os.Getenv("INFLUX_TOKEN")
      database := "get-started"
    
      // Create a gRPC transport
      pool, err := x509.SystemCertPool()
      if err != nil {
        return fmt.Errorf("x509: %s", err)
      }
      transport := grpc.WithTransportCredentials(credentials.NewClientTLSFromCert(pool, ""))
      opts := []grpc.DialOption{
        transport,
      }
    
      // Create query client
      client, err := flightsql.NewClient(url, nil, nil, opts...)
      if err != nil {
        return fmt.Errorf("flightsql: %s", err)
      }
    
      ctx = metadata.AppendToOutgoingContext(ctx, "authorization", "Bearer "+token)
      ctx = metadata.AppendToOutgoingContext(ctx, "database", database)
    
      // Execute query
      query := `SELECT
        *
      FROM
        home
      WHERE
        time >= '2022-01-01T08:00:00Z'
        AND time <= '2022-01-01T20:00:00Z'`
    
      info, err := client.Execute(ctx, query)
      if err != nil {
        return fmt.Errorf("flightsql flight info: %s", err)
      }
      reader, err := client.DoGet(ctx, info.Endpoint[0].Ticket)
      if err != nil {
        return fmt.Errorf("flightsql do get: %s", err)
      }
    
      // Print results as JSON
      for reader.Next() {
        record := reader.Record()
        b, err := json.MarshalIndent(record, "", "  ")
        if err != nil {
          return err
        }
        fmt.Println("RECORD BATCH")
        fmt.Println(string(b))
    
        if err := reader.Err(); err != nil {
          return fmt.Errorf("flightsql reader: %s", err)
        }
      }
    
      return nil
    }
    
    func main() {
      if err := dbQuery(context.Background()); err != nil {
        fmt.Fprintf(os.Stderr, "error: %v\n", err)
        os.Exit(1)
      }
    }

    该示例执行以下操作:

    1. 导入以下包:

      • context
      • crypto/x509
      • encoding/json
      • fmt
      • os
      • github.com/apache/arrow/go/v14/arrow/flight/flightsql
      • google.golang.org/grpc
      • google.golang.org/grpc/credentials
      • google.golang.org/grpc/metadata
    2. 创建一个 dbQuery 函数,该函数执行以下操作:

      1. 定义 InfluxDB 凭据变量。

        • url:InfluxDB 3 核心集群主机名和端口 (:443) (不含协议)
        • database:要查询的 InfluxDB 3 核心数据库的名称。
        • token:一个具有指定数据库读取权限的 数据库令牌出于安全原因,我们建议将其设置为环境变量,而不是包含原始令牌字符串。
      2. 定义一个 opts 选项列表,其中包括一个 gRPC 传输,用于通过 gRPC+TLS 协议与 InfluxDB 进行通信。

      3. 使用 urlopts 调用 flightsql.NewClient() 方法,创建一个新的 Flight SQL 客户端。

      4. 将以下 InfluxDB 凭据作为键值对追加到传出的上下文中:

        • authorization:Bearer <INFLUX_TOKEN>
        • database:数据库名称
      5. 定义要执行的 SQL 查询。

      6. 调用 client.execute() 方法发送查询请求。

      7. 使用查询响应中的票证调用 client.doGet() 方法,从端点检索结果数据。

      8. 创建一个 reader 来读取端点返回的 Arrow 表,并将结果以 JSON 格式打印出来。

    3. 创建一个 main 模块函数,该函数执行 dbQuery 函数。

  2. 输入以下命令以安装所有必要的包并运行程序以查询 InfluxDB 3 核心:

    go get ./...
    go run ./query.go

查看程序输出

有关更多信息,请参阅 Go Arrow Flight 客户端文档


此页面是否有帮助?

感谢您的反馈!


InfluxDB 3.8 新特性

InfluxDB 3.8 和 InfluxDB 3 Explorer 1.6 的主要增强功能。

查看博客文章

InfluxDB 3.8 现已适用于 Core 和 Enterprise 版本,同时发布了 InfluxDB 3 Explorer UI 的 1.6 版本。本次发布着重于操作成熟度,以及如何更轻松地部署、管理和可靠地运行 InfluxDB。

更多信息,请查看

InfluxDB Docker 的 latest 标签将指向 InfluxDB 3 Core

在 **2026 年 2 月 3 日**,InfluxDB Docker 镜像的 latest 标签将指向 InfluxDB 3 Core。为避免意外升级,请在您的 Docker 部署中使用特定的版本标签。

如果使用 Docker 来安装和运行 InfluxDB,latest 标签将指向 InfluxDB 3 Core。为避免意外升级,请在您的 Docker 部署中使用特定的版本标签。例如,如果使用 Docker 运行 InfluxDB v2,请将 latest 版本标签替换为 Docker pull 命令中的特定版本标签 — 例如

docker pull influxdb:2