すべてのプロダクト
Search
ドキュメントセンター

Lindorm:チュートリアル: Java Native SDK を使用して LindormTSDB に接続し、使用する

最終更新日:Nov 09, 2025

このトピックでは、Java Native SDK を使用して LindormTSDB に接続し、使用する方法について説明します。

前提条件

準備

Java Native SDK を使用して LindormTSDB に接続する前に、SDK をインストールする必要があります。 このトピックでは、バージョン 1.0.0 を例として使用します。 Java Native SDK は、次の 3 つの方法のいずれかでインストールできます。

  • 方法 1 (推奨): LindormTSDB SDK for Java を Maven プロジェクトにインポートします。 次の依存関係を pom.xml ファイルの dependencies セクションに追加します。

    <dependency>
      <groupId>com.aliyun.lindorm</groupId>
      <artifactId>lindorm-tsdb-client</artifactId>
      <version>1.0.4</version>
    </dependency>
    説明

    LindormTSDB Java SDK は、Maven ベースのサンプルプロジェクトを提供します。 サンプルプロジェクトをダウンロードしてローカルでコンパイルおよび実行するか、それをベースに独自のプロジェクトを開発することができます。

  • JAR パッケージを Eclipse プロジェクトにインポートします。

    1. Java SDK パッケージをダウンロードします。

    2. ダウンロードした Java SDK パッケージを解凍します。

    3. 解凍した JAR パッケージを Eclipse プロジェクトに追加します。

      1. Eclipse でプロジェクトを開き、プロジェクトを右クリックして [プロパティ] を選択します。

      2. 表示されるダイアログボックスで、[Java ビルドパス] > [ライブラリ] > [JAR の追加] をクリックし、解凍した lindorm-tsdb-client-1.0.0.jar ファイルと lib ディレクトリ内の JAR パッケージを選択します。

      3. [適用して閉じる] をクリックします。

  • JAR パッケージを IntelliJ IDEA プロジェクトにインポートします。

    1. Java SDK パッケージをダウンロードします。

    2. ダウンロードした Java SDK パッケージを解凍します。

    3. 解凍した JAR パッケージを IntelliJ IDEA プロジェクトに追加します。

      1. IntelliJ IDEA でプロジェクトを開き、メニューバーで [ファイル] > [プロジェクト構造] をクリックします。

      2. [プロジェクト構造] ダイアログボックスの左側のナビゲーションウィンドウで、[プロジェクト構造] > [モジュール] を選択します。

      3. ペインの右側で 添加 をクリックし、[JAR またはディレクトリ] を選択します。

      4. 表示されるダイアログボックスで、解凍した lindorm-tsdb-client-1.0.0.jar ファイルと lib ディレクトリ内の JAR パッケージを選択し、[OK] をクリックします。

      5. [適用] をクリックします。

      6. [OK] をクリックします。

説明
  • LindormTSDB 用の Java Native SDK のすべてのバージョンは、Maven 中央リポジトリから入手できます。 詳細については、「Maven リポジトリ」をご参照ください。

  • LindormTSDB 用の Java Native SDK のバージョンの詳細については、「バージョンガイド」をご参照ください。

手順

  1. データベースインスタンスを作成します。 LindormTSDBClient を作成するときは、LindormTSDB エンドポイントを指定する必要があります。

    String url = "http://ld-bp17j28j2y7pm****-proxy-tsdb-pub.lindorm.rds.aliyuncs.com:8242";
    // LindormTSDBClient はスレッドセーフであり、再利用できます。 頻繁に作成および破棄する必要はありません。
    ClientOptions options = ClientOptions.newBuilder(url).build();
    LindormTSDBClient lindormTSDBClient = LindormTSDBFactory.connect(options);
  2. demo という名前のデータベースと sensor という名前の時系列テーブルを作成します。 データベースと時系列テーブルの作成に使用される SQL 文の詳細については、「CREATE DATABASE」および「CREATE TABLE」をご参照ください。

    lindormTSDBClient.execute("CREATE DATABASE demo");
    lindormTSDBClient.execute("demo","CREATE TABLE sensor (device_id VARCHAR TAG,region VARCHAR TAG,time BIGINT,temperature DOUBLE,humidity DOUBLE,PRIMARY KEY(device_id))");
  3. テーブルにデータを書き込みます。

    説明

    デフォルトでは、LindormTSDBClient は、データ書き込みパフォーマンスを向上させるために、バッチで非同期にデータを書き込みます。 データを同期的に書き込むには、write() メソッドによって返される CompletableFuture<WriteResult> オブジェクトの join() メソッドを呼び出します。

    int numRecords = 10;
    List<Record> records = new ArrayList<>(numRecords);
    long currentTime = System.currentTimeMillis();
    for (int i = 0; i < numRecords; i++) {
        Record record = Record
            .table("sensor")
            .time(currentTime + i * 1000)
            .tag("device_id", "F07A1260")
            .tag("region", "north-cn")
            .addField("temperature", 12.1 + i)
            .addField("humidity", 45.0 + i)
            .build();
        records.add(record);
    }
    
    CompletableFuture<WriteResult> future = lindormTSDBClient.write("demo", records);
    // 非同期書き込み結果を処理します
    future.whenComplete((r, ex) -> {
        // 書き込みの失敗を処理します
        if (ex != null) {
            System.out.println("Failed to write.");
            if (ex instanceof LindormTSDBException) {
                LindormTSDBException e = (LindormTSDBException) ex;
                System.out.println("Caught an LindormTSDBException, which means your request made it to Lindorm TSDB, "
                                   + "but was rejected with an error response for some reason.");
                System.out.println("Error Code: " + e.getCode());
                System.out.println("SQL State:  " + e.getSqlstate());
                System.out.println("Error Message: " + e.getMessage());
            }  else {
                ex.printStackTrace();
            }
        } else  {
            System.out.println("Write successfully.");
        }
    });
    // これは、同期モードで書き込み結果を単純に処理する方法の例です。
    System.out.println(future.join());
  4. 時系列テーブルからデータをクエリします。 SQL クエリ文の詳細については、「基本的なクエリ」をご参照ください。

    String sql = "select * from sensor limit 10";
    ResultSet resultSet = lindormTSDBClient.query("demo", sql);
    
    try {
        // クエリ結果を処理します
        QueryResult result = null;
        // クエリ結果はバッチで返されます。 デフォルトでは、各バッチには 1,000 行が含まれます。
        // resultSet の next() メソッドが null を返した場合、すべてのクエリ結果が読み取られます。
        while ((result = resultSet.next()) != null) {
            List<String> columns = result.getColumns();
            System.out.println("columns: " + columns);
            List<String> metadata = result.getMetadata();
            System.out.println("metadata: " + metadata);
            List<List<Object>> rows = result.getRows();
            for (int i = 0, size = rows.size(); i < size; i++) {
                List<Object> row = rows.get(i);
                System.out.println("row #" + i + " : " + row);
            }
        }
    } finally {
        // クエリが完了したら、必ず ResultSet の close メソッドを呼び出して I/O リソースを解放してください。
        resultSet.close();
    }

完全なコード例

import com.aliyun.lindorm.tsdb.client.ClientOptions;
import com.aliyun.lindorm.tsdb.client.LindormTSDBClient;
import com.aliyun.lindorm.tsdb.client.LindormTSDBFactory;
import com.aliyun.lindorm.tsdb.client.exception.LindormTSDBException;
import com.aliyun.lindorm.tsdb.client.model.QueryResult;
import com.aliyun.lindorm.tsdb.client.model.Record;
import com.aliyun.lindorm.tsdb.client.model.ResultSet;
import com.aliyun.lindorm.tsdb.client.model.WriteResult;
import com.aliyun.lindorm.tsdb.client.utils.ExceptionUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;

public class QuickStart {

    public static void main(String[] args) {

        // 1. クライアントインスタンスを作成します。
        String url = "http://ld-xxxx-proxy-tsdb-pub.lindorm.rds.aliyuncs.com:8242";
        // LindormTSDBClient はスレッドセーフであり、再利用できます。 頻繁に作成および破棄する必要はありません。
        ClientOptions options = ClientOptions.newBuilder(url).build();
        LindormTSDBClient lindormTSDBClient = LindormTSDBFactory.connect(options);

        // 2. demo という名前のデータベースと sensor という名前のテーブルを作成します。
        lindormTSDBClient.execute("CREATE DATABASE demo");
        lindormTSDBClient.execute("demo","CREATE TABLE sensor (device_id VARCHAR TAG,region VARCHAR TAG,time BIGINT,temperature DOUBLE,humidity DOUBLE,PRIMARY KEY(device_id))");

        // 3. データを書き込みます。
        int numRecords = 10;
        List<Record> records = new ArrayList<>(numRecords);
        long currentTime = System.currentTimeMillis();
        for (int i = 0; i < numRecords; i++) {
            Record record = Record
                    .table("sensor")
                    .time(currentTime + i * 1000)
                    .tag("device_id", "F07A1260")
                    .tag("region", "north-cn")
                    .addField("temperature", 12.1 + i)
                    .addField("humidity", 45.0 + i)
                    .build();
            records.add(record);
        }

        CompletableFuture<WriteResult> future = lindormTSDBClient.write("demo", records);
        // 非同期書き込み結果を処理します。
        future.whenComplete((r, ex) -> {
            // 書き込みの失敗を処理します。
            if (ex != null) {
                System.out.println("Failed to write.");
                Throwable throwable = ExceptionUtils.getRootCause(ex);
                if (throwable instanceof LindormTSDBException) {
                    LindormTSDBException e = (LindormTSDBException) throwable;
                    System.out.println("Caught an LindormTSDBException, which means your request made it to Lindorm TSDB, "
                            + "but was rejected with an error response for some reason.");
                    System.out.println("Error Code: " + e.getCode());
                    System.out.println("SQL State:  " + e.getSqlstate());
                    System.out.println("Error Message: " + e.getMessage());
                }  else {
                    throwable.printStackTrace();
                }
            } else  {
                System.out.println("Write successfully.");
            }
        });
        // これは、単純な同期待機の例です。
        System.out.println(future.join());

        // 4. データをクエリします。
        String sql = "select * from sensor limit 10";
        ResultSet resultSet = lindormTSDBClient.query("demo", sql);

        try {
            // クエリ結果を処理します。
            QueryResult result = null;
            // クエリ結果はバッチで返されます。 デフォルトでは、各バッチには 1,000 行が含まれます。
            // resultSet の next() メソッドが null を返した場合、すべてのクエリ結果が読み取られます。
            while ((result = resultSet.next()) != null) {
                List<String> columns = result.getColumns();
                System.out.println("columns: " + columns);
                List<String> metadata = result.getMetadata();
                System.out.println("metadata: " + metadata);
                List<List<Object>> rows = result.getRows();
                for (int i = 0, size = rows.size(); i < size; i++) {
                    List<Object> row = rows.get(i);
                    System.out.println("row #" + i + " : " + row);
                }
            }
        } finally {
            // クエリが完了したら、必ず ResultSet の close メソッドを呼び出して I/O リソースを解放してください。
            resultSet.close();
        }

        lindormTSDBClient.shutdown();
    }
}