全部产品
Search
文档中心

表格存储:写入时序数据

更新时间:Sep 03, 2024

表格存储提供了PutTimeseriesData接口用于批量写入时序数据。时序数据由时间线元数据和时序表数据组成。如果未预先新建时间线元数据,当写入时序数据时,系统会自动提取该时间线的元数据信息并自动构建索引。

说明

在表格存储的时序模型中采用一张二维的时序表来存储时序数据。每行代表一个时间线在某个时间点的数据,该行的主键部分为时间线标识和时间戳,该行的数据列部分为该时间线在该时间戳下的数据点,可以有多个数据列。更多信息,请参见时序模型介绍

注意事项

在写入时序数据时,请合理评估时序表的设计并关注时间线的总条数。如果表中存在大量的短时间线(即一条时间线下仅有一条或几条时序数据),则您可能会看到时序数据的元数据存储量偏大,因为目前表格存储会为每条时间线的元数据构建索引,按照每条时间线4 KB的大小计算元数据的总存储大小。

如果要删除时间线元数据,您可以使用时间线元数据生命周期实现由系统自动清理时间线元数据或者调用DeleteTimeseriesMeta接口进行手动删除。时间线的标识在SDK示例中为TimeseriesKey。

说明

关于时序数据计费的更多信息,请参见时序模型计量计费

功能概述

调用PutTimeseriesData接口批量写入时序数据,一次PutTimeseriesData操作支持写入多行时序数据。如果该行数据已存在,则先删除原行数据,再写入新行数据。

写入时序数据时,您必须指定时间线标识和时间线数据。如果未预先新建元数据,则系统会根据写入的数据自动提取元数据。

使用方式

您可以使用控制台、命令行工具或者SDK进行数据写入操作。

说明

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

写入时序数据前,您需要完成如下准备工作。

使用控制台

您可以使用控制台预先定义时间线以及将时序数据写入时序表。

  1. 进入实例管理页面。

    1. 登录表格存储控制台

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

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

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

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

  4. (可选)新建时间线。

    1. 数据管理页签,单击新增时间线

    2. 新增时间线对话框,新增时间线元数据。

      fig_datatimeseries

      详细参数说明请参见下表。

      参数

      描述

      度量名称

      时间线数据所度量的物理量或者监控指标的名称,例如cpu或net,用于表示该时间线记录的是cpu或者网络使用率等。

      数据源

      产生时间线的数据源标识,可以为空。

      标签

      时间线的标签信息。您可以自定义多个字符串类型的key-value对。

      属性

      时间线的属性列,用于记录该时间线的一些属性信息。

    3. 单击确定

  5. 插入数据。

    1. 单击插入数据

    2. 插入数据对话框,设置时间和属性列。fig_datatimeseries

    3. 单击确定

使用命令行工具

执行use --ts -t <TIMESERIES_TABLE>命令使用要操作的时序表后,您可以使用命令行工具执行如下命令写入时序数据。

  • 执行putts命令插入单行数据。更多信息,请参见写入时序数据

    以下示例用于插入一行时序数据到时序表。

    putts --k '["cpu","localhost",["region=hangzhou","os=ubuntu"]]' --field '[{"c":"fieldname","v":"fieldvalue"},{"c":"bool_field","v":true},{"c":"double_field","v":1.1},{"c":"int_value","v":10,"isint":true}]' --time 1635162859000000
  • 执行import_timeseries命令导入本地文件中的时序数据到时序表。更多信息,请参见导入时序数据

    假设配置文件名称为import_timeseries.txt,存储在/temp/目录中。示例文件中的每一行代表一行时序数据,每一行的数据格式为measurement_name,tags fields timestamp

    配置文件的示例如下:

    cpu,hostname=host_0,region=cn-hangzhou usage_user=58i,usage_system=2i,usage_idle=24i 1609459200000000000
    cpu,hostname=host_1,region=cn-hangzhou usage_user=58i,usage_system=2i,usage_idle=24i 1609459200000000000

    以下示例用于导入import_timeseries.txt文件中的时序数据到时序表中。

    import_timeseries --input /temp/import_timeseries.txt

使用SDK

您可以使用Java SDKGo SDK写入时序数据。此处以Java SDK为例介绍数据写入的使用。

以下示例用于向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());
        }
    }
}

常见问题

相关文档

  • 写入时序数据后,您可以执行如下操作:

  • 如果要迁移Kafka数据源的数据到表格存储时序表中,您可以通过Tablestore Sink Connector实现数据迁移。具体操作,请参见使用Tablestore Sink Connector同步Kafka数据

  • 您可以管理时间线元数据,例如检索时间线、更新时间线元数据属性、删除时间线元数据等。具体操作,请参见管理时间线元数据

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