创建时序表后,系统会自动为时序表创建两个SQL映射关系,您可以通过控制台、SDK等不同方式使用SQL查询时序数据。

时序表的SQL映射关系

创建时序表后,系统会自动为时序表创建两个SQL映射关系,包括时序数据表和时序元数据表。
  • 时序数据表:与时序表名称相同,用于查询时序数据。

    时序数据表结构请参见下表。

    列名 类型 说明
    _m_name VARCHAR 度量名称。
    _data_source VARCHAR 数据源。
    _tags VARCHAR 时间线标签,以数组表示。多个标签的格式为 ["tagKey1=tagValue1","tagKey2=tagValue2"] 。

    您可以使用tag_value_at函数提取某个标签的值。

    _time BIGINT 数据点的时间戳,单位微秒。
    _field_name VARCHAR 数据列名。
    _long_value BIGINT 整型的数据值。如果该数据列为非整型,则值为NULL。
    _double_value DOUBLE 浮点数类型的数据值。如果该数据列为非浮点数,则值为NULL。
    _bool_value BOOL 布尔类型的数据值。如果该数据列为非布尔值,则值为NULL。
    _string_value VARCHAR 字符串类型的数据值。如果该数据列为非字符串,则值为NULL。
    _binary_value MEDIUMBLOB 二进制类型的数据值。如果该数据列为非二进制,则值为NULL。
    _attributes VARCHAR 时间线属性,格式与标签相同。
    _meta_update_time BIGINT 时间线的元数据更新时间。

    当用户更新时间线属性时,系统会自动更新时间线元数据更新时间。此外,如果该时间线的数据持续写入,系统也会定时更新该时间,可用于判断一条时间线是否活跃。

  • 时序元数据表:在时序表名称后拼接::meta,用于查询时间线元数据。假如时序表名称为timeseries_table,则时序元数据表的名称为timeseries_table::meta

    时序元数据表结构请参见下表。

    列表 类型 说明
    _m_name VARCHAR 度量名称。
    _data_source VARCHAR 数据源。
    _tags VARCHAR 时间线标签。
    _attributes VARCHAR 时间线属性。
    _meta_update_time BIGINT 时间线的元数据更新时间。

    当用户更新时间线属性时,系统会自动更新时间线元数据更新时间。此外,如果该时间线的数据持续写入,系统也会定时更新该时间,可用于判断一条时间线是否活跃。

SQL语法

通过SELECT语句执行时序数据查询。更多信息,请参见查询数据

表格存储还提供tag_value_at扩展函数用于时间线标签(_tags)中的某个标签(tag)的值以及提取时间线属性(_attributes)中的某个属性值。

假设_tag为["host=abc","region=hangzhou"],则您可以使用tag_value_at(_tags, "host")提取host标签的值,即"abc"。SQL语句示例如下:
SELECT tag_value_at(_tags, "host") as host FROM timeseries_table LIMIT 1;

SQL示例

以下为通过SQL查询时序数据和检索时间线的示例。此处以时序表名称为timeseries_table,度量类型为basic_metric为例介绍。
  • 查询时序数据
    查询时序数据表中basic_metric度量类型的数据。
    SELECT * FROM timeseries_table WHERE _m_name = "basic_metric" LIMIT 10;
    假设数据源为device001,查询时序数据表中basic_metric度量类型下device001数据源在某个时刻之后的数据。
    SELECT * FROM timeseries_table WHERE _m_name = "basic_metric" AND _data_source = "device001" AND _time > (UNIX_TIMESTAMP() - 900) * 1000000 LIMIT 10;
    查询时序数据表中满足单个标签条件(host=host001)的时间线的数据。
    SELECT * FROM timeseries_table WHERE _m_name = "basic_metric" AND tag_value_at(_tags, "host") = "host001" AND _time > (UNIX_TIMESTAMP() - 900) * 1000000 LIMIT 10;
    查询时序数据表中满足多个标签条件(host=host001, region=hangzhou)的时间线的数据。
    SELECT * FROM timeseries_table WHERE _m_name = "basic_metric" AND tag_value_at(_tags, "host") = "host001" AND tag_value_at(_tags, "region") = "hangzhou"
     AND _time > (UNIX_TIMESTAMP() - 900) * 1000000 LIMIT 10;
    对时序数据表中某条时间线(host=host001)的cpu_usr数据按照时间窗口(600 s聚合一次)进行聚合(avg、max)查询。
    SELECT tag_value_at(_tags, "host") as host,_time DIV 600000000 * 600 as time_sec,avg(_double_value) as cpu_avg,max(_double_value) as cpu_max FROM
     timeseries_table WHERE _m_name = "basic_metric" AND _time > (UNIX_TIMESTAMP() - 21600) * 1000000 AND tag_value_at(_tags, "host") = "host001"
     AND _field_name = "cpu_summary_usr" GROUP BY host,time_sec ORDER BY time_sec LIMIT 100;
  • 检索时间线
    查询时序元数据表中basic_metric度量类型下的时间线。
    SELECT * FROM  `timeseries_table::meta` WHERE _m_name = "basic_metric" LIMI 100;
    查询时序元数据表中满足多个标签条件(host=host001, region=hangzhou)的时间线。
    SELECT * FROM `timeseries_table::meta` WHERE _m_name = "basic_metric" AND tag_value_at(_tags, "host") = "host001" AND tag_value_at(_tags, "region") = "hangzhou" LIMI 100;
    查询时序元数据表中满足多个标签条件(host=host001, region=hangzhou)和属性条件(status=online),且在某个时刻之后仍活跃的时间线。
    SELECT * FROM `timeseries_table::meta` WHERE _m_name = "basic_metric" AND tag_value_at(_tags, "host") = "host001" AND tag_value_at(_tags, "region") = "hangzhou"
     AND tag_value_at(_attributes, "status") = "online" AND _meta_update_time > (UNIX_TIMESTAMP() - 900) * 1000000 LIMIT 100;

使用方式

您可以通过以下方式使用SQL查询时序数据。查询时序数据时,请根据实际需要直接选择时序数据表或者时序元数据表进行操作。