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 核心数据库。
在您的编辑器中,打开一个名为
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) } }该示例执行以下操作:
导入以下包:
contextcrypto/x509encoding/jsonfmtosgithub.com/apache/arrow/go/v14/arrow/flight/flightsqlgoogle.golang.org/grpcgoogle.golang.org/grpc/credentialsgoogle.golang.org/grpc/metadata
创建一个
dbQuery函数,该函数执行以下操作:定义 InfluxDB 凭据变量。
url:InfluxDB 3 核心集群主机名和端口 (:443) (不含协议)database:要查询的 InfluxDB 3 核心数据库的名称。token:一个具有指定数据库读取权限的 数据库令牌。出于安全原因,我们建议将其设置为环境变量,而不是包含原始令牌字符串。
定义一个
opts选项列表,其中包括一个 gRPC 传输,用于通过 gRPC+TLS 协议与 InfluxDB 进行通信。使用
url和opts调用flightsql.NewClient()方法,创建一个新的 Flight SQL 客户端。将以下 InfluxDB 凭据作为键值对追加到传出的上下文中:
authorization:Bearer <INFLUX_TOKEN>database:数据库名称
定义要执行的 SQL 查询。
调用
client.execute()方法发送查询请求。使用查询响应中的票证调用
client.doGet()方法,从端点检索结果数据。创建一个 reader 来读取端点返回的 Arrow 表,并将结果以 JSON 格式打印出来。
创建一个
main模块函数,该函数执行dbQuery函数。
输入以下命令以安装所有必要的包并运行程序以查询 InfluxDB 3 核心:
go get ./... go run ./query.go
有关更多信息,请参阅 Go Arrow Flight 客户端文档。
此页面是否有帮助?
感谢您的反馈!
支持和反馈
感谢您成为我们社区的一员!我们欢迎并鼓励您对 InfluxDB 3 Core 和本文档提供反馈和错误报告。要获得支持,请使用以下资源
具有年度合同或支持合同的客户可以 联系 InfluxData 支持。