查詢時序數據庫中的數據
上一篇,我們實際上傳了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等知名軟件公司雲計算部門。