本文介绍数据查询的方法和相关操作。
标准SQL查询
Lindorm时序引擎根据时序特性对SQL查询做了更多的优化,支持降采样、聚合、最新值查询的能力,提供了丰富的时序特性的函数算子和SQL计算分析能力。推荐您使用SQL查询数据,关于SQL语法请参见SQL语法参考。
- 降采样查询是在时间维度的聚合查询。更多信息,请参见降采样查询。
- 使用group by语句对多个时间线聚合计算。
- 最新值查询用于查询每条时间线最新值。更多信息,请参见最新值查询。
- 时序特性的函数算子,例如:sum、count、max、min。更多信息,请参见常用时序函数。
- 时序引擎借助calcite能力,提供了丰富的SQL计算分析能力,更多信息,请参见calcite官方手册。
示例
- 通过降采样将数据精度降低为8小时。
SELECT device_id,region,time,count(humidity) AS count_humidity FROM sensor WHERE device_id='F07A1260' sample by 8h;
- 先通过降采样降低数据精度,再按设备ID进行聚合计算。
SELECT device_id, max(avg_humidity) AS max_humidity FROM (SELECT device_id,region,time,avg(humidity) AS avg_humidity FROM sensor sample by 8h) group by device_id;
说明 sample by用于单个时间线降采样计算,group by用于多个时间线聚合计算。sample by和group by同时在查询语句中出现时,必须配合子查询来使用。
SQL查询支持的访问方式
SQL查询支持使用JDBC访问、NativeSDK访问、使用API访问SQL三种访问方式。
查询方法 | 适用场景 | 描述 | 具体操作 |
---|---|---|---|
Native SDK访问 | Java语言的应用开发场景 | 支持流式数据传输,无需管理底层连接,提供线程安全的接口调用。 | 教程:通过Java Native SDK连接并使用Lindorm时序引擎 |
JDBC访问 | Java语言的应用开发场景 | 需要自己管理连接池,或着使用Druid进行连接池管理,配合ORM框架使用。 | Java JDBC Driver开发手册 |
使用API访问SQL | 非Java语言的应用开发场景 | 时序引擎提供基于HTTP协议的API访问SQL,支持流式返回结果数据。 | HTTP API SQL接口开发手册 |
兼容时间序列数据库TSDB的查询
针对时间序列数据库TSDB迁移用户,时序引擎兼容了时间序列数据库TSDB 90%以上的能力,基本可以无缝迁移。建议您使用SQL的方式查询数据。
查询方法
查询方法 | 描述 | 相关文档 |
---|---|---|
多值查询 | 多值查询可以查询通过以下四种方式写入的数据:通过兼容时间序列数据库TSDB的接口进行的多值写入、SQL写入、Native SDK写入、行协议写入。 说明 时间序列数据库里的metric与Lindorm时序引擎里的table相对应。 | |
单值查询 | 单值查询可以查询通过兼容时间序列数据库TSDB的接口进行单值写入的数据。单值模型不再推荐使用。 说明 如果通过兼容时间序列数据库TSDB的接口进行的多值写入、SQL写入、Native SDK写入、行协议写入四种方式写入数据,在查询数据时,需要将metric指定为metric@field的格式来兼容多值数据的读取。其中,metric为table名,field为具体查询值的列名。 |
Grafana插件访问
Grafana服务是用于展示大型测量数据的开源可视化工具。Lindorm时序引擎通过Grafana服务的Alibaba Cloud Lindorm数据源插件访问时序数据。
Grafana使用Lindorm插件访问
通过Grafana的Alibaba Cloud Lindorm数据源插件,您可以使用编辑框自动生成SQL或者自定义SQL的方法查询数据。具体操作,请参见通过Grafana访问时序引擎。
Grafana使用OpenTSDB插件访问
Lindorm时序引擎使用OpenTSDB兼容的API查询数据。您可以使用Grafana的OpenTSDB数据源插件来查询数据。
说明 如果通过兼容时间序列数据库TSDB的接口进行的多值写入、SQL写入、Native SDK写入、行协议写入四种方式写入数据,在查询数据时,需要将metric指定为metric@field的格式来兼容多值数据的读取。其中,metric为table名,field为具体查询值的列名。
提升查询性能的方法
方法 | 适用场景 | 描述 | 区别 |
---|---|---|---|
使用预聚合提升查询性能 | 大量时间线实时聚合查询 | 预聚合通过使用Lindorm时序引擎提供的数据的持续查询功能,提前将需要查询的结果进行计算后转存到结果表,查询时指定查询结果表,即可快速查询结果。 | 预聚合是一种对数据预计算的方法,预聚合之后的结果表和原表属于不同的表,查询时需要指定不同的数据表。 |
使用预降采样查询提升查询性能 | 大范围的时间查询 | 预降采样通过存储引擎将写入的数据降低精度后单独存储,查询时按查询条件中指定的降采样精度自动查询最接近预降采样精度的数据,然后再对查询的数据进行聚合计算,减少实时查询的计算数据量,降低访问延迟。 | 预降采样是一种降低数据精度的方法,预降采样后的数据和原始数据存储在同一张表中,查询时无需查询不同的数据表。 |