文档文档

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 类,用于连接到 InfluxDB 3 Core 的 Flight SQL 客户端,执行 SQL 查询,并检索存储在 InfluxDB 3 Core 数据库中的数据。

该示例使用 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 存储库

设置 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.CallOptions
      • 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,用于与 通过 TLS 的 gRPC 服务器 通信。

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

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

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

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

执行查询

FlightQuery.main 方法中

  1. 使用 TOKEN 作为承载者凭证实例化 CredentialCallOption。结果是一个凭证对象,您将在每次向服务器发出请求时将其传递。

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

    String query = "SELECT * FROM home";
  3. 调用 FlightSqlClient.execute 方法,并传入 SQL 查询和 CredentialCallOption

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

    • 可以从中检索数据的地址列表。
    • 一个 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 文档


此页面是否有帮助?

感谢您的反馈!


InfluxDB 3.8 新特性

InfluxDB 3.8 和 InfluxDB 3 Explorer 1.6 的主要增强功能。

查看博客文章

InfluxDB 3.8 现已适用于 Core 和 Enterprise 版本,同时发布了 InfluxDB 3 Explorer UI 的 1.6 版本。本次发布着重于操作成熟度,以及如何更轻松地部署、管理和可靠地运行 InfluxDB。

更多信息,请查看

InfluxDB Docker 的 latest 标签将指向 InfluxDB 3 Core

在 **2026 年 2 月 3 日**,InfluxDB Docker 镜像的 latest 标签将指向 InfluxDB 3 Core。为避免意外升级,请在您的 Docker 部署中使用特定的版本标签。

如果使用 Docker 来安装和运行 InfluxDB,latest 标签将指向 InfluxDB 3 Core。为避免意外升级,请在您的 Docker 部署中使用特定的版本标签。例如,如果使用 Docker 运行 InfluxDB v2,请将 latest 版本标签替换为 Docker pull 命令中的特定版本标签 — 例如

docker pull influxdb:2