このトピックでは、Tablestore SDK for Java を使用して、時系列テーブル内の特定の条件を満たす時系列データをクエリする方法について説明します。
前提条件
メソッドの説明
public GetTimeseriesDataResponse getTimeseriesData(GetTimeseriesDataRequest request) throws TableStoreException, ClientExceptionサンプルコード
次のサンプルコードは、timeseries_table_sample 時系列テーブル内の条件を満たす時系列データをクエリします。
private static void getTimeseriesData(TimeseriesClient client) {
String tableName = "timeseries_table_sample";
GetTimeseriesDataRequest getTimeseriesDataRequest = new GetTimeseriesDataRequest(tableName);
// 時系列識別子を指定します。メジャー名は cpu、データソース識別子は host_0、タグは "region=hangzhou" と "os=Ubuntu16.04" です。
Map<String, String> tags = new HashMap<String, String>();
tags.put("region", "hangzhou");
tags.put("os", "Ubuntu16.04");
TimeseriesKey timeseriesKey = new TimeseriesKey("cpu", "host_0", tags);
getTimeseriesDataRequest.setTimeseriesKey(timeseriesKey);
// 時間範囲を指定します。
getTimeseriesDataRequest.setTimeRange(0, (System.currentTimeMillis() + 60 * 1000) * 1000);
getTimeseriesDataRequest.setLimit(20);
// 時系列データをクエリします。
GetTimeseriesDataResponse getTimeseriesDataResponse = client.getTimeseriesData(getTimeseriesDataRequest);
// クエリ結果を出力します。
getTimeseriesDataResponse.getRows().forEach(row -> {
System.out.println("TimeseriesKey: " + row.getTimeseriesKey() + "; TimeInUs: " + row.getTimeInUs() + "; Fields: " + row.getFields());
});
}時系列データをクエリする際に、サンプルコードを参照して以下の設定を行うこともできます。
1 回のリクエストで返される最大行数を設定する
getTimeseriesDataRequest.setLimit(20);逆順にソートするように設定する
// データを逆時系列順に読み取って、時系列の最新データを取得します。 getTimeseriesDataRequest.setBackward(true);結果で取得するデータ列を指定する
getTimeseriesDataRequest.addFieldToGet("col_string", ColumnType.STRING); getTimeseriesDataRequest.addFieldToGet("col_long", ColumnType.INTEGER); getTimeseriesDataRequest.addFieldToGet("col_double", ColumnType.DOUBLE);nextTokenを使用してページングクエリを実行する// nextToken が空でない場合は、次のリクエストを開始できます。 if (getTimeseriesDataResponse.getNextToken() != null) { // nextToken を取得します。 byte[] nextToken = getTimeseriesDataResponse.getNextToken(); /* // nextToken を永続化したり、nextToken をフロントエンドページに転送する必要がある場合は、Base64 を使用して nextToken を文字列にエンコードできます。 String tokenAsString = Base64.toBase64String(nextToken); // 文字列を byte[] 型の nextToken にデコードします。 byte[] tokenAsByte = Base64.fromBase64String(tokenAsString); */ // nextToken を指定します。 getTimeseriesDataRequest.setNextToken(nextToken); // 時系列データをクエリします。 getTimeseriesDataResponse = client.getTimeseriesData(getTimeseriesDataRequest); // クエリ結果を出力します。 getTimeseriesDataResponse.getRows().forEach(row -> { System.out.println("TimeseriesKey: " + row.getTimeseriesKey() + "; TimeInUs: " + row.getTimeInUs() + "; Fields: " + row.getFields()); }); }