查询时序数据库中的数据

查询时序数据库中的数据

上一篇,我们实际上传了50,000个数据点。本文,我们了解如何查询时序数据库中海量的数据。

查询数据的使用场景

时序数据库主要的使用场景就是管理机器运行的实时数据和其他场景中的时序数据。而查询机器运行的历史数据和实时数据,分析数据背后的趋势和规律,为企业的设备运营提供参考和决策建议,以提高企业的运营效率,则是查询时序数据的主要目的。

Pedix平台的时序数据库提供了丰富的查询功能,完全能满足工业互联网应用场景中查询数据的各项需求。时序数据库通过REST接口能够查询和聚合给定时间窗口的数据,其主要功能有,

  1. 从给定的时间窗口查询特定标签管理的时序数据。
  2. 从给定时间窗口聚合时序数据或者对时序数据进行线性插值补齐缺失的时序数据
  3. 对时序数据按属性、数据质量、采样点个数和时间进行分组,方便后续分析
  4. 筛选特定时序数据或者筛选最近时间的数据,用做实时仪表盘展示。

时序数据库的查询接口

构建请求的头部信息

时序数据库请求的头部信息都必须包含如下三个字段,

头部参数 类型 是否必选项 描述
Authorization 字符串类型 表示授权令牌,必须为拥有TMS服务实例读写权限的访问令牌
predix-zone-id 字符串类型 表示当前时序数据库实例的ID。头部参数和参数的值都是上述时序数据库信息中的zone-http-header-namezone-http-header-value字段的值
Content-Type 字符串类型 表示发送请求内容的类型。时序数据库请求的类型都是JSON,因此,这里必须是application/json

请求的方法

时序数据库数据查询接口同时支持GETPOST两种方法,给开发人员以最大的灵活度查询数据。因为,

  1. 如果查询语句不是特别复杂,可以将查询语句通过GET请求的query参数传递给时序数据库。这样查询的结果可以被代理服务器和浏览器缓存,提高下一次查询的效率。例如,?query={"start":"2d-ago","tags":[{"name":"Temp5217-3437"}]}
  2. 如果查询语句非常复杂,用POST请求把查询语句放在请求的消息体中传递。这样做,使查询语句的可读性非常高。唯一的缺憾就是不能被缓存。

注:本文中所有的的查询都是用POST方法描述,以增加查询语句的可读性。

最常用的给定时间窗口查询

给定时间窗口查询是时序数据库中最常用的查询语句。我们必须给定时间窗口的开始时间,时序数据库支持相对时间和绝对时间两种格式。而结束时间是可选的,如果没有指定结束时间,时序数据库则默认结束时间为当前请求被接收到的时间。我们通过startend字段分别定义时间窗口的开始时间和结束时间。

  • 绝对时间为从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"
        }
    ]
}

小结

通过本节的介绍,我们了解到,

  1. 时序数据库有着丰富的查询语句,完全能满足开发人员日常对时序数据查询,分析的需要。
  2. 所有的数据查询都需要包含start字段定义查询的开始时间。
  3. 给定时间窗口查询是最常用的一种查询时序数据的方式。

当了解了上述信息,我们就能非常熟练的使用时序数据库查询语句,查询数据库中的数据,满足具体业务场景的需要。

作者:谢品,上海创新坊首席架构师,GE数字集团

专注于工业互联网,云计算,大数据,高性能分布式存储领域,对Cloud Foundry和传统应用向云端,特别是向Predix迁移有丰富的经验,曾供职于VMware,EMC,Autodesk等知名软件公司云计算部门。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章