登陆

TSQL:让监控剖析更简略更高效

admin 2019-08-12 266人围观 ,发现0个评论

1. 前语

阿里时序时空数据库TSDB最新推出TSQL,支撑规范SQL的语法和函数。用户运用了解的SQL,不仅仅查询更简略易用,用户还能够运用SQL强壮的功用,完结愈加杂乱的核算剖析。

2. 为什么需求用SQL做时序查询?

2.1 SQL具有广泛用户根底

SQL作为一个诞生于上世纪70年代的编程言语现已存在几十年了。这是一个相对而言较“陈旧”的编程言语,但又是一个有着广泛用户根底的言语。

在盯梢首要编程言语的盛行程度的TIOBE index[1]中,SQL在2019年4月份的排名是第8。而假如把排名列在11-20之间的SQL的两个“兄弟”PL/SQL, Transact-SQL也兼并进来的话,SQL的盛行度应该更高。

女生宿舍2

依据stackoverflow网站的查询 [2],SQL在最盛行的编程言语榜上排在第4位。

不管TIOBE index仍是stackoverflow的编程言语排行榜,都从一个旁边面反映了SQL的广泛用户根底。作为一个查询言语,SQL是用户和数据库体系交互的(直接或直接)首要方法。支撑一个具有广泛用户根底的查询言语,关于推行数据库体系来说,是十分重要的。

2.2 用户学习本钱

最近几年呈现的几个首要面向时序场景的数据库,除了TimescaleDB是在Postgres根底上所以支撑PG生态包含SQL言语支撑,其他几个比方InfluxDB, OpenTSDB, Prometheus都有各自不同的查询言语和接口:InfluxDB有InfluxQL,OpenTSDB有自己的Restful API, 而Prometheus有PromQL。每一个体系都能够宣称自己的言语是绝无仅有的,更合适时序查询这样的场景;但不可否认的事实是用户需求去花时刻去学习一种新的言语,而且假如这个言语为了功用完善,还在不断演进中,这样的学习本钱对用户来说,特别显得高了。

举个比方,InfluxDB的InfluxQL并不支撑Join,Subqueries, 以及SQL中很常见的UDF等功用,这意味着用户并不能在不同数据之间进行相关剖析核算,也不能在体系函数根底上进行扩展开发。InfluxDB设计者在听到社区的定见后,做了一个很有“构思”的作业:在新版本里支撑Join,UDF等功用,但并不是让InfluxQL变得愈加接近于SQL,而是在一个全新的Flux(一个新的functional ing language)里支撑 [3]。用户想要做InfluxQL不能做的作业,那就再来学习一个新言语吧。

一个很有意思的作业,10多年前开端呈现的NoSQL体系,比方MapReduce/Hadoop, BigTable,Casandra,HBase等,一开端也是以各自不同的查询言语呈现的。在阅历了多年用户推行之后,NoSQL开端拥抱SQL,变成了NotOnlySQL或许NewSQL。时序数据库这样一个新式的数据库范畴,也有或许重复这样的前史。原因很简略,用户学习一个新言语的本钱越高,越会阻止一个体系被推行到群众承受的程度。

2.3 BI东西生态支撑

时序数据库供给SQL的查询支撑,一个很重要的原因是将时序数据库的运用场景扩展到商业剖析(BI/BusinessTSQL:让监控剖析更简略更高效 Analysis),商业决议方案这样高附加值范畴。

当时几个首要的时序数据库,包含InfluxDB, OpenTSDB和Prometheus,首要侧重于根底功用监控这样的场景,运用Grafana这样的可视化东西,完结监控报警这一类基本功用。另一方面,监控报警还没有充分运用发掘时序数据的商业价值。进一步的功用,需求充分运用现有SQL生态体系中的商业剖析东西,比方Tableau, Qlik,Oracle BI, IBM Cognos等。这些BI东西,往往是以SQL的方法同后端数据库交互。从这个视点来说,时序数据库的SQL支撑关于对接BI生态体系中的各种东西,尤为重要。

2.4 TSQL面向的用户群

在阿里时序数据库TSDB支撑的兼容OpenTSDB查询协议之上推出的TSQL查询引擎,首要是面向以下两类用户:

  • 时序数据库TSDB的新运用开发者 :这类用户往往曾经运用联系数据库,由于联系数据库自身处理时序数据的功用和可扩展性的约束,而转而运用TSDB。这些新运用开发者,期望TSDB在供给比联系数据库更好的时序功用和扩展性的一起,能够用他们曾经了解的查询言语进行运用开发,而不是去学习一个新的查询言语。
  • 数据剖析师:这类用户并不开发运用,他们的作业是运用已有的商业剖析东西,对时序数据进行进一步的查询剖析。他们自身并不直接运用SQL, 但所运用的东西以SQL作为和时序数据库TSDB交互的查询言语。

3. 现有时序数据库体系SQL查询才能比较

这儿简略比照时序数据库体系中供给SQL查询,或SQL-like查询才能的InfluxDB, TimescaleDB, 阿里云TSDB。

4. TSQL体系架构

上图是TSQL的整体架构以及和TSDB引擎和存储之间的和谐作业联系。简略来讲,TSQL是一个典型的MPP的SQL剖析引擎,经过Connector同TSDB引擎和存储进行数据交换。Connector支撑MetaAPI和DataAPI。

TSQL是在两个Apache开源项目根底上演进开发的:

  • Apache Calcite作为SQL的解析器和方案生成和优化器。
  • Apache Drill供给分布式的SQL履行层。

Apache Calcite作为一个扩展性好,支撑规范SQL语法和语义的SQL方案生成器,现已被许多数据处理相关的开源项目运用[6],包含大数据ETL的Apache Hive, HBase上的SQL解决方案Apache Phoenix, 也有流数据处理结构Apache Fink (阿里的Blink)和Apache Beam等。 TSQL运用Calcite作为SQL方案生成器,能够在兼容规范SQL方面,充分运用开源社区已有的效果。

4.1 时序数据Schema办理

InfluxDB, OpenTSDB和Prometheus都选用的是一种Schema-on-write的方法,也便是用户并不需求清晰界说metric的schema, 而是将schema的信息躲藏在数据中,在数据写入的时分,一起办理着schema。这样做的长处是更高的灵活性:

  • 在写入数据的时分,用户不需求事前有必要用Create Table DDL来创立table;
  • 在时序数据tag set呈现改变的时分,用户不需求事前用Alter Table来修正table的schema。
  • TimeScaleDB从PG上扩展而来,所所以选用的是严厉的Schema的办理方法。在运用灵活性方面,不如上面其他3个时序数据库。

Calcite作为一个SQL方案生成器,很合适时序数据库这样的比较松懈的Schema办理方法。 Calcite的Schema Adapter,能够支撑

TSQL在Calcite的Schema Adapter根底上,运用TSDB引擎中新添加的MetaAPI,来完结SQL方案解析和生成。这免去了用户有必要事前在一个集中式的catalog中预TSQL:让监控剖析更简略更高效先界说Table DDL等繁琐作业,给用户带来了许多的灵活性。

4.2 时序数据查询履行

TSQL的履行层,运用了Apache Drill的runtime execution。Drill的runtime execution,具有以下特色

  • 运用off-heap内存作为核算内存,削减Java heap内存GC所带来的推迟问题
  • 依据Columnar格局的ValueVector (Apache Arrow的前身),提高查询履行功率
  • 动态代码生成和编译
  • UDF支撑

5. TSQL时序查询功用

咱们以一个根底功用监控场景来举例说明TSQL能完结的时序查询功用。运用一个时序数据库业界揭露的时序功用Benchmark[5] 生成的模仿数据,依照DevOps这样的场景,产生了cpu相关的10不同的metric。每个metric对应了机房(datecenter),主机(hostname),rack等标签下所收集的服务器cpu相关的目标数据。

5.1 元数据查询

能够用下面的方法查询TSDB中一切的metric/table

假如咱们期望列出一切以cpu为前缀的metric/table,能够在上面的查询根底之上添加顺便过滤条件.

下图给出了指令的部分输出:

在取得metric/table 名字后,咱们能够进一步用TSQL:让监控剖析更简略更高效SQL中的'DESCRIBE'指令来查询这个metric/table的schema信息

下图显现了上面的'describe'指令的部分成果:

5.2 时序数据简略查询

用下面的SQL查询能够取得指定时刻段内的'cpu.usage_user'的目标值,时刻戳,以及对应的标签值。

这儿, 将被转换成 metric/table下一切的列,包含目标值,时刻戳,一切的标签列。能够以详细的列名的一个列表来替代。

作为比照,假如把上面的查询转化成OpenTSDB协议来查询,相对应的查询如下:

能够在时刻戳的过滤条件根底上,添加目标列上的条件。下面的查询,列出指定时刻段内,3台主机上的目标值,而且运用limit, 把查询成果约束在100行。

能够在查询中运用规范SQL中丰厚的数值核算函数,字符串函数或时刻戳函数。下面的SQL,咱们别离运用了数值运算函数sqrt, 时刻戳函数extract 和字符串lower。

5.3 时序降精度,聚合运算

假如咱们要核算两小时之内,每台主机上每5分钟的目标cpu.usage_user的最大值,最小值,以及数据采样点的个数。这样的查询,代表了在时刻维度上的降精度,而且在标签hostname上进行的聚合运算。用TSQL来表明这样的查询:

假如用OpenTSDB的协议来查询:

能够看到,相比较本来Restful API的查询,TSQL能够用更简练的方法来表明相同的查询语义;而且,假如用户本来就了解SQL的运用方法,节约用户去学习Restfule API里JSON各个字段的含义。从下降用户学习本钱,添加易用性这个视点,TSQL带来了较显着的价值。

TSQL不仅仅带来查询简练,用户易用的长处,而且,更重要的是,用TSQL能够表达Restful API里不能直接表达的查询语义。在TSDB引进TSQL之前,假如用户需求进行这样的查询核算,则用户有必要经过自己的运用程序,在Restful API取得数据后,再进行后核算,来满意事务需求。在自己的运用程序中进行后核算,往往需求支付很大的运用开发价值。

5.4 聚合后核算,过滤,排序

下面的比方,核算2个小时内,3台机器上每5分钟内,cpu.usage_user目标值的最大值和最小值的差异超越10.0的时段和hostname, 并依照差异值从大到小排序:

在上面的比方中个,在取得最大值和最小值后,进一步核算两者的差异值,并依据差异值进行过滤和排序。这样的聚合后核算处理,无法用OpenTSDB的查询协议表明;用户假如要表达这样的语义,就有必要在运用程序中核算。

5.5 恣意杂乱的条件表达式

TSDB的Restful API关于只供给有限的几种filter, 而并不支撑恣意filter经过AND/OR的组合。比方下面的比方,是一个TSQL事务中运用的查询。其间WHERE条件部分是并不能用Restful API来表明的,由于Restful下的filters是只需AND, 而OR只需在相同tag上经过'value1|value2|vale3'这样的方式来表达。

支撑恣意组合的AND/OR的条件表达式,关于运用开发是很有含义的。在集团根底监控事务(raptor-pro)中,一个杰出的亮点是“定制化监控报警”:答应事务方的用户来定制查询条件,而且查询条件可所以恣意的AND/OR组合。TSQL为"定制化监控报警"的功用完结,供给了有力的技能保证。

5.6 多个metric之间join

这个查询,把cpu.usage_system和cpu.usage_idle在hostname和timestamp上做等值join, 然后核算每5分钟两个度量值之和的sum。

上面的查询,假如咱们选用TSDB的多值模型,把cpu.usage_system和cpu.usage_idle处理成一个metric的不同的field, 则不需求join就能够完结。但假如咱们需求在分组聚合后的成果上再做join, 多值模型也无法解决问题。

5.7 分组聚合后join核算

下面的查询,别离对cpu.usage_system和cpu.usage_idel依照5分钟核算聚合函数sum(), 再经过join, 对齐,核算相对应的份额。而且,每个子查询的Where条件,除了包含在tag上和时刻戳上的条件,还包含值上的过滤条件。

相似这样的查询,是无法直接在TSDB的RestAPI来完结的;用户只能在自己的运用程序中完结,添加了运用开发本钱。

5.8 UDF扩展功用

运用UDF来扩展功用,关于时序数据库这样聚集特定范畴的数据库来说,是十分必要的,由于往往SQL规范中界说的函数,并不能彻底满意需求。TSQL有一个完善的UDF的体系,用户只需依照约好的接口,用Java语义就能够完结扩展。比方,咱们在TSQL中引进的把时刻戳分割成不重合的窗口的函数tumble,其完结便是由下面不到15行代码完结。

用户能够用Java完结不同的scalar UDF或许aggregate UDF, 并把编译后的jar加入到TSQL的体系类库目录,就能够自行扩展TSQL的查询核算功用了。

6 TSQL可视化查询

阿里云TSDB现已供给了TSQL可视化交互式开发功用,经过web页面能够便利的进行TSQL的测验和开发,如下图Demo所示,。点击了解阿里云时序数据库(https://www.aliyun.com/product/hitsdb?spm=5176.12825654.h2v3icoap.60.e9392c4axutg9k)

---------------------------------

本文作者:凤豪

原文链接:https://yq.aliyun.com/articles/711655?utm_content=g_1000071449

本文为云栖社区原创内容,未经答应不得转载。

请关注微信公众号
微信二维码
不容错过
Powered By Z-BlogPHP