Documentation

InfluxDB 3的Java客户端库

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

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

InfluxDB 3 客户端库可以使用 SQL 或 InfluxQL 查询 InfluxDB 集群。 influxdb3-java Java 客户端库将 Apache Arrow org.apache.arrow.flight.FlightClient 封装在一个方便的 InfluxDB 3 接口中,以便执行 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();
    }
  }
}

来源: suyashcjoshi/SimpleJavaInfluxDB 在 GitHub

替换以下内容:

  • DATABASE_NAME: 您的 InfluxDB 集群的数据库的名称,用于读取和写入数据
  • DATABASE_TOKEN: 一个 本地环境变量,用于存储你的 token——该token必须具有 对指定数据库的读写权限。

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

  1. 为项目构建一个可执行的 JAR - 例如,使用 Maven:

    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 客户端库包提供了 com.influxdb.v3.client 类,用于构造、写入和查询存储在 InfluxDB Clustered 中的数据。

API 参考

InfluxDBClient 接口

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

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

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

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

使用凭证参数初始化

static InfluxDBClient getInstance(@Nonnull final String host,
                           @Nullable final char[] token,
                           @Nullable final String database)
  • host (字符串): InfluxDB 实例的主机 URL。
  • database (string): 用于写入和查询的数据库
  • 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: 一个 数据库令牌,具有对指定数据库所需的权限。

默认标签

要在所有书写的数据中包含默认 tags,请传递一个 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 3 Java 客户端库



Flux的未来

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

阅读更多

InfluxDB 3 开源版本现已公开Alpha测试

InfluxDB 3 Open Source is now available for alpha testing, licensed under MIT or Apache 2 licensing.

我们将发布两个产品作为测试版的一部分。

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

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