查询时序数据库中的数据
上一篇,我们实际上传了50,000个数据点。本文,我们了解如何查询时序数据库中海量的数据。
查询数据的使用场景
时序数据库主要的使用场景就是管理机器运行的实时数据和其他场景中的时序数据。而查询机器运行的历史数据和实时数据,分析数据背后的趋势和规律,为企业的设备运营提供参考和决策建议,以提高企业的运营效率,则是查询时序数据的主要目的。
Pedix平台的时序数据库提供了丰富的查询功能,完全能满足工业互联网应用场景中查询数据的各项需求。时序数据库通过REST接口能够查询和聚合给定时间窗口的数据,其主要功能有,
- 从给定的时间窗口查询特定标签管理的时序数据。
- 从给定时间窗口聚合时序数据或者对时序数据进行线性插值补齐缺失的时序数据
- 对时序数据按属性、数据质量、采样点个数和时间进行分组,方便后续分析
- 筛选特定时序数据或者筛选最近时间的数据,用做实时仪表盘展示。
时序数据库的查询接口
构建请求的头部信息
时序数据库请求的头部信息都必须包含如下三个字段,
头部参数 | 类型 | 是否必选项 | 描述 |
---|---|---|---|
Authorization | 字符串类型 | 是 | 表示授权令牌,必须为拥有TMS服务实例读写权限的访问令牌 |
predix-zone-id | 字符串类型 | 是 | 表示当前时序数据库实例的ID。头部参数和参数的值都是上述时序数据库信息中的zone-http-header-name 和zone-http-header-value 字段的值 |
Content-Type | 字符串类型 | 是 | 表示发送请求内容的类型。时序数据库请求的类型都是JSON,因此,这里必须是application/json |
请求的方法
时序数据库数据查询接口同时支持GET
和POST
两种方法,给开发人员以最大的灵活度查询数据。因为,
- 如果查询语句不是特别复杂,可以将查询语句通过
GET
请求的query
参数传递给时序数据库。这样查询的结果可以被代理服务器和浏览器缓存,提高下一次查询的效率。例如,?query={"start":"2d-ago","tags":[{"name":"Temp5217-3437"}]}
。 - 如果查询语句非常复杂,用
POST
请求把查询语句放在请求的消息体中传递。这样做,使查询语句的可读性非常高。唯一的缺憾就是不能被缓存。
注:本文中所有的的查询都是用
POST
方法描述,以增加查询语句的可读性。
最常用的给定时间窗口查询
给定时间窗口查询是时序数据库中最常用的查询语句。我们必须给定时间窗口的开始时间,时序数据库支持相对时间和绝对时间两种格式。而结束时间是可选的,如果没有指定结束时间,时序数据库则默认结束时间为当前请求被接收到的时间。我们通过start
和end
字段分别定义时间窗口的开始时间和结束时间。
- 绝对时间为从Unix系统中的epoch时间开始的毫秒数。例如,
1498461645500
表示北京时间2017年6月26日下午3点20分45秒500毫秒 - 相对时间为相对于请求被时序数据库接收到的时间。例如,开始时间是3天,那么时序数据库就返回最近三天的所匹配的数据点。相对时间定义为人类便于阅读的字符串,其格式为
<数值><时间单位>-ago
。其中,数值为非0的正整数,而时间单位的定义如下表所示。
时间单位 | 说明 |
---|---|
ms | 毫秒 |
s | 秒 |
mi | 分钟 |
h | 小时 |
d | 天 |
w | 周 |
mm | 月 |
y | 年 |
给定时间窗口查询请求的具体格式如下,
POST /v1/datapoints HTTP/1.1
Host: time-series-store-predix.run.aws-jp01-pr.ice.predix.io
Authorization: bearer eyJhbGciOiJSmtaysOrwuOm14HrFP6R0802kQA
predix-zone-id: b8143253-2b36-4187-adac-e28dfecc5a3b
Content-Type: application/json
{
"start": "<开始时间>",
"end": "<结束时间>",
"tags": [
{
"name": "<标签名>"
}
]
}
如果查询成功,请求将返回200
的状态码,表示查询成功,并且返回相应的数据点。注意,每个请求返回数据点的上限为500,000个。
例如下面这个查询例子,如果我们使用上一篇文章中的trident
工具完成了数据点的上传,下面的查询语句,查询过去三年中记录在标签Temp5217-3437
下的数据点。真实的结果应该大于50,000个数据点。
POST /v1/datapoints HTTP/1.1
Host: time-series-store-predix.run.aws-jp01-pr.ice.predix.io
Authorization: bearer eyJhbGciOiJSmtaysOrwuOm14HrFP6R0802kQA
predix-zone-id: b8143253-2b36-4187-adac-e28dfecc5a3b
Content-Type: application/json
{
"start": "3y-ago",
"tags": [
{
"name": "Temp5217-3437"
}
]
}
小结
通过本节的介绍,我们了解到,
- 时序数据库有着丰富的查询语句,完全能满足开发人员日常对时序数据查询,分析的需要。
- 所有的数据查询都需要包含
start
字段定义查询的开始时间。 - 给定时间窗口查询是最常用的一种查询时序数据的方式。
当了解了上述信息,我们就能非常熟练的使用时序数据库查询语句,查询数据库中的数据,满足具体业务场景的需要。
作者:谢品,上海创新坊首席架构师,GE数字集团
专注于工业互联网,云计算,大数据,高性能分布式存储领域,对Cloud Foundry和传统应用向云端,特别是向Predix迁移有丰富的经验,曾供职于VMware,EMC,Autodesk等知名软件公司云计算部门。