Documentation

Java 航班 SQL 包

Apache Arrow Flight SQL for Java 集成了Java应用程序,通过RPC和SQL查询并检索来自Flight数据库服务器的数据。

使用 InfluxDB 3 客户端库

我们推荐使用influxdb3-java Java客户端库将InfluxDB 3与您的Java应用程序代码集成。

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

开始使用Java Flight SQL客户端查询InfluxDB

编写一个 Java 类,用于连接到 InfluxDB Cloud Serverless 的 Flight SQL 客户端,执行 SQL 查询,并检索存储在 InfluxDB Cloud Serverless 存储桶中的数据。

示例使用了Apache Arrow Java 实现 (org.apache.arrow)来与像 InfluxDB 3 这样的 Flight 数据库服务器进行交互。

  • org.apache.arrow: 提供了用于将Java应用程序与Apache Arrow数据和协议集成的类和方法。
  • org.apache.arrow.flight.sql: 提供与使用 Arrow Flight RPC 和 Flight SQL 的 Flight 数据库服务器进行交互的类和方法。
  1. 设置 InfluxDB
  2. 安装先决条件
  3. 创建 FlightQuery 类
  4. 创建查询客户端
  5. 执行查询
  6. 检索和处理Arrow数据

要克隆或下载您可以使用 Docker 运行的示例应用程序,请查看 GitHub 上的 InfluxCommunity/ArrowFlightClient_Query_Examples repository

设置 InfluxDB

要配置应用程序以查询 InfluxDB Cloud Serverless,您需要以下 InfluxDB 资源:

  • InfluxDB Cloud 无服务器
  • 具有对数据桶的读取权限的InfluxDB Cloud无服务器API令牌

如果您还没有API令牌和存储桶,请查看如何设置InfluxDB。如果您还没有要查询的数据,请查看如何写入数据到存储桶。

安装前提条件

以下使用Docker和Maven构建并运行Java应用程序,以避免特定于平台的依赖问题。

这个示例 Dockerfile 在 Docker 容器中安装兼容版本的 Maven 和 Java JDK,然后运行 Maven 命令以下载依赖项并编译应用程序。

按照说明下载并安装适合您系统的Docker:

查看 Dockerfile

查看 Maven pom.xml

创建 FlightQuery 类

查看 FlightQuery.java

  1. 在你的 <PROJECT_ROOT>/src/main/java 目录中,创建 com/influxdb/examples 子目录,用于 com.influxdb.examples 包。

  2. 在前一步的 examples 目录中,创建 FlightQuery.java 类文件。 你应该有以下目录结构:

    PROJECT_ROOT
    └──src
       └──main
          └──java
             └──com
                └──influxdb
                   └──examples
                      └──FlightQuery.java
    
  3. FlightQuery.java 中:

    1. 添加包名称:

      package com.influxdb.examples;
      
    2. 为以下包添加 import 语句。您将在后续步骤中使用这些包中的类和方法:

      • org.apache.arrow.flight.auth2.BearerCredentialWriter
      • org.apache.arrow.flight.CallHeaders
      • org.apache.arrow.flight.CallStatus
      • org.apache.arrow.flight.grpc.CredentialCallOption
      • org.apache.arrow.flight.Location
      • org.apache.arrow.flight.FlightClient
      • org.apache.arrow.flight.FlightClientMiddleware
      • org.apache.arrow.flight.FlightInfo
      • org.apache.arrow.flight.FlightStream
      • org.apache.arrow.flight.sql.FlightSqlClient
      • org.apache.arrow.flight.Ticket
      • org.apache.arrow.memory.BufferAllocator
      • org.apache.arrow.memory.RootAllocator
      • org.apache.arrow.vector.VectorSchemaRoot
    3. 创建一个 FlightQuery 类。

    4. FlightQuery类中:

      1. 为服务器凭据定义常量。

        • DATABASE_NAME
        • HOST
        • TOKEN

        这个示例 Dockerfile 定义了这些凭证的环境变量。

      2. 创建一个 main() 方法。

创建查询客户端

FlightQuery.main() 方法中,执行以下操作以创建一个可以连接到 HOSTDATABASE_NAME 的SQL客户端:

  1. 构建一个 gRPC+TLS 通道 URI,其中包含 HOST 和端口 443,用于通过 gRPC 服务器进行 TLS 通信

  2. 实例化 FlightClientMiddleware 并定义一个事件回调,它插入以下飞行请求元数据头属性:

    "database": "DATABASE_NAME"
    
  3. 实例化一个 BufferAllocator,用于设置客户端允许的内存。

  4. 创建一个 FlightClient,使用分配器和 gRPC 通道。

  5. 实例化一个 FlightSqlClient,它包装了 FlightClient 实例。

执行查询

FlightQuery.main 方法中:

  1. 实例化一个 CredentialCallOption,使用 TOKEN 作为 持有者 凭证。 结果是一个凭证对象,您将在每个请求中传递给服务器。

  2. 定义一个包含要执行的SQL查询的字符串–例如:

    String query = "SELECT * FROM home";
    
  3. 使用 SQL 查询和 CredentialCallOption 调用 FlightSqlClient.execute 方法。

  4. 如果成功,FlightSqlClient.execute 方法将返回一个 FlightInfo 对象,其中包含元数据和一个 endpoints: [...] 列表。每个端点包含以下内容:

    • 您可以获取数据的地址列表。
    • 一个 ticket 值,用于标识要检索的数据。
  5. 从响应中提取票据。

检索和处理箭头数据

FlightQuery.main()方法中,执行以下操作以检索在FlightInfo响应中描述的数据流:

  1. 调用 FlightSqlClient.getStream 方法,使用 ticketCredentialCallOption 来获取 Arrow stream

  2. 调用 FlightStream.getRoot 方法从流中获取当前的矢量数据。

  3. 处理数据并处理异常。该示例将向量数据转换为制表符分隔的值,并将结果打印到 System.out

    有关使用Java处理Arrow数据的更多示例,请参见Apache Arrow Java Cookbook

  4. 最后,关闭流和客户端。

运行应用程序

按照以下步骤使用Docker构建和运行应用程序:

  1. Dockerfilepom.xml 复制到您的项目根目录。

  2. 在您的项目根目录中打开一个终端。

  3. 在你的终端中,运行 docker build 命令并传递 --build-arg 标志用于服务器凭据:

    docker build \
    --build-arg DATABASE_NAME=INFLUX_BUCKET \
    --build-arg HOST=cloud2.influxdata.com \
    --build-arg TOKEN=INFLUX_TOKEN \
    -t javaflight .
    

    该命令构建一个名为 javaflight 的Docker镜像。

  4. 要在新的Docker容器中运行应用程序,请输入以下命令:

    docker run javaflight
    

    输出是TSV格式的查询数据。

故障排除箭头飞行请求

有关 Arrow Flight 错误响应代码的列表,请参见 Arrow Flight RPC documentation



Flux的未来

Flux 正在进入维护模式。您可以像现在一样继续使用它,而无需对您的代码进行任何更改。

阅读更多

InfluxDB 3 开源版本现已公开Alpha测试

InfluxDB 3 Open Source is now available for alpha testing, licensed under MIT or Apache 2 licensing.

我们将发布两个产品作为测试版的一部分。

InfluxDB 3 核心,是我们新的开源产品。 它是一个用于时间序列和事件数据的实时数据引擎。 InfluxDB 3 企业版是建立在核心基础之上的商业版本,增加了历史查询能力、读取副本、高可用性、可扩展性和细粒度安全性。

有关如何开始的更多信息,请查看:

InfluxDB 云端无服务器