通过 Tablestore SDK for Java 从时序表中查询符合指定条件的时序数据。
前提条件
已初始化客户端。详情请参见初始化Tablestore Client。
方法说明
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());
});
}
还可以在查询时配置以下可选项。
-
设置单次请求的最大返回行数
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进行保存和传输。 String tokenAsString = Base64.toBase64String(nextToken); // 将String重新解码为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()); }); }
常见问题
该文章对您有帮助吗?