创建时序表并建立SQL映射关系后,您可以通过控制台、SDK等不同方式使用SQL查询时序数据。
时序表的SQL映射关系
根据每个时间线每个时刻对应一个值或者多个值,时序模型分为“单值模型”和“多值模型”。对于同一个时序表,您可以建立三种SQL映射关系用于数据查询,详细说明请参见下表。
映射关系类型 | 描述 | 创建方式 | 在SQL中的表名 |
---|---|---|---|
单值模型映射关系 | 以单值模型查询时序数据。 | 创建时序表后,系统自动建立SQL映射关系。 | 与时序表名相同 |
多值模型映射关系 | 以多值模型查询时序数据。 | 创建时序表后,由用户手动建立SQL映射关系。 | 在时序表名后拼接::后缀 ,即时序表名::后缀 ,其中后缀 由用户在创建时自定义
|
时间线元数据映射关系 | 查询时间线元数据。 | 创建时序表后,系统自动建立SQL映射关系。 | 在时序表名称后拼接::meta ,即时序表名::meta |
单值模型映射关系
时序表创建后,系统会自动创建单值模型映射关系。在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 | 时间线的元数据更新时间。
当用户更新时间线属性时,系统会自动更新时间线元数据更新时间。此外,如果该时间线的数据持续写入,系统也会定时更新该时间,可用于判断一条时间线是否活跃。 |
多值模型映射关系
当以多值模型查询时序数据时,您需要执行CREATE TABLE语句来创建多值模型映射关系。在SQL中表名为时序表名称后拼接::后缀
,其中后缀
由用户自定义。一个时序表支持创建多个多值模型映射关系。
创建多值模型映射关系时,您需要在SQL语句中指定多值模型的映射关系名称、包含的数据列的列名和类型等。具体操作,请参见创建多值模型映射关系。
表结构请参见下表。
字段名称 | 类型 | 描述 |
---|---|---|
_m_name | VARCHAR | 度量名称。 |
_data_source | VARCHAR | 数据源。 |
_tags | VARCHAR | 时间线标签,以数组表示。多个标签的格式为 ["tagKey1=tagValue1","tagKey2=tagValue2"] 。您可以使用tag_value_at函数提取某个标签的值。 |
_time | BIGINT | 数据点的时间戳,单位微秒。 |
自定义数据列名 | SQL数据类型 | 自定义的数据列,支持添加多个。
如果指定的列名或者类型与表中实际写入的列名或者类型不符,则该列读取结果为null。 |
_attributes(可选) | MEDIUMTEXT | 时间线属性,格式与标签相同。 |
_meta_update_time(可选) | BIGINT | 时间线的元数据更新时间。 |
时间线元数据映射关系
时序表创建后,系统会自动创建时间线元数据映射关系。在SQL中表名为时序表名称后拼接::meta
,用于查询时间线元数据。假如时序表名称为timeseries_table,则时序元数据表的名称为timeseries_table::meta
。
表结构请参见下表。
字段名称 | 类型 | 描述 |
---|---|---|
_m_name | VARCHAR | 度量名称。 |
_data_source | VARCHAR | 数据源。 |
_tags | VARCHAR | 时间线标签。 |
_attributes | VARCHAR | 时间线属性。 |
_meta_update_time | BIGINT | 时间线的元数据更新时间。 |
SQL语法
创建多值模型映射关系
通过CREATE TABLE语句创建多值模型映射关系。
- SQL语法
CREATE TABLE `timeseries_table::user_mapping_name` ( `_m_name` VARCHAR(1024), `_data_source` VARCHAR(1024), `_tags` VARCHAR(1024), `_time` BIGINT(20), `user_column_name1 ` data_type, ...... `user_column_namen ` data_type, PRIMARY KEY(`_m_name`,`_data_source`,`_tags`,`_time`) );
详细参数说明请参见多值模型映射关系的表结构信息。
- SQL示例
假设测量的属性同时包含了cpu、memory、disktop三种度量,此处以创建多值类型映射表
timeseries_table::muti_model
为例介绍。SQL示例如下:CREATE TABLE `timeseries_table::muti_model` ( `_m_name` VARCHAR(1024), `_data_source` VARCHAR(1024), `_tags` VARCHAR(1024), `_time` BIGINT(20), `cpu` DOUBLE(10), `memory` DOUBLE(10), `disktop` DOUBLE(10), PRIMARY KEY(`_m_name`,`_data_source`,`_tags`,`_time`) );
查询数据
通过SELECT语句执行时序数据查询。更多信息,请参见查询数据。
表格存储还提供tag_value_at扩展函数用于时间线标签(_tags)中的某个标签(tag)的值以及提取时间线属性(_attributes)中的某个属性值。
SELECT tag_value_at(_tags, "host") as host FROM timeseries_table LIMIT 1;
SQL示例
查询时间线
创建时序表后,系统会自动创建时间线元数据映射表,您可以使用时间线元数据映射表查询时间线。
此处以时序表名称为timeseries_table,时间线元数据映射表名称为timeseries_table::meta
,度量类型为basic_metric为例介绍。
- 查询时序元数据表中basic_metric度量类型下的时间线。
SELECT * FROM `timeseries_table::meta` WHERE _m_name = "basic_metric" LIMIT 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" LIMIT 100;
使用单值模型映射表查询时序数据
创建时序表后,系统会自动创建同名的单值模型映射表,您可以使用单值模型映射表查询时序数据。
此处以时序表名称为timeseries_table,单值模型映射表名称为timeseries_table
,度量类型为basic_metric为例介绍。
- 查询时序数据表中basic_metric度量类型的数据。
SELECT * FROM timeseries_table WHERE _m_name = "basic_metric" 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;
使用多值模型映射表查询时序数据
创建时序表后,通过手动创建多值模型映射关系,您可以使用多值模型映射表查询时序数据。关于创建多值模型映射关系的具体操作,请参见创建多值模型映射关系。
此处以时序表名称为timeseries_table,多值模型映射表名称为timeseries_table::muti_model
,测量的属性同时包含了cpu、memory、disktop三种度量为例介绍。
- 查询多值模型映射表中数据源标识为host_01的数据。(假设_data_source中保存了host_id)
SELECT * FROM `timeseries_table::muti_model` WHERE _data_source = "host_01" LIMIT 10;
- 查询多值模型映射表中cpu大于20.0的所有度量信息。
SELECT cpu,memory,disktop FROM `timeseries_table::muti_model` WHERE cpu > 20.0 LIMIT 10;
- 计算多值模型映射表中满足标签条件(region=hangzhou)的主机在日期为2022-01-01内的平均cpu和最大disktop。
SELECT avg(cpu) as avg_cpu,max(disktop) as max_disktop FROM `timeseries_table::muti_mode` WHERE tag_value_at(_tags,"region") = "hangzhou" AND _time > 1640966400000000 AND _time < 1641052799000000 GROUP BY _data_source;
使用方式
您可以通过以下方式使用SQL查询时序数据。查询时序数据时,请根据实际需要对应映射表进行操作。
- 使用控制台。具体操作,请参见使用控制台。
- 使用SDK。具体操作,请参见使用SDK。
- 使用JDBC
- 使用JDBC直连。具体操作,请参见JDBC连接表格存储。
- 通过Hibernate使用。具体操作,请参见通过Hibernate使用。
- 通过MyBatis使用。具体操作,请参见通过MyBatis使用。
- 使用Go语言驱动。具体操作,请参见使用Go语言驱动。
- 使用命令行工具。具体操作,请参见使用命令行工具。