帮助文档 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
帮助文档 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. 表格存储
  4. 操作指南
  5. 时序模型
  6. 通过SDK使用时序模型

通过SDK使用时序模型

  • 时序模型
  • 发布于 2025-04-22
  • 0 次阅读
文档编辑
文档编辑

通过SDK使用时序模型时,您需要先创建时序表,然后将时序数据写入时序表,最后再进行时间线检索和时序数据查询。

前提条件

  • 创建时序模型实例。

  • 初始化Tablestore Client。

注意事项

目前支持时序模型功能的地域包括华东1(杭州)、华东2(上海)、华北2(北京)、华北3(张家口)、华北6(乌兰察布)、华南1(深圳)、西南1(成都)、中国香港、日本(东京)、新加坡、马来西亚(吉隆坡)、印度尼西亚(雅加达)、德国(法兰克福)、英国(伦敦)、美国(硅谷)、美国(弗吉尼亚)。

如果使用过程中遇到问题,请通过钉钉加入用户群44327024(物联网存储 IoTstore 开发者交流群)联系我们。

使用SDK

您可以使用如下语言的SDK实现时序模型功能。本文Java SDK为例介绍时序模型的使用。

  • Java SDK:时序模型

  • Go SDK:时序模型

  • Python SDK:时序模型

步骤一:创建时序表

当使用表格存储时序模型时,您需要使用CreateTimeseriesTable接口创建时序表用于存储时序数据。

说明

如果需要低成本存储时序数据以及快速查询和分析时序数据,您可以为时序表创建分析存储。分析存储功能主要用于时序数据长期存储和分析场景。

以下示例用于创建test_timeseries_table时序表,且该表中数据永不过期。

private static void createTimeseriesTable(TimeseriesClient client) {
    String tableName = "test_timeseries_table";
    TimeseriesTableMeta timeseriesTableMeta = new TimeseriesTableMeta(tableName);
    int timeToLive = -1;
    timeseriesTableMeta.setTimeseriesTableOptions(new TimeseriesTableOptions(timeToLive));
    CreateTimeseriesTableRequest request = new CreateTimeseriesTableRequest(timeseriesTableMeta);
    //不创建默认分析存储。
    request.setEnableAnalyticalStore(false);    
    client.createTimeseriesTable(request);
}

步骤二:写入时序数据

创建时序表后,您可以使用PutTimeseriesData接口批量写入时序数据到时序表。

以下示例用于向test_timeseries_table时序表中写入多个时序数据。

private static void putTimeseriesData(TimeseriesClient client) {
    List<TimeseriesRow> rows = new ArrayList<TimeseriesRow>();
    for (int i = 0; i < 10; i++) {
        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_" + i, tags);
        // 指定timeseriesKey和timeInUs创建timeseriesRow。
        TimeseriesRow row = new TimeseriesRow(timeseriesKey, System.currentTimeMillis() * 1000 + i);
        // 增加数据值(field)。
        row.addField("cpu_usage", ColumnValue.fromDouble(10.0));
        row.addField("cpu_sys", ColumnValue.fromDouble(5.0));
        rows.add(row);
    }
    String tableName = "test_timeseries_table";
    PutTimeseriesDataRequest putTimeseriesDataRequest = new PutTimeseriesDataRequest(tableName);
    putTimeseriesDataRequest.setRows(rows);
    // 一次写入多行时序数据。
    PutTimeseriesDataResponse putTimeseriesDataResponse = client.putTimeseriesData(putTimeseriesDataRequest);
    // 检查是否全部成功。
    if (!putTimeseriesDataResponse.isAllSuccess()) {
        for (PutTimeseriesDataResponse.FailedRowResult failedRowResult : putTimeseriesDataResponse.getFailedRows()) {
            System.out.println(failedRowResult.getIndex());
            System.out.println(failedRowResult.getError());
        }
    }
}

步骤三:检索时间线

如果不确定要查询的时间线信息(例如度量名称、数据源信息),请使用QueryTimeseriesMeta接口指定多种条件检索时间线。

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

步骤四:查询时序数据

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

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

private static void getTimeseriesData(TimeseriesClient client) {
    String tableName = "<TIMESERIES_TABLE_NAME>";
    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());
    
    // 如果nextToken不为空,可以发起下一次请求。
    if (getTimeseriesDataResponse.getNextToken() != null) {
        // 获取nextToken。
        byte[] nextToken = getTimeseriesDataResponse.getNextToken();
        
        // 如果需要持久化nextToken或者传输nextToken给前端页面,您可以使用Base64编码将nextToken编码为String进行保存和传输。
        {
            // token本身不是字符串,直接使用new String(nextToken)将token编码为String会造成token信息丢失。
            String tokenAsString = Base64.toBase64String(nextToken);
            // 将String解码为byte。
            byte[] tokenAsByte = Base64.fromBase64String(tokenAsString);
        }
        
        getTimeseriesDataRequest.setNextToken(nextToken);
        getTimeseriesDataResponse = client.getTimeseriesData(getTimeseriesDataRequest);
        System.out.println(getTimeseriesDataResponse.getRows().size());
    }
}

常见问题

  • 如何更新时序数据

  • 如何删除时序数据

  • 数据写入时序表后是否可以立即查询到?

相关文档

  • 您还可以通过控制台或者命令行工具快速体验时序模型的功能。具体操作,请参见时序模型快速入门或通过命令行工具使用时序模型。

  • 基于时序模型可以实现基于Tablestore时序模型构建车联网数据存储、基于设备接入平台与Tablestore搭建车辆轨迹数据平台等方案。更多方案介绍,请参见场景实战-典型场景架构与实现。

相关文章

创建时序模型实例 2025-04-22 14:43

创建时序模型实例后,您可以使用控制台、CLI工具或者SDK快速体验时序模型功能。 注意事项

时序表操作 2025-04-22 14:43

时序模型通过时序表存储时间序列数据,单表能提供高并发写入和查询以及PB级海量数据的低成本存储。本文将为您介绍如何创建和管理时序表。 注意事项 单个实例中最多可以创建64张表,限制值包含数据表、二级索引表、时序表、Lastpoint索引表和分析存储的数量。更多使用限制介绍,请参见时序模型使用限制

时序数据生命周期 2025-04-22 14:43

当要实现自动清理时序表中的历史数据时,您可以使用数据生命周期(TTL)功能有效地管理时序数据,减少数据存储空间,降低存储成本。配置TTL后,如果希望延长数据保存时间,您可以修改TTL。 注意事项 数据清理后无法恢复,请谨慎操作。 通过配置TTL清理历史数据前,如果需要备

时间线操作 2025-04-22 14:43

时间线元数据也称为时间序列元数据,主要由时间线标识、属性和更新时间组成。本文将为您介绍如何管理时间线元数据。 功能概述 写入时序数据前,您可以预先定义时间线。如果未预先新建时间线元数据,当写入时序数据时,系统会自动提取该时间线的元数据信息并自动构建索引。 时间线元数据生成后,您可以根据所需场景管理时

时序数据操作 2025-04-22 14:43

本文将为您介绍表格存储中时序数据的写入与查询操作。 写入时序数据 创建时序表后,请根据实际场景选择合适的方式写入时序数据。 如果要通过SDK批量写入时序数据到时序表,请参见写入时序数据。

写入时序数据 2025-04-22 14:43

时序数据由元数据和数据两部分组成,元数据用于记录时间序列的标识信息和属性信息,而数据则记录了所有时间序列的数据点(包括产生数据点的时间和对应的数据值)。本文将为您介绍如何写入时序数据。 功能概述 您可以通过控制台、SDK或命令行的方式写入时序数据。如果待写入的行数据已存在,则将先删除原有的行数据,然

目录
Copyright © 2025 your company All Rights Reserved. Powered by 博智数字服务平台.
闽ICP备08105208号-1