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

:データのクエリ

最終更新日:Jan 14, 2025

データをクエリする前に、Queryオブジェクトを作成します。 Queryオブジェクトには、クエリ条件が含まれています。 Queryオブジェクトでは、タグ、メトリック、および集計クエリ条件を指定できます。 これにより、指定された条件を満たすデータをクエリできます。

クエリ条件の定義

サンプルコード

クエリ条件を含むQueryオブジェクトを作成します。

Query query = Query
    .timeRange(startTime, endTime)    // データをクエリする期間を指定します。
    .sub(SubQuery.metric("hello").aggregator(Aggregator.AVG).tag("tagk1", "tagv1").build())    // サブクエリを作成します。
    .sub(SubQuery.metric("world").aggregator(Aggregator.SUM).tag("tagk2", "tagv2").build())    // サブクエリを作成します。
    .build();

サブクエリ

Queryオブジェクトには、複数のSubQueryオブジェクトを作成できます。 これにより、複数のクエリ条件を含むサブクエリを作成できます。

サンプルコード

サンプルのサブクエリを作成します

SubQuery subQuery = SubQuery
                .metric("test-metric")
                .aggregator(Aggregator.AVG)
                .downsample("60m-avg")
                .tag("tagk1", "tagv1")
                .tag("tagk2", "tagv2")
                .build();

SubQueryは、サブクエリを定義できるオブジェクトです。 Aggregatorは列挙クラスです。

クエリを同期的に実行する

Lindorm Time Series Database(TSDB)SDKを使用すると、スレッド同期モードでデータをクエリできます。

サンプルコード

query() メソッドを使用して、データを同期的にクエリします。

List<QueryResult> result = tsdb.query(query);
System.out.println("Returned result" + result);

クエリを非同期的に実行する

TSDB SDKを使用すると、データを非同期的にクエリできます。

サンプルコード

query() メソッドを使用して、データを非同期的にクエリし、コールバックを設定してクエリ結果の戻り方を定義します。

QueryCallback cb = new QueryCallback() {

    @Override
    public void response(Query input, List<QueryResult> result) {
        System.out.println("Query parameters:" + input);
        System.out.println("Returned result:" + result);
    }

};

tsdb.query(query, cb);

データをクエリし、クエリ結果を降順にソートする

TSDB SDKを使用すると、データをクエリし、クエリ結果を降順または昇順にソートできます。 getOrderDps(boolean ordeset) メソッドを使用すると、タイムスタンプに基づいてクエリ結果をソートできます。 クエリで getOrderDps(true) を使用すると、返されるクエリ結果はタイムスタンプに基づいて降順にソートされます。 クエリで getOrderDps() を使用すると、返されるクエリ結果はタイムスタンプに基づいて昇順にソートされます。 サンプルコード

Query query = Query
                .timeRange(current - 1000,start + 1000)
                .sub(SubQuery.metric(metric).aggregator(Aggregator.NONE).tag(tags).build())
                .build();

        try {
            // クエリを実行し、クエリ結果を取得します。
            List<QueryResult> result = tsdb.query(query);


            for(QueryResult queryResult : result){
                // 順序付けされていないデータポイントを取得します。
                System.out.println(queryResult.getDps());
                System.out.println("-------------");
                // タイムスタンプに基づいて昇順にソートされたデータポイントのコレクションを取得します。
                System.out.println(queryResult.getOrderDps());
                System.out.println("-------------");
                // タイムスタンプに基づいて降順にソートされたデータポイントのコレクションを取得します。
                System.out.println(queryResult.getOrderDps(true));
            }
        } catch (HttpUnknowStatusException e) {
            e.printStackTrace();
        }

クエリ結果

query() メソッドを使用してデータをクエリすると、クエリ結果は List<QueryResult> で返されます。 QueryResult は、サブクエリのクエリ結果を示します。 QueryResultgetDps() メソッドを使用して、クエリ結果を取得できます。

最新のデータポイントをクエリする

TSDB SDKを使用すると、指定されたタイムスタンプより前の最新のデータポイントをクエリできます。 サンプルコード:

例 1

サブクエリを含むクエリを作成します。 メトリックとタグは、サブクエリで指定されます。

// タグを作成します。
        Map<String,String> tags = new HashMap<String, String>();
        tags.put("uid","1");
        tags.put("id","6");

        String metric = "test.1";
        // 最新のデータポイントを返すクエリを作成します。
        LastPointQuery query = LastPointQuery.builder()
                // タイムスタンプを指定します。
                .timestamp(1537520409729l)
                // ミリ秒単位のタイムスタンプを使用してデータをクエリするかどうかを指定します。
                .msResolution(true)
                // 指定された時系列の最新のデータポイントを返すサブクエリを作成します。
                // 複数のサブクエリを同時に作成できます。
                .sub(LastPointSubQuery.builder(metric,tags).build()).build();

        // 各時系列の最新のポイントを取得します。 各時系列には LastDataValue があります。
        List<LastDataValue> lastDataValues = tsdb.queryLast(query);

        System.out.println(lastDataValues);

例 2

サブクエリで時系列の ID を指定して、データをクエリします。

// 時系列の ID を指定します。
        List<String> tsuids = new ArrayList<String>();
        tsuids.add("10000B7C000095000081****FF00006F");

        // 最新のデータポイントを返すクエリを作成します。
        LastPointQuery query = LastPointQuery.builder()
                // タイムスタンプを指定します。
                .timestamp(1537520409729l)
                // ミリ秒単位のタイムスタンプを使用してデータをクエリするかどうかを指定します。
                .msResolution(true)
                // 指定された時系列の最新のデータポイントを返すサブクエリを作成します。
                // 複数のサブクエリを同時に作成できます。
                .sub(LastPointSubQuery.builder(tsuids).build()).build();

        // 各時系列の最新のポイントを取得します。 各時系列には LastDataValue があります。
        List<LastDataValue> lastDataValues = tsdb.queryLast(query);

        System.out.println(lastDataValues);

tsuids 値は、例 1 のクエリ結果から取得できます。 例 1 に基づいて初めてデータをクエリするときは、クエリ結果で返された tsuids 値を後で使用するために保存できます。