文档文档

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

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

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

该示例使用 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 Clustered,您需要以下 InfluxDB 资源

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

如果您还没有数据库令牌和数据库,请参阅如何 设置 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 方法将响应一个 FlightInfo 对象,其中包含元数据和一个 endpoints: [...] 列表。每个端点包含以下内容

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

检索和处理 Arrow 数据

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

  1. 使用 ticket 和 CredentialCallOption 调用 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=cluster-host.com \
    --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 开源版本现已公开发布 Alpha 版

InfluxDB 3 开源版本现已可用于 Alpha 测试,根据 MIT 或 Apache 2 许可授权。

作为 Alpha 版本的一部分,我们发布了两个产品。

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

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