文档文档

Java Flight 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 3 Core 中的数据提供了便捷的方法。客户端库可以使用 SQL 或 InfluxQL 进行查询。

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

编写一个 Java 类,用于创建一个 Flight SQL 客户端,该客户端连接到 InfluxDB 3 Core,执行 SQL 查询,并检索存储在 InfluxDB 3 Core 数据库中的数据。

该示例使用 Apache Arrow Java 实现 (org.apache.arrow) 与 Flight 数据库服务器(如 InfluxDB 3)进行交互。

  • 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 存储库

设置 InfluxDB

要配置应用程序以查询 InfluxDB 3 Core,你需要以下 InfluxDB 资源

  • InfluxDB 3 Core 数据库
  • InfluxDB 3 Core 数据库令牌,具有对数据库的读取权限

如果你还没有数据库令牌和数据库,请参阅如何 设置 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. 使用 HOST 和端口 443 构造一个 gRPC+TLS 通道 URI,用于与 通过 TLS 的 gRPC 服务器 通信。

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

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

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

  5. 实例化一个 FlightSqlClient,用于封装 FlightClient 实例。

执行查询

FlightQuery.main 方法中

  1. 使用 TOKEN 作为 bearer 凭据实例化 CredentialCallOption。结果是一个凭据对象,你将在每次对服务器的请求中传递该对象。

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

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

  4. 如果成功,FlightSqlClient.execute 方法将使用包含元数据和 endpoints: [...] 列表的 FlightInfo 对象进行响应。每个端点包含以下内容

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

检索和处理 Arrow 数据

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

  1. 使用 ticketCredentialCallOption 调用 FlightSqlClient.getStream 方法,以获取 Arrow 流

  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_DATABASE \
    --build-arg HOST=localhost:8181\
    --build-arg TOKEN=INFLUX_TOKEN \
    -t javaflight .
    

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

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

    docker run javaflight
    

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

排查 Arrow Flight 请求问题

有关 Arrow Flight 错误响应代码的列表,请参阅 Arrow Flight RPC 文档


此页是否对您有帮助?

感谢您的反馈!


Flux 的未来

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

阅读更多

现已全面上市

InfluxDB 3 Core 和 Enterprise

快速启动。更快扩展。

获取更新

InfluxDB 3 Core 是一个开源、高速、近实时数据引擎,可实时收集和处理数据,并将其持久化到本地磁盘或对象存储。InfluxDB 3 Enterprise 构建在 Core 的基础上,增加了高可用性、读取副本、增强的安全性以及数据压缩,从而实现更快的查询和优化的存储。InfluxDB 3 Enterprise 的免费层可供非商业家庭或业余爱好者使用。

有关更多信息,请查看