文档

Java Flight SQL包

Apache Arrow Flight SQL for Java 与Java应用程序集成,使用RPC和SQL查询和检索Flight数据库服务器中的数据。

使用InfluxDB v3客户端库

我们建议使用influxdb3-java Go客户端库 将InfluxDB v3与您的Java应用程序代码集成。

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

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

编写一个Java类,用于连接到InfluxDB Clustered,执行SQL查询,并检索InfluxDB Clustered数据库中存储的数据。

该示例使用Apache Arrow Java实现(org.apache.arrow 与InfluxDB v3等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 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包创建子目录。

  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. 实例化一个包装FlightClient实例的FlightSqlClient

执行查询

FlightQuery.main方法中

  1. 使用作为bearer凭证的TOKEN实例化一个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食谱

  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 v3增强功能和InfluxDB Clustered现已上市

新功能包括更快的查询性能和管理工具,推进了InfluxDB v3产品线。InfluxDB Clustered现已上市。

InfluxDB v3性能和功能

InfluxDB v3产品线在查询性能方面取得了显著提升,并提供了新的管理工具。这些增强包括用于监控InfluxDB集群健康情况的运营仪表板,InfluxDB Cloud Dedicated中的单点登录(SSO)支持,以及用于token和数据库的新管理API。

了解v3的新增强功能


InfluxDB Clustered上市

InfluxDB Clustered现已上市,为您在自托管堆栈中提供InfluxDB v3的强大功能。

与我们讨论InfluxDB Clustered