查询时序数据

表格存储提供时序数据查询功能用于查询某一时间线在指定时间段的时序数据。查询时序数据时,如果不确定要查询的时间线信息(例如度量名称、数据源信息),您可以先根据指定条件检索到时间线后再进行查询。

功能概述

调用GetTimeseriesData接口查询指定时间线中符合条件的时序数据。

查询时序数据时,您必须指定要查询的时间线信息以及根据需要配置查询条件。

  • 配置是否按照时间倒序读取数据,可用于获取某条时间线的最新数据。

  • 配置只获取指定数据列,默认返回所有数据列。

  • 配置一次最多返回的行数。

查询方式

您可以使用控制台、命令行工具或者SDK进行时序数据查询操作。

说明

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

查询时序数据前,您需要确定要查询的时间线标识信息。

使用控制台

您可以使用控制台查询某一时间线在指定时间范围内的数据。

  1. 进入实例管理页面。

    1. 登录表格存储控制台

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

    3. 概览页面,单击实例名称或单击实例名称右侧的实例管理

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

  3. 时序表列表页签,单击目标时序表操作列的数据管理

  4. 数据管理页签,在目标时间线的操作列单击查询数据

  5. 设置查询条件。

    1. 查询结果默认按照时间从小到大排序。如需按照时间倒序读取数据,请选择倒序查询

    2. 选择查询方式并设置时间。

  6. 单击查询

    符合查询条件的数据会显示在数据管理页签,查询结果支持按列表或者图的方式展示。

    按列表展示数据

    image

    按图形展示数据

    image

使用命令行工具

您可以使用命令行工具查询某一时间线在指定时间范围内的数据。

执行getts命令查询某一个时间线中指定范围内的时序数据。更多信息,请参见查询时序数据

以下示例用于查询度量名称为cpu,数据源标识为localhost,且标签为"region=hangzhou""os=ubuntu"的时间线中时间戳在01667638230000000之间的最多前100条时序数据。返回结果按照时间戳升序排列。

getts --k '["cpu","localhost",["region=hangzhou","os=ubuntu"]]' --time_start 0 --time_end 1667638230000000 --limit 100

使用SDK

您可以使用Java SDKGo SDK查询某一时间线在指定时间范围内的数据。此处以Java SDK为例介绍时序数据查询功能的使用。

以下示例用于查询test_timeseries_table时序表中满足指定条件的时序数据。

private static void getTimeseriesData(TimeseriesClient client) {
    String tableName = "test_timeseries_table";
    GetTimeseriesDataRequest getTimeseriesDataRequest = new GetTimeseriesDataRequest(tableName);
    Map<String, String> tags = new HashMap<String, String>();
    tags.put("region", "hangzhou");
    tags.put("os", "Ubuntu16.04");
    // 通过measurementName、dataSource和tags构建TimeseriesKey。
    TimeseriesKey timeseriesKey = new TimeseriesKey("cpu", "host_0", tags);
    getTimeseriesDataRequest.setTimeseriesKey(timeseriesKey);
    // 指定时间范围。
    getTimeseriesDataRequest.setTimeRange(0, (System.currentTimeMillis() + 60 * 1000) * 1000);
    // 限制返回行数。
    getTimeseriesDataRequest.setLimit(10);
    // 设置是否倒序读取数据,可不设置,默认值为false。如果设置为true,则倒序读取数据。
    getTimeseriesDataRequest.setBackward(false);
    // 设置获取部分数据列,可不设置,默认获取全部数据列。
    getTimeseriesDataRequest.addFieldToGet("string_1", ColumnType.STRING);
    getTimeseriesDataRequest.addFieldToGet("long_1", ColumnType.INTEGER);

    GetTimeseriesDataResponse getTimeseriesDataResponse = client.getTimeseriesData(getTimeseriesDataRequest);
    System.out.println(getTimeseriesDataResponse.getRows().size());
    if (getTimeseriesDataResponse.getNextToken() != null) {
        // 如果nextToken不为空,可以发起下一次请求。
        getTimeseriesDataRequest.setNextToken(getTimeseriesDataResponse.getNextToken());
        getTimeseriesDataResponse = client.getTimeseriesData(getTimeseriesDataRequest);
        System.out.println(getTimeseriesDataResponse.getRows().size());
    }
}

常见问题

相关文档

  • 您还可以使用SQL查询时序数据。更多信息,请参见使用SQL查询时序数据

  • 如果要可视化展示时序数据,您可以通过对接Grafana实现。更多信息,请参见对接Grafana

  • 如果要低成本存储时序数据以及快速查询和分析时序数据,您可以使用时序分析存储实现。更多信息,请参见时序分析存储概述