使用 Java SDK 查詢指定時間軸在時間範圍內的時序資料,並支援按時間排序、選擇返回列和分頁讀取。
前提條件
安裝Tablestore Java SDK並初始化時序模型用戶端。
功能說明
調用 getTimeseriesData 方法,根據完整的時間軸標識和時間範圍查詢單條時間軸中的資料點。查詢範圍包含起始時間,不包含結束時間。
public GetTimeseriesDataResponse getTimeseriesData(GetTimeseriesDataRequest request) throws TableStoreException, ClientException通過 putTimeseriesData 寫入的資料可以立即通過 getTimeseriesData 查詢。
以下樣本查詢 example_timeseries_table 中 cpu 時間軸最近一小時的資料,並限制單次最多返回 20 行。
TimeseriesClient timeseriesClient = client.asTimeseriesClient();
Map<String, String> tags = new HashMap<>();
tags.put("region", "cn-hangzhou");
tags.put("host", "host_0");
TimeseriesKey timeseriesKey = new TimeseriesKey("cpu", "source_0", tags);
long endTimeInUs = System.currentTimeMillis() * 1000L;
long beginTimeInUs = endTimeInUs - 3600L * 1000L * 1000L;
GetTimeseriesDataRequest request =
new GetTimeseriesDataRequest("example_timeseries_table");
request.setTimeseriesKey(timeseriesKey);
request.setTimeRange(beginTimeInUs, endTimeInUs);
request.setLimit(20);
GetTimeseriesDataResponse response = timeseriesClient.getTimeseriesData(request);
for (TimeseriesRow row : response.getRows()) {
System.out.println(row.getTimeInUs());
System.out.println(row.getFields());
}參數說明
GetTimeseriesDataRequest 包含以下參數。
名稱 | 類型 | 說明 |
timeseriesTableName(必選) |
| 時序表名稱。 |
timeseriesKey(必選) |
| 要查詢的完整時間軸標識。各組成項必須與寫入資料時使用的值一致。 |
beginTimeInUs(必選) |
| 查詢範圍的起始時間,格式為從 1970-01-01 00:00:00 UTC 開始計算的微秒時間戳記,取值大於等於 |
endTimeInUs(必選) |
| 查詢範圍的結束時間,格式為微秒時間戳記,取值大於 |
limit(可選) |
| 單次請求的最大返回行數。預設值和最大值均為 |
nextToken(可選) |
| 分頁令牌。首次請求不設定;響應中的 |
backward(可選) |
| 是否按時間倒序返回資料。預設值為 |
fieldsToGet(可選) |
| 要返回的資料欄位名稱和類型。不設定時返回全部資料欄位。指定的資料類型與實際類型不同時,該欄位無法讀取。 |
時間軸標識
timeseriesKey 的類型為 TimeseriesKey,包含以下參數。
名稱 | 類型 | 說明 |
measurementName(必選) |
| 度量名稱。寫入時設定為空白時,查詢也使用空值。 |
dataSource(可選) |
| 資料來源標識。寫入時設定為空白時,查詢也使用空值。 |
tags(可選) |
| 標籤資訊,由字串類型的索引值對組成。必須與寫入時的標籤集合一致。 |
傳回值
GetTimeseriesDataResponse 包含以下業務返回欄位。
欄位 | 類型 | 說明 |
|
| 通過 |
|
| 通過 |
時序資料行
rows[] 中每個元素的類型為 TimeseriesRow,包含以下欄位。
欄位 | 類型 | 說明 |
|
| 通過 |
|
| 通過 |
|
| 通過 |
情境樣本
分頁讀取全部資料
當一次請求未返回全部資料時,重複傳入響應中的 nextToken,直至傳回值為 null。
byte[] nextToken = null;
do {
request.setNextToken(nextToken);
GetTimeseriesDataResponse response =
timeseriesClient.getTimeseriesData(request);
for (TimeseriesRow row : response.getRows()) {
System.out.println(row.getTimeInUs());
System.out.println(row.getFields());
}
nextToken = response.getNextToken();
} while (nextToken != null);