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