检索时间线

更新时间:
复制为 MD 格式

调用 QueryTimeseriesMeta 接口,按度量名称、数据源、标签、属性或更新时间筛选时序表中的时间线。

说明

API 接口说明请参见QueryTimeseriesMeta

前提条件

初始化Tablestore Client

接口

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

使用逻辑运算符组合多个条件:

  • operator:逻辑运算符,可选 AND、OR、NOT。

  • subConditions:待组合的子条件列表。

measurementMetaQueryCondition

按度量名称过滤:

  • operator:关系运算符或前缀匹配条件,关系运算符可选 =、!=、>、>=、<、<=。

  • value:要匹配的度量名称,类型为字符串。

dataSourceMetaQueryCondition

按数据源过滤:

  • operator:关系运算符或前缀匹配条件,关系运算符可选 =、!=、>、>=、<、<=。

  • value:要匹配的数据源名称,类型为字符串。

tagMetaQueryCondition

按标签名称和标签值过滤:

  • operator:关系运算符或前缀匹配条件,关系运算符可选 =、!=、>、>=、<、<=。

  • tagName:要匹配的标签名称,类型为字符串。

  • value:要匹配的标签值,类型为字符串。

attributeMetaQueryCondition

按属性名称和属性值过滤:

  • operator:关系运算符或前缀匹配条件,关系运算符可选 =、!=、>、>=、<、<=。

  • attributeName:属性名称,类型为字符串。

  • value:属性值,类型为字符串。

updateTimeMetaQueryCondition

按元数据最后更新时间过滤:

  • operator:关系运算符,可选 =、!=、>、>=、<、<=。

  • timeInUs:时间线元数据更新时间的时间戳,单位为微秒。

示例

以下示例查询时序表中度量名称为 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());
    }
}

相关文档

确定时间线后,可执行以下操作:

  • 查询时间线中满足指定条件的时序数据。具体操作,请参见查询时序数据

  • 更新时间线元数据的属性。具体操作,请参见更新时间线

  • 删除不需要的时间线元数据。具体操作,请参见删除时间线