使用Go Flight SQL客户端查询InfluxDB Cloud
作者:Anais Dotis-Georgiou / 产品
2023年6月7日
导航至
InfluxDB Cloud 3.0 是基于 Apache 生态系统构建的多功能时间序列数据库。您可以使用Apache Arrow Flight SQL 接口查询InfluxDB Cloud,它为处理时间序列数据提供了 SQL 支持。在本教程中,我们将通过Go使用Flight SQL查询InfluxDB Cloud的过程进行讲解。Go Flight SQL客户端是Apache Arrow Flight的一部分,这是一个用于构建高性能数据服务的框架。它提供了一种通过现代高性能RPC框架gRPC高效传输大量数据集的方法。您可以尝试使用这个 仓库,使用Go Flight SQL客户端查询 InfluxDB Cloud。
要求和设置
本教程假设您已经拥有一个免费InfluxDB Cloud账户,并且您的机器上已经运行了 Docker。
最后,您需要创建或获取以下InfluxDB资源
-
一个桶
-
一个令牌
-
您的组织(通常是您注册账户时使用的电子邮件地址)
您还需要将数据写入您的InfluxDB账户。最简单的方法是通过UI手动编写一些行协议。导航到“加载数据”>“桶”>“+添加数据”>“行协议”>“手动输入”,选择您要写入的桶,并写入一个点到InfluxDB。例如,您可以编写 measurementName,tagKey=tagValue fieldKey=1.0
。或者,如果您想尝试真实的行协议数据,可以尝试NOAA空气传感器数据集。您还可以查看有关将数据写入InfluxDB Cloud 3.0的以下文档,了解向InfluxDB Cloud写入数据的其他方法。
代码讲解
让我们将代码拆分成更小的部分,以便理解正在发生的事情。
- 导入所需类:我们首先从Apache Arrow Flight和其他必要的库中导入所需的类。
package main import ( "context" "crypto/x509" "encoding/json" "fmt" "os" "github.com/apache/arrow/go/v12/arrow/flight/flightsql" "google.golang.org/grpc" "google.golang.org/grpc/credentials" "google.golang.org/grpc/metadata" "os" )
- 定义主函数以调用dbQuery()函数并处理错误。
func main() { fmt.Println("An example using Go Flight SQL Client to query InfluxDB") if err := dbQuery(context.Background()); err != nil { fmt.Fprintf(os.Stderr, "error: %v\n", err) os.Exit(1) }
- 收集我们的认证环境变量,并在dbQuery()函数中设置连接。
func dbQuery(ctx context.Context) error { url := os.Getenv("HOST") token := os.Getenv("TOKEN") bucket := os.Getenv("DATABASE_NAME") … // 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", bucket)
- 接下来,我们定义要执行的查询并执行它。使用
Execute
方法并将认证和查询传递给服务器以执行查询。// Execute query query := `SELECT * FROM 'measurementName'` 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) }
- 最后我们将结果以JSON格式打印。
// 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) } }
使用Go Flight SQL查询InfluxDB云
要运行示例,首先克隆相应的仓库,导航到该目录,并按照README.md中概述的步骤进行操作。
- 在您的终端中设置以下环境变量。
# Set environment variables export INFLUX_DATABASE="your bucket" && \ export INFLUX_HOST="your host url i.e. us-east-1-1.aws.cloud2.influxdata.com" && \ export INFLUX_TOKEN="your token"
- 运行以下命令以利用名为
goflight
的shell脚本构建镜像。sh ./influxdb-build.sh build
- 要启动应用程序,请在您的终端中运行
docker run "IMAGE_NAME"
。docker run goflight
资源和结论
查看以下文档。它帮助我构建了这个示例,也可以帮助您在查询InfluxDB云的旅程中。
-
Arrow Flight的参考文档https://arrow.apache.ac.cn/docs/dev/java/reference/
-
InfluxDB云的查询数据参考文档使用Python在InfluxDB云中通过Arrow Flight SQL查询数据
-
关于InfluxDB,Flight SQL,Pandas和Jupyter Notebooks教程的博客文章https://influxdb.org.cn/blog/influxdb-flight-sql-pandas-jupyter-notebooks-tutorial/
-
关于使用Flight SQL和AWS Lambda进行降采样的TL;DR InfluxDB技术提示博客文章https://influxdb.org.cn/blog/tldr-influxdb-tech-tips-downsampling-flight-sql-aws-lambda/
我希望这篇博客文章能够激发您探索InfluxDB云,并利用Flight SQL将InfluxDB中的大数据集传输到您选择的工具中进行数据处理。如果您需要任何帮助,请通过我们的社区网站或Slack频道与我们联系。我很乐意了解您想要实现的目标以及您希望InfluxDB拥有的功能。