Go Flight client
Apache Arrow for Go integrates with Go scripts and applications to query data stored in InfluxDB.
Use InfluxDB 3 client libraries
We recommend using the influxdb3-go Go client library for integrating InfluxDB 3 with your Go application code.
InfluxDB 3 client libraries wrap Apache Arrow Flight clients and provide convenient methods for writing, querying, and processing data stored in InfluxDB Cloud Dedicated. Client libraries can query using SQL or InfluxQL.
Flight SQL client
Example query using Flight SQL
The following example shows how to use the Arrow Flight SQL client for Go to query an InfluxDB Cloud Dedicated database:
In your editor, open a new file named
query.goand enter the following sample code: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-id.a.influxdb.io: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) } }The sample does the following:
Imports the following packages:
contextcrypto/x509encoding/jsonfmtosgithub.com/apache/arrow/go/v14/arrow/flight/flightsqlgoogle.golang.org/grpcgoogle.golang.org/grpc/credentialsgoogle.golang.org/grpc/metadata
Creates a
dbQueryfunction that does the following:Defines variables for InfluxDB credentials.
url: InfluxDB Cloud Dedicated cluster hostname and port (:443) (no protocol)database: the name of the InfluxDB Cloud Dedicated database to querytoken: a database token with read permission on the specified database. For security reasons, we recommend setting this as an environment variable rather than including the raw token string.
Defines an
optsoptions list that includes a gRPC transport for communicating with InfluxDB over the gRPC+TLS protocol.Calls the
flightsql.NewClient()method withurlandoptsto create a new Flight SQL client.Appends the following InfluxDB credentials as key-value pairs to the outgoing context:
authorization: Bearer <INFLUX_TOKEN>database: Database name
Defines the SQL query to execute.
Calls the
client.execute()method to send the query request.Calls the
client.doGet()method with the ticket from the query response to retrieve result data from the endpoint.Creates a reader to read the Arrow table returned by the endpoint and print the results as JSON.
Creates a
mainmodule function that executes thedbQueryfunction.
Enter the following commands to install all the necessary packages and run the program to query InfluxDB Cloud Dedicated:
go get ./... go run ./query.go
For more information, see the Go Arrow Flight Client documentation.
Was this page helpful?
Thank you for your feedback!
Support and feedback
Thank you for being part of our community! We welcome and encourage your feedback and bug reports for InfluxDB Cloud Dedicated and this documentation. To find support, use the following resources:
Customers with an annual or support contract can contact InfluxData Support.