Go Flight 客户端
Apache Arrow for Go 与 Go 脚本和应用集成,用于查询存储在 InfluxDB 中的数据。
使用 InfluxDB v3 客户端库
我们建议使用 influxdb3-go
Go 客户端库 来将 InfluxDB v3 与您的 Go 应用程序代码集成。
InfluxDB v3 客户端库 包装 Apache Arrow Flight 客户端,并提供方便的方法来写入、查询和处理存储在 InfluxDB Clustered 中的数据。客户端库可以使用 SQL 或 InfluxQL 进行查询。
Flight SQL 客户端
使用 Flight SQL 的示例查询
以下示例展示了如何使用 Go 的 Arrow Flight SQL 客户端来查询 InfluxDB Clustered 数据库
在您的编辑器中,打开一个名为
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 := "cluster-host.com: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) } }
该示例执行以下操作
导入以下包
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
创建一个
dbQuery
函数,执行以下操作定义InfluxDB凭证的变量。
url
:InfluxDB集群的主机名和端口(《:443》)(无协议)database
:要查询的InfluxDB集群数据库的名称token
:具有指定数据库读取权限的数据库令牌。 出于安全考虑,我们建议将其设置为环境变量,而不是包含原始令牌字符串。
定义一个包含用于通过gRPC+TLS协议与InfluxDB通信的gRPC传输的
opts
选项列表。使用
url
和opts
调用flightsql.NewClient()
方法创建一个新的Flight SQL客户端。将以下InfluxDB凭证作为键值对追加到出站上下文中
authorization
:BearerINFLUX_TOKEN> database
:数据库名称
定义要执行的SQL查询。
调用
client.execute()
方法发送查询请求。调用带有查询响应中的ticket的
client.doGet()
方法从端点检索结果数据。创建一个读取端点返回的Arrow表的读取器,并将结果以JSON格式打印。
创建一个
main
模块函数,执行dbQuery
函数。
输入以下命令安装所有必要的包并运行程序以查询InfluxDB集群
go get ./... go run ./query.go
有关更多信息,请参阅Go Arrow Flight Client文档。
这个页面有帮助吗?
感谢您的反馈!