管理时间线元数据

表格存储提供了QueryTimeseriesMeta接口用于根据多种条件检索时间线、UpdateTimeseriesMeta接口用于更新时间线元数据以及DeleteTimeseriesMeta接口用于删除时间线元数据。检索到时间线后,您可以根据需要删除时间线元数据、更新时间线元数据等。

功能概述

写入时序数据前,您可以预先定义时间线。如果未预先新建时间线元数据,当写入时序数据时,系统会自动提取该时间线的元数据信息并自动构建索引。

时间线元数据生成后,您可以根据所需场景管理时间线元数据。

功能

描述

检索时间线

调用QueryTimeseriesMeta接口根据度量名称条件、数据源条件、标签条件、更新时间条件、属性条件或者多条件组合条件检索时间线。

更新时间线元数据

调用UpdateTimeseriesMeta接口更新时间线元数据,例如时间线元数据属性。

时间线元数据中有一个时间线元数据属性列(_attributes)支持进行更新,但目前仅在时间线元数据生命周期为-1(数据永不过期)时支持该属性的更新。

说明

关于时间线元数据生命周期的更多信息,请参见时序数据生命周期

删除时间线元数据

调用DeleteTimeseriesMeta接口批量删除时间线元数据。

重要

删除时间元数据时并不会删除时间线对应的时序表数据,当通过GetTimeseriesData接口指定时间线标识进行查询时仍可查询到时序表数据。

使用方式

您可以使用控制台、命令行工具或者SDK进行时间线元数据管理操作。

说明

通过不同使用方式进行操作时支持的功能存在差异,请以实际为准。

管理时间线元数据前,您需要完成如下准备工作。

使用控制台

您可以使用控制台检索时间线或者更新时间线元数据。

检索时间线

  1. 进入实例管理页面。

    1. 登录表格存储控制台

    2. 在页面上方,选择资源组和地域。

    3. 概览页面,单击实例名称或者单击实例操作实例管理

  2. 实例详情页签,单击时序表列表页签。

  3. 时序表列表页签,单击时序表名称后选择数据管理页签或在时序表操作列单击数据管理

  4. 数据管理页签,单击右上角的查询数据

  5. 查询数据对话框,输入时间线的度量名称,根据实际需要输入数据源以及单击对应区域的添加设置标签、属性或者更新时间的匹配条件。

    下图中条件用于查询度量名称为cpu,标签中含有os=Ubuntu16.10的所有时间线。fig_querytimeseries

  6. 单击确定

    符合查询条件的数据会显示在数据管理页签。

更新时间线元数据

  1. 进入实例管理页面。

    1. 登录表格存储控制台

    2. 在页面上方,选择资源组和地域。

    3. 概览页面,单击实例名称或者单击实例操作实例管理

  2. 实例详情页签,单击时序表列表页签。

  3. 时序表列表页签,单击时序表名称后选择数据管理页签或在时序表操作列单击数据管理

  4. 数据管理页签,单击时间线操作列的更新

  5. 更新时间线对话框,根据需要添加、删除或者修改时间线元数据属性。

  6. 单击确定

使用命令行工具

您可以使用命令行工具检索时间线或者更新时间线元数据。

检索时间线

执行query_ts_meta(简写为qtm)命令根据条件检索时间线以及返回全部或者指定个数的时间线。更多信息,请参见检索时间线扫描时间线

  • 根据条件检索时间线

    以下示例用于检索度量名称为cpu且数据源标识为localhost的时间线。

    query_ts_meta --measurement cpu --datasource localhost --limit 10

  • 扫描指定个数时间线

    以下示例用于返回表中10个时间线。

    query_ts_meta --limit 10

更新时间线元数据

执行update_ts_meta(简写为utm)命令更新时间线元数据属性。

以下示例用于更新指定时间线的属性为"city=nanjing""region=jiangning"

update_ts_meta --k '["cpu","localhost",["city=hangzhou","region=xihu"]]' --attrs '["city=nanjing","region=jiangning"]' 

使用SDK

您可以使用Java SDKGo SDK检索时间线、更新时间线元数据或者删除时间线元数据。此处以Java SDK为例介绍数据写入的使用。

检索时间线

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

更新时间线元数据

以下示例用于更新指定时序表中时间线的属性信息。

private static void updateTimeseriesMeta(TimeseriesClient client) {
    List<TimeseriesMeta> timeseriesMetaList = new ArrayList<TimeseriesMeta>();
    for (int i = 0; i < 10; i++) {
        Map<String, String> tags = new HashMap<String, String>();
        tags.put("region", "hangzhou");
        tags.put("os", "Ubuntu16.04");
        // 构造TimeseriesKey。
        TimeseriesKey timeseriesKey = new TimeseriesKey("cpu", "host_" + i, tags);
        TimeseriesMeta meta = new TimeseriesMeta(timeseriesKey);
        // 设置时间线的属性值(attributes)。
        Map<String, String> attrs = new HashMap<String, String>();
        attrs.put("status", "online");
        meta.setAttributes(attrs);
        timeseriesMetaList.add(meta);
    }
    // 填写时序表名称。
    String tableName = "<TIME_SERIES_TABLE>";
    UpdateTimeseriesMetaRequest updateTimeseriesMetaRequest = new UpdateTimeseriesMetaRequest(tableName);
    updateTimeseriesMetaRequest.setMetas(timeseriesMetaList);
    UpdateTimeseriesMetaResponse updateTimeseriesMetaResponse = client.updateTimeseriesMeta(updateTimeseriesMetaRequest);
    // 检查是否全部成功。
    if (!updateTimeseriesMetaResponse.isAllSuccess()) {
        for (UpdateTimeseriesMetaResponse.FailedRowResult failedRowResult : updateTimeseriesMetaResponse.getFailedRows()) {
            System.out.println(failedRowResult.getIndex());
            System.out.println(failedRowResult.getError());
        }
    }
}

删除时间线元数据

以下示例用于删除指定时序表中的部分时间线。

private static void deleteTimeseriesMeta(TimeseriesClient client) {
    List<TimeseriesKey> timeseriesKeyList = new ArrayList<TimeseriesKey>();
    for (int i = 0; i < 10; i++) {
        Map<String, String> tags = new HashMap<String, String>();
        tags.put("region", "hangzhou");
        tags.put("os", "Ubuntu16.04");
        // 构造TimeseriesKey。
        TimeseriesKey timeseriesKey = new TimeseriesKey("cpu", "host_" + i, tags);
        timeseriesKeyList.add(timeseriesKey);
    }
    // 填写时序表名称。
    String tableName = "<TIME_SERIES_TABLE>";
    DeleteTimeseriesMetaRequest deleteTimeseriesMetaRequest = new DeleteTimeseriesMetaRequest(tableName);
    deleteTimeseriesMetaRequest.setTimeseriesKeys(timeseriesKeyList);
    DeleteTimeseriesMetaResponse deleteTimeseriesMetaResponse = client.deleteTimeseriesMeta(deleteTimeseriesMetaRequest);
    // 检查是否全部成功。
    if (!deleteTimeseriesMetaResponse.isAllSuccess()) {
        for (DeleteTimeseriesMetaResponse.FailedRowResult failedRowResult : deleteTimeseriesMetaResponse.getFailedRows()) {
            System.out.println(failedRowResult.getIndex());
            System.out.println(failedRowResult.getError());
        }
    }
}

常见问题

如何删除时序数据

相关文档

  • 检索到时间线后,您可以根据时间线查询时间线中满足指定条件的时序数据。更多信息,请参见查询时序数据

  • 如果要自动清理不需要的时间线元数据或者延长时间线元数据的保存时间,您可以通过配置时间线元数据生命周期实现。更多信息,请参见时序数据生命周期