Sebelum mengkueri data, buat objek Query. Objek Query berisi kondisi kueri. Anda dapat menentukan tag, metrik, dan kondisi kueri agregat dalam objek Query. Dengan cara ini, Anda dapat mengkueri data yang memenuhi kondisi tertentu.
Tentukan kondisi kueri
Contoh Kode
Buat objek Query yang berisi kondisi kueri.
Query query = Query
.timeRange(startTime, endTime) // Tentukan rentang waktu saat Anda ingin mengkueri data.
.sub(SubQuery.metric("hello").aggregator(Aggregator.AVG).tag("tagk1", "tagv1").build()) // Buat subkueri.
.sub(SubQuery.metric("world").aggregator(Aggregator.SUM).tag("tagk2", "tagv2").build()) // Buat subkueri.
.build();Subkueri
Anda dapat membuat beberapa objek SubQuery dalam sebuah objek Query. Dengan cara ini, Anda dapat membuat subkueri yang berisi beberapa kondisi kueri.
Contoh Kode
Buat contoh subkueri.
SubQuery subQuery = SubQuery
.metric("test-metric")
.aggregator(Aggregator.AVG)
.downsample("60m-avg")
.tag("tagk1", "tagv1")
.tag("tagk2", "tagv2")
.build();SubQuery adalah objek di mana Anda dapat mendefinisikan subkueri. Aggregator adalah kelas enumerasi.
Jalankan kueri secara sinkron
Lindorm Time Series Database (TSDB) SDK memungkinkan Anda untuk mengkueri data dalam mode sinkronisasi thread.
Contoh Kode
Gunakan metode query() untuk mengkueri data secara sinkron.
List<QueryResult> result = tsdb.query(query);
System.out.println("Hasil yang dikembalikan" + result);Jalankan kueri secara asinkron
TSDB SDK memungkinkan Anda untuk mengkueri data secara asinkron.
Contoh Kode
Gunakan metode query() untuk mengkueri data secara asinkron dan konfigurasikan callback untuk menentukan bagaimana hasil kueri dikembalikan.
QueryCallback cb = new QueryCallback() {
@Override
public void response(Query input, List<QueryResult> result) {
System.out.println("Parameter kueri:" + input);
System.out.println("Hasil yang dikembalikan:" + result);
}
};
tsdb.query(query, cb);Kueri data dan urutkan hasil kueri secara menurun
TSDB SDK memungkinkan Anda untuk mengkueri data dan mengurutkan hasil kueri secara menurun atau naik. Metode getOrderDps(boolean ordeset) dapat digunakan untuk mengurutkan hasil kueri berdasarkan timestamp. Jika Anda menggunakan getOrderDps(true) dalam kueri, hasil kueri yang dikembalikan diurutkan berdasarkan timestamp secara menurun. Jika Anda menggunakan getOrderDps() dalam kueri, hasil kueri yang dikembalikan diurutkan berdasarkan timestamp secara naik. Contoh Kode
Query query = Query
.timeRange(current - 1000,start + 1000)
.sub(SubQuery.metric(metric).aggregator(Aggregator.NONE).tag(tags).build())
.build();
try {
// Jalankan kueri dan peroleh hasil kueri.
List<QueryResult> result = tsdb.query(query);
for(QueryResult queryResult : result){
// Peroleh titik data yang tidak terurut.
System.out.println(queryResult.getDps());
System.out.println("-------------");
// Peroleh kumpulan titik data yang diurutkan berdasarkan timestamp secara naik.
System.out.println(queryResult.getOrderDps());
System.out.println("-------------");
// Peroleh kumpulan titik data yang diurutkan berdasarkan timestamp secara menurun.
System.out.println(queryResult.getOrderDps(true));
}
} catch (HttpUnknowStatusException e) {
e.printStackTrace();
}Hasil kueri
Jika Anda menggunakan metode query() untuk mengkueri data, hasil kueri dikembalikan dalam List<QueryResult>. QueryResult menunjukkan hasil kueri dari subkueri. Anda dapat menggunakan metode getDps() dalam QueryResult untuk memperoleh hasil kueri.
Kueri titik data terbaru
TSDB SDK memungkinkan Anda untuk mengkueri titik data terbaru sebelum timestamp tertentu. Contoh kode:
Contoh 1
Buat kueri yang berisi subkueri. Metrik dan tag ditentukan dalam subkueri.
// Buat tag.
Map<String,String> tags = new HashMap<String, String>();
tags.put("uid","1");
tags.put("id","6");
String metric = "test.1";
// Buat kueri untuk mengembalikan titik data terbaru.
LastPointQuery query = LastPointQuery.builder()
// Tentukan timestamp.
.timestamp(1537520409729l)
// Tentukan apakah akan menggunakan timestamp dalam milidetik untuk mengkueri data.
.msResolution(true)
// Buat subkueri untuk mengembalikan titik data terbaru dari deret waktu tertentu.
// Anda dapat membuat beberapa subkueri pada saat yang sama.
.sub(LastPointSubQuery.builder(metric,tags).build()).build();
// Peroleh titik terbaru dari setiap deret waktu. Setiap deret waktu memiliki LastDataValue.
List<LastDataValue> lastDataValues = tsdb.queryLast(query);
System.out.println(lastDataValues);Contoh 2
Tentukan ID deret waktu dalam subkueri untuk mengkueri data.
// Tentukan ID deret waktu.
List<String> tsuids = new ArrayList<String>();
tsuids.add("10000B7C000095000081****FF00006F");
// Buat kueri untuk mengembalikan titik data terbaru.
LastPointQuery query = LastPointQuery.builder()
// Tentukan timestamp.
.timestamp(1537520409729l)
// Tentukan apakah akan menggunakan timestamp dalam milidetik untuk mengkueri data.
.msResolution(true)
// Buat subkueri untuk mengembalikan titik data terbaru dari deret waktu tertentu.
// Anda dapat membuat beberapa subkueri pada saat yang sama.
.sub(LastPointSubQuery.builder(tsuids).build()).build();
// Peroleh titik terbaru dari setiap deret waktu. Setiap deret waktu memiliki LastDataValue.
List<LastDataValue> lastDataValues = tsdb.queryLast(query);
System.out.println(lastDataValues);Nilai tsuids dapat diperoleh dari hasil kueri pada Contoh 1. Pertama kali Anda mengkueri data berdasarkan Contoh 1, Anda dapat menyimpan nilai tsuids yang dikembalikan dalam hasil kueri untuk penggunaan selanjutnya.