通过SDK创建时序表后,您可以将时序数据写入表格存储。本文介绍如何通过表格存储SDK创建时序表以及将时序数据写入时序表。

背景信息

表格存储的时序模型针对时间序列数据的特点进行设计,适用于物联网设备监控、设备采集数据、机器监控数据等场景。更多信息,请参见时序模型概述

步骤一:创建时序表

使用CreateTimeseriesTable创建时序表时,需要指定表的配置信息。

  • 参数

    时序表的结构信息(timeseriesTableMeta)包括表名(timeseriesTableName)和配置信息(timeseriesTableOptions)的配置,详细参数说明请参见下表。

    参数 说明
    timeseriesTableName 时序表名。
    timeseriesTableOptions 时序表的配置信息,包括如下内容:

    timeToLive:配置时序表的数据存活时间,单位为秒。如果希望数据永不过期,可以设置为-1。您可以通过UpdateTimeseriesTable接口修改。

  • 示例

    创建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);
        client.createTimeseriesTable(request);
    }

步骤二:将时序数据写入时序表

使用PutTimeseriesData接口,您可以批量写入时序数据。一次PutTimeseriesData调用可以写入多行数据。

  • 参数

    一行时序数据(timeseriesRow)包括时间线标识(timeseriesKey)和时间线数据的配置,其中时间线数据包括数据点的时间(timeInUs)和数据点(fields)。详细参数说明请参见下表。

    参数 说明
    timeseriesKey 时间线标识,包括如下内容:
    • measurementName:时间线的度量名称。
    • dataSource:数据源信息,可以为空。
    • tags:时间线的标签信息,为多个字符串的key-value对。
    timeInUs 数据点的时间,单位为微秒。
    fields 数据点,可以由多个名称(FieldKey)和数据值(FieldValue)对组成。
  • 示例

    向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());
            }
        }
    }

使用SDK

您可以通过如下语言的SDK使用时序模型。