データをクエリする前に、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 は、サブクエリのクエリ結果を示します。 QueryResult の getDps() メソッドを使用して、クエリ結果を取得できます。
最新のデータポイントをクエリする
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 値を後で使用するために保存できます。