當不確定要查詢的時間線信息(例如度量名稱、數據源信息)或者需要按照指定條件列出時間線時,您可以使用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());
}
}
相關文檔
確定到時間線后,您可以執行如下操作: