调用 QueryTimeseriesMeta 接口,按度量名称、数据源、标签、属性或更新时间筛选时序表中的时间线。
API 接口说明请参见QueryTimeseriesMeta。
前提条件
接口
QueryTimeseriesMetaRequest 接受时序表名称和可选查询条件。通过 setCondition 设置过滤条件,setGetTotalHits 获取命中总数,setLimit 控制单次返回条数,NextToken 实现分页。
public class QueryTimeseriesMetaRequest implements Request {
/** 时序表名称。*/
private final String timeseriesTableName;
/** 检索条件.*/
private MetaQueryCondition condition;
/** 是否返回命中的总行数。*/
private boolean getTotalHits = false;
/** 一次返回的时间线个数。*/
private int limit = -1;
/** 使用此返回值作为下一次操作的起始点继续读取时间线。*/
private byte[] nextToken;
}
以下类均实现 MetaQueryCondition 接口,定义支持的查询条件类型。
CompositeMetaQueryCondition
使用 AND、OR、NOT 逻辑运算符组合多个条件。
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 和至少一个查询条件。各条件类型说明如下。
|
参数 |
说明 |
|
compositeMetaQueryCondition |
使用逻辑运算符组合多个条件:
|
|
measurementMetaQueryCondition |
按度量名称过滤:
|
|
dataSourceMetaQueryCondition |
按数据源过滤:
|
|
tagMetaQueryCondition |
按标签名称和标签值过滤:
|
|
attributeMetaQueryCondition |
按属性名称和属性值过滤:
|
|
updateTimeMetaQueryCondition |
按元数据最后更新时间过滤:
|
示例
以下示例查询时序表中度量名称为 cpu、且 os 标签值前缀为 Ubuntu 的所有时间线。每次请求最多返回 100 条,累计达到 1000 条后停止。
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());
}
}
相关文档
确定时间线后,可执行以下操作: