文档

InfluxDB v3 的 Java 客户端库

InfluxDB v3 的 influxdb3-java Java 客户端库 与 Java 应用代码集成,用于写入和查询存储在 InfluxDB 集群中的数据。

InfluxDB 客户端库提供可配置的批量写入数据到 InfluxDB 集群。使用客户端库构建行协议数据,将其他格式数据转换为行协议,并将行协议数据批量写入 InfluxDB HTTP API。

InfluxDB v3 客户端库可以使用 SQL 或 InfluxQL 查询 InfluxDB 集群。Java 客户端库 influxdb3-java 使用 Apache Arrow org.apache.arrow.flight.FlightClient 封装 InfluxDB v3 接口,以便执行 SQL 和 InfluxQL 查询,请求服务器元数据,并使用 gRPC 通过 Flight 协议从 InfluxDB 集群检索数据。

示例:写入和查询数据

以下示例显示了如何使用 influxdb3-java 写入和查询存储在 InfluxDB 集群中的数据。

package com.influxdata.demo;

import com.influxdb.v3.client.InfluxDBClient;
import com.influxdb.v3.client.Point;
import com.influxdb.v3.client.query.QueryOptions;
import com.influxdb.v3.client.query.QueryType;

import java.time.Instant;
import java.util.stream.Stream;

public class HelloInfluxDB {
  private static final String HOST_URL = "https://cluster-host.com"; // your cluster URL
  private static final String DATABASE = "DATABASE_NAME"; // your InfluxDB database name 
  private static final char[] TOKEN = System.getenv("DATABASE_TOKEN"); // a local environment variable that stores your database token

  // Create a client instance that writes and queries data in your database.
  public static void main(String[] args) {
    // Instantiate the client with your InfluxDB credentials
    try (InfluxDBClient client = InfluxDBClient.getInstance(HOST_URL, TOKEN, DATABASE)) {
      writeData(client);
      queryData(client);
    }
    catch (Exception e) {
      System.err.println("An error occurred while connecting to InfluxDB!");
      e.printStackTrace();
    }
  }

  // Use the Point class to construct time series data.
  private static void writeData(InfluxDBClient client) {
    Point point = Point.measurement("temperature")
                       .setTag("location", "London")
                       .setField("value", 30.01)
                       .setTimestamp(Instant.now().minusSeconds(10));
    try {
      client.writePoint(point);
      System.out.println("Data is written to the database.");
    }
    catch (Exception e) {
      System.err.println("Failed to write data to the database.");
      e.printStackTrace();
    }
  }

  // Use SQL to query the most recent 10 measurements
  private static void queryData(InfluxDBClient client) {
    System.out.printf("--------------------------------------------------------%n");
    System.out.printf("| %-8s | %-8s | %-30s |%n", "location", "value", "time");
    System.out.printf("--------------------------------------------------------%n");

    String sql = "select time,location,value from temperature order by time desc limit 10";
    try (Stream<Object[]> stream = client.query(sql)) {
      stream.forEach(row -> System.out.printf("| %-8s | %-8s | %-30s |%n", row[1], row[2], row[0]));
    }
    catch (Exception e) {
      System.err.println("Failed to query data from the database.");
      e.printStackTrace();
    }
  }
}

来源:GitHub 上的 suyashcjoshi/SimpleJavaInfluxDB

替换以下

  • DATABASE_NAME:要读写数据的InfluxDB集群数据库名称
  • DATABASE_TOKEN:存储您令牌的本地环境变量–该令牌必须具有对指定数据库的读写权限。

运行示例以写入和查询数据

  1. 使用Maven等项目构建可执行的JAR文件

    mvn package
    
  2. 在终端中运行java命令以在数据库中写入和查询数据

    java \
    --add-opens=java.base/java.nio=org.apache.arrow.memory.core,ALL-UNNAMED \
    -jar target/PROJECT_NAME.jar
    

    在您的命令中包含以下内容

输出是您InfluxDB集群数据库中新写入的数据。

安装

在您的项目中包含com.influxdb.influxdb3-java依赖项。

<dependency>
  <groupId>com.influxdb</groupId>
  <artifactId>influxdb3-java</artifactId>
  <version>RELEASE</version>
</dependency>
dependencies {

   implementation group: 'com.influxdb', name: 'influxdb3-java', version: 'latest.release'

}

导入客户端

influxdb3-java客户端库包提供了用于构建、写入和查询存储在InfluxDB集群中的数据的com.influxdb.v3.client类。

API 参考

InfluxDBClient 接口

InfluxDBClient提供了与InfluxDB API交互的接口,用于写入和查询数据。

InfluxDBClient.getInstance构造函数初始化并返回一个客户端实例,具有以下内容

  • 一个配置为写入数据库的写入客户端
  • 一个配置为查询数据库的Arrow Flight客户端

要初始化客户端,请调用getInstance并传递以下类型之一作为凭据

使用凭据参数初始化

static InfluxDBClient getInstance(@Nonnull final String host,
                           @Nullable final char[] token,
                           @Nullable final String database)
  • host(字符串):InfluxDB实例的主机URL。
  • database(字符串):用于写入和查询的数据库
  • token(字符数组):具有读/写权限的数据库令牌

示例:使用凭据参数初始化

package com.influxdata.demo;

import com.influxdb.v3.client.InfluxDBClient;
import com.influxdb.v3.client.Point;
import com.influxdb.v3.client.query.QueryOptions;
import com.influxdb.v3.client.query.QueryType;

import java.time.Instant;
import java.util.stream.Stream;

public class HelloInfluxDB {
  private static final String HOST_URL = "https://cluster-host.com";
  private static final String DATABASE = "DATABASE_NAME";
  private static final char[] TOKEN = System.getenv("DATABASE_TOKEN");

  // Create a client instance, and then write and query data in InfluxDB.
  public static void main(String[] args) {
    try (InfluxDBClient client = InfluxDBClient.getInstance(HOST_URL, DATABASE_TOKEN, DATABASE)) {
      writeData(client);
      queryData(client);
    }
    catch (Exception e) {
      System.err.println("An error occurred while connecting to InfluxDB!");
      e.printStackTrace();
    }
  }
}

替换以下

  • DATABASE_NAME:您的InfluxDB集群数据库
  • DATABASE_TOKEN:一个具有对指定数据库必要权限的数据库令牌

默认标签

要包含所有写入数据的默认标签,请传递一个包含标签键和值的Map

InfluxDBClient getInstance(@Nonnull final String host,
                                      @Nullable final char[] token,
                                      @Nullable final String database,
                                      @Nullable Map<String, String> defaultTags)

使用数据库连接字符串初始化

"https://cluster-host.com"
+ "?token=DATABASE_TOKEN&amp;database=DATABASE_NAME"

替换以下

  • DATABASE_NAME:您的InfluxDB集群数据库
  • DATABASE_TOKEN:一个具有对指定数据库必要权限的数据库令牌

InfluxDBClient 实例方法

InfluxDBClient.writePoint

将点作为行协议写入数据库

  1. 初始化client–您的令牌必须具有对指定数据库的写权限。
  2. 使用com.influxdb.v3.client.Point类创建时间序列数据。
  3. 调用client.writePoint()方法将点作为行协议写入您的数据库。
  // Use the Point class to construct time series data.
  // Call client.writePoint to write the point in your database.
  private static void writeData(InfluxDBClient client) {
    Point point = Point.measurement("temperature")
                       .setTag("location", "London")
                       .setField("value", 30.01)
                       .setTimestamp(Instant.now().minusSeconds(10));
    try {
      client.writePoint(point);
      System.out.println("Data written to the database.");
    }
    catch (Exception e) {
      System.err.println("Failed to write data to the database.");
      e.printStackTrace();
    }
  }

InfluxDBClient.query

查询数据和处理结果

  1. 初始化client–令牌必须具有查询您想要查询的数据库的读权限。
  2. 调用client.query()并为您提供SQL查询字符串。
  3. 使用结果流的内置迭代器处理行数据。
  // Query the latest 10 measurements using SQL
  private static void queryData(InfluxDBClient client) {
    System.out.printf("--------------------------------------------------------%n");
    System.out.printf("| %-8s | %-8s | %-30s |%n", "location", "value", "time");
    System.out.printf("--------------------------------------------------------%n");

    String sql = "select time,location,value from temperature order by time desc limit 10";
    try (Stream<Object[]> stream = client.query(sql)) {
      stream.forEach(row -> System.out.printf("| %-8s | %-8s | %-30s |%n", row[1], row[2], row[0]));
    }
    catch (Exception e) {
      System.err.println("Failed to query data from the database.");
      e.printStackTrace();
    }
  }

查看InfluxDB v3 Java客户端库


这个页面有用吗?

感谢您的反馈!


Flux 的未来

Flux 将进入维护模式。您可以在不更改代码的情况下继续使用它。

阅读更多

InfluxDB v3 增强功能和 InfluxDB Clustered 现已上市

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

InfluxDB v3 性能和功能

InfluxDB v3 产品线在查询性能方面取得了重大改进,并提供了新的管理工具。这些增强包括一个操作仪表板来监控您的 InfluxDB 集群的健康状态,InfluxDB Cloud Dedicated 中的单点登录(SSO)支持,以及针对令牌和数据库的新管理 API。

了解新 v3 增强功能


InfluxDB Clustered 上市

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

与我们谈论 InfluxDB Clustered