當不確定要查詢的時間軸資訊(例如度量名稱、資料來源資訊)或者需要按照指定條件列出時間軸時,您可以使用QueryTimeseriesMeta介面指定度量名稱、資料來源、標籤、屬性、更新時間等多種條件檢索時間軸。
API介面說明請參見QueryTimeseriesMeta。
前提條件
已寫入時序資料。具體操作,請參見寫入時序資料。
已初始化TimeseriesClient。具體操作,請參見初始化OTSClient。
介面
public class QueryTimeseriesMetaRequest implements Request {
/** 時序表名稱。*/
private final String timeseriesTableName;
/** 檢索條件.*/
private MetaQueryCondition condition;
/** 是否返回命中的總行數。*/
private boolean getTotalHits = false;
/** 一次返回的時間軸個數。*/
private int limit = -1;
/** 使用此傳回值作為下一次操作的起始點繼續讀取時間軸。*/
private byte[] nextToken;
}
其中檢索條件的介面定義說明如下:
CompositeMetaQueryCondition
public class CompositeMetaQueryCondition implements MetaQueryCondition {
/** 邏輯運算子。*/
private final MetaQueryCompositeOperator operator;
/** 子條件列表。*/
private List<MetaQueryCondition> subConditions = new ArrayList<MetaQueryCondition>();
}
MeasurementMetaQueryCondition
public class MeasurementMetaQueryCondition implements MetaQueryCondition {
/** 關係運算子。*/
private final MetaQuerySingleOperator operator;
/** 要匹配的度量名稱。*/
private final String value;
}
DataSourceMetaQueryCondition
public class DataSourceMetaQueryCondition implements MetaQueryCondition {
/** 關係運算子。*/
private final MetaQuerySingleOperator operator;
/** 要匹配的資料來源名稱。*/
private final String value;
}
TagMetaQueryCondition
public class TagMetaQueryCondition implements MetaQueryCondition {
/** 關係運算子。*/
private final MetaQuerySingleOperator operator;
/** 標籤名稱。*/
private final String tagName;
/** 標籤值。*/
private final String value;
}
AttributeMetaQueryCondition
public class AttributeMetaQueryCondition implements MetaQueryCondition {
/** 關係運算子。*/
private final MetaQuerySingleOperator operator;
/** 屬性名稱。*/
private final String attributeName;
/** 屬性值。*/
private final String value;
}
UpdateTimeMetaQueryCondition
public class UpdateTimeMetaQueryCondition implements MetaQueryCondition {
/** 關係運算子。*/
private final MetaQuerySingleOperator operator;
/** 時間軸中繼資料更新時間的時間戳記。*/
private final long timeInUs;
}
參數
檢索時間軸時,您必須配置timeseriesTableName(時序表名稱)和condition(檢索條件)。其中condition包括compositeMetaQueryCondition(組合條件)、measurementMetaQueryCondition(度量名稱條件)、dataSourceMetaQueryCondition(資料來源條件)、tagMetaQueryCondition(標籤條件)、attributeMetaQueryCondition(屬性條件)和updateTimeMetaQueryCondition(更新時間條件)。檢索條件的詳細說明請參見下表。
參數 | 說明 |
compositeMetaQueryCondition | 組合條件,包括如下內容:
|
measurementMetaQueryCondition | 度量名稱條件,包括如下內容:
|
dataSourceMetaQueryCondition | 資料來源條件,包括如下內容:
|
tagMetaQueryCondition | 標籤條件,包括如下內容:
|
attributeMetaQueryCondition | 時間軸中繼資料的屬性條件,包括如下內容:
|
updateTimeMetaQueryCondition | 時間軸中繼資料的更新時間條件,包括如下內容:
|
樣本
以下樣本用於查詢指定時序表中度量名稱為cpu,標籤中含有os標籤且標籤首碼為Ubuntu
的所有時間軸。
private static void queryTimeseriesMeta(TimeseriesClient client) {
// 填寫時序表名稱。
String tableName = "<TIME_SERIES_TABLE>";
QueryTimeseriesMetaRequest queryTimeseriesMetaRequest = new QueryTimeseriesMetaRequest(tableName);
// 查詢度量名稱為cpu,標籤中含有os標籤且首碼為"Ubuntu"的所有時間軸。即measurement_name="cpu" and have_prefix(os, "Ubuntu")。
CompositeMetaQueryCondition compositeMetaQueryCondition = new CompositeMetaQueryCondition(MetaQueryCompositeOperator.OP_AND);
compositeMetaQueryCondition.addSubCondition(new MeasurementMetaQueryCondition(MetaQuerySingleOperator.OP_EQUAL, "cpu"));
compositeMetaQueryCondition.addSubCondition(new TagMetaQueryCondition(MetaQuerySingleOperator.OP_PREFIX, "os", "Ubuntu"));
queryTimeseriesMetaRequest.setCondition(compositeMetaQueryCondition);
queryTimeseriesMetaRequest.setGetTotalHits(true);
// 限制單次請求返回的時間軸中繼資料條數。
queryTimeseriesMetaRequest.setLimit(100);
// 發起查詢。
QueryTimeseriesMetaResponse queryTimeseriesMetaResponse = client.queryTimeseriesMeta(queryTimeseriesMetaRequest);
// 列印合格時間軸的總條數。
System.out.println(queryTimeseriesMetaResponse.getTotalHits());
// 儲存請求結果。
List<TimeseriesMeta> timeseriesMetas = new ArrayList<TimeseriesMeta>();
timeseriesMetas.addAll(queryTimeseriesMetaResponse.getTimeseriesMetas());
// 如果有NextToken,可以繼續發起請求擷取。
while (queryTimeseriesMetaResponse.getNextToken() != null) {
queryTimeseriesMetaRequest.setNextToken(queryTimeseriesMetaResponse.getNextToken());
queryTimeseriesMetaResponse = client.queryTimeseriesMeta(queryTimeseriesMetaRequest);
timeseriesMetas.addAll(queryTimeseriesMetaResponse.getTimeseriesMetas());
// 限制總共擷取的條數。
if (timeseriesMetas.size() >= 1000) {
break;
}
}
System.out.println(timeseriesMetas.size());
for (TimeseriesMeta timeseriesMeta : timeseriesMetas) {
System.out.println(timeseriesMeta.getTimeseriesKey().getMeasurementName());
System.out.println(timeseriesMeta.getTimeseriesKey().getDataSource());
System.out.println(timeseriesMeta.getTimeseriesKey().getTags());
System.out.println(timeseriesMeta.getAttributes());
System.out.println(timeseriesMeta.getUpdateTimeInUs());
}
}
相關文檔
確定到時間軸後,您可以執行如下操作: