小提示:快速體驗表格存儲 Tablestore CLI 工具前,請您先閱讀 《表格存儲快速上手準備》
模型簡介
時序模型是針對時間序列資料的特點進行設計的,可适用于物聯網裝置監控、裝置采集資料、機器監控資料等場景。以車聯網場景為例,一張車輛狀态表的時序模型包括了 measurement(度量類型),data_source(資料源),tags(時間線标簽),timestamp(時間戳),fields(屬性列)。資料結構模型圖如下所示

下面将以一張車輛狀态表 car_data 為例,帶您體驗表格存儲 Tablestore 時序模型的基本使用方法。
時序表操作
- 執行 create 指令建立一張時序表 car_data。
create -m timeseries -t car_data
- 執行 use --ts 指令選擇操作時序表 car_data。
use --ts -t car_data
- 資料導入。這裡提供兩種方式導入資料,二選一即可。
-
- 自定義資料,執行 putts 指令單行寫入。示例中寫入了1條時序資料。
putts --k '["car_data","car_0000010", ["brand=brand0","id=car_0000010","model=em3"]]' --field '[{"c":"duration","v":121,"isint":true},{"c":"mileage","v":6480,"isint":true},{"c":"power","v":69,"isint":true},{"c":"speed","v":24,"isint":true},{"c":"temperature","v":13,"isint":true}]' --time 1636460000000000
-
- 下載下傳 樣例資料 ,執行 import_timeseries 指令批量導入。樣例資料中共包含500萬條時序資料,可通過 import_timeseries -l 參數自定義導入行數(1000萬行内免費使用),示例中導入了5萬條時序資料。yourFilePath表示樣例資料壓縮包解壓後的路徑。
導入指令
import_timeseries -i yourFilePath -l 50000
輸出
Current speed is: 11000 rows/s. Total succeed count 11000, failed count 0.
Current speed is: 13000 rows/s. Total succeed count 24000, failed count 0.
Current speed is: 16400 rows/s. Total succeed count 40400, failed count 0.
Import finished, total count is 50000, failed 0 rows.
- 執行 getts 指令查詢一條時間線的前5個時間點。
getts --k '["car_data","car_0000006", ["brand=brand2","id=car_0000006","model=em2"]]' -l 5
+-------------+-------------+-----------------------------------------------+------------------+----------+---------+-------+-------+-------------+
| measurement | data_source | tags | timestamp | duration | mileage | power | speed | temperature |
+-------------+-------------+-----------------------------------------------+------------------+----------+---------+-------+-------+-------------+
| car_data | car_0000006 | ["brand=brand2","id=car_0000006","model=em2"] | 1636560000000000 | 190 | 1770 | 33 | 54 | 29 |
+-------------+-------------+-----------------------------------------------+------------------+----------+---------+-------+-------+-------------+
| car_data | car_0000006 | ["brand=brand2","id=car_0000006","model=em2"] | 1636560010000000 | 554 | 6670 | 42 | 24 | 12 |
+-------------+-------------+-----------------------------------------------+------------------+----------+---------+-------+-------+-------------+
| car_data | car_0000006 | ["brand=brand2","id=car_0000006","model=em2"] | 1636560020000000 | 564 | 9750 | 14 | 75 | 22 |
+-------------+-------------+-----------------------------------------------+------------------+----------+---------+-------+-------+-------------+
| car_data | car_0000006 | ["brand=brand2","id=car_0000006","model=em2"] | 1636560030000000 | 176 | 7950 | 90 | 24 | 22 |
+-------------+-------------+-----------------------------------------------+------------------+----------+---------+-------+-------+-------------+
| car_data | car_0000006 | ["brand=brand2","id=car_0000006","model=em2"] | 1636560040000000 | 441 | 6280 | 30 | 38 | 31 |
+-------------+-------------+-----------------------------------------------+------------------+----------+---------+-------+-------+-------------+
- 執行 qtm 指令查詢時間線,示例中查詢所有時間線傳回10條。
qtm -l 10
+-------------+-------------+-----------------------------------------------+------------+------------------+
| measurement | data_source | tags | attributes | update_time |
+-------------+-------------+-----------------------------------------------+------------+------------------+
| car_data | car_0000005 | ["brand=brand0","id=car_0000005","model=m0"] | null | 1637722788684102 |
+-------------+-------------+-----------------------------------------------+------------+------------------+
| car_data | car_0000009 | ["brand=brand2","id=car_0000009","model=em3"] | null | 1637722790158982 |
+-------------+-------------+-----------------------------------------------+------------+------------------+
| car_data | car_0000000 | ["brand=brand0","id=car_0000000","model=m3"] | null | 1637722787172818 |
+-------------+-------------+-----------------------------------------------+------------+------------------+
| car_data | car_0000008 | ["brand=brand0","id=car_0000008","model=m3"] | null | 1637722789832880 |
+-------------+-------------+-----------------------------------------------+------------+------------------+
| car_data | car_0000002 | ["brand=brand1","id=car_0000002","model=nm1"] | null | 1637722787915852 |
+-------------+-------------+-----------------------------------------------+------------+------------------+
| car_data | car_0000006 | ["brand=brand2","id=car_0000006","model=em2"] | null | 1637722789006974 |
+-------------+-------------+-----------------------------------------------+------------+------------------+
| car_data | car_0000001 | ["brand=brand2","id=car_0000001","model=em2"] | null | 1637722787260034 |
+-------------+-------------+-----------------------------------------------+------------+------------------+
| car_data | car_0000004 | ["brand=brand0","id=car_0000004","model=m2"] | null | 1637722788529313 |
+-------------+-------------+-----------------------------------------------+------------+------------------+
| car_data | car_0000003 | ["brand=brand1","id=car_0000003","model=nm0"] | null | 1637722788288273 |
+-------------+-------------+-----------------------------------------------+------------+------------------+
| car_data | car_0000007 | ["brand=brand2","id=car_0000007","model=em2"] | null | 1637722789315575 |
+-------------+-------------+-----------------------------------------------+------------+------------------+
SQL模式
- 執行 sql 指令進入 SQL 指令行模式,可通過 sql 語句查詢時序表。
sql
時序模型自動生成了sql映射表,可直接執行sql查詢。
時間線檢索
示例一:查詢品牌為 “brand0” 并且型号為 “m3” 的車輛,傳回前 10 條。
select
*
from
`car_data::meta`
where
_m_name = "car_data"
and tag_value_at(_tags,"brand") = "brand0"
and tag_value_at(_tags,"model") = "m3"
limit
10;
+----------+--------------+----------------------------------------------+-------------+-------------------+
| _m_name | _data_source | _tags | _attributes | _meta_update_time |
+----------+--------------+----------------------------------------------+-------------+-------------------+
| car_data | car_0000000 | ["brand=brand0","id=car_0000000","model=m3"] | null | 1637722787172818 |
+----------+--------------+----------------------------------------------+-------------+-------------------+
| car_data | car_0000008 | ["brand=brand0","id=car_0000008","model=m3"] | null | 1637722789832880 |
+----------+--------------+----------------------------------------------+-------------+-------------------+
示例二:統計品牌為 “brand2” 的車輛總數。
select
count(*)
from
`car_data::meta`
where
tag_value_at(_tags,"brand") = "brand2";
+----------+
| count(*) |
+----------+
| 4 |
+----------+
時間點查詢
示例三:查詢度量名稱為“car_data”并且資料源為“car_0000001” 車輛,傳回 “power” 度量的前 10 個資料點。
select
_time, _field_name, _long_value as value
from
`car_data`
where
_m_name = "car_data"
and _data_source = "car_0000001"
and _field_name = "power"
limit
10;
+------------------+-------------+-------+
| _time | _field_name | value |
+------------------+-------------+-------+
| 1636560000000000 | power | 68 |
+------------------+-------------+-------+
| 1636560010000000 | power | 41 |
+------------------+-------------+-------+
| 1636560020000000 | power | 69 |
+------------------+-------------+-------+
| 1636560030000000 | power | 95 |
+------------------+-------------+-------+
| 1636560040000000 | power | 27 |
+------------------+-------------+-------+
| 1636560050000000 | power | 26 |
+------------------+-------------+-------+
| 1636560060000000 | power | 98 |
+------------------+-------------+-------+
| 1636560070000000 | power | 82 |
+------------------+-------------+-------+
| 1636560080000000 | power | 24 |
+------------------+-------------+-------+
| 1636560090000000 | power | 2 |
+------------------+-------------+-------+
示例四:查詢度量名稱為“car_data”并且資料源為“car_000002” 的車輛最大行駛速度。
select
max(_long_value) as speed
from
`car_data`
where
_m_name = "car_data"
and _data_source = "car_0000002"
and _field_name = "speed";
+-------+
| speed |
+-------+
| 100 |
+-------+
示例五:對度量名稱為“car_data”并且資料源為“car_0000001”的車輛的室溫資料按照時間視窗(60s聚合一次)進行聚合,統計每分鐘最低室溫。
SELECT
_time DIV 60000000 * 60 as time_sec,
min(_long_value) as temperature
FROM
`car_data`
WHERE
_data_source = "car_0000001"
AND _field_name = "temperature"
GROUP BY
time_sec
ORDER BY
time_sec ASC
LIMIT
20;
+------------+-------------+
| time_sec | temperature |
+------------+-------------+
| 1636560000 | 11 |
+------------+-------------+
| 1636560060 | 10 |
+------------+-------------+
| 1636560120 | 11 |
+------------+-------------+
| 1636560180 | 10 |
+------------+-------------+
| 1636560240 | 11 |
+------------+-------------+
| 1636560300 | 12 |
+------------+-------------+
| 1636560360 | 14 |
+------------+-------------+
| 1636560420 | 10 |
+------------+-------------+
| 1636560480 | 15 |
+------------+-------------+
| 1636560540 | 11 |
+------------+-------------+
| 1636560600 | 11 |
+------------+-------------+
| 1636560660 | 11 |
+------------+-------------+
| 1636560720 | 12 |
+------------+-------------+
| 1636560780 | 14 |
+------------+-------------+
| 1636560840 | 18 |
+------------+-------------+
| 1636560900 | 12 |
+------------+-------------+
| 1636560960 | 11 |
+------------+-------------+
| 1636561020 | 13 |
+------------+-------------+
| 1636561080 | 14 |
+------------+-------------+
| 1636561140 | 10 |
+------------+-------------+
退出 sql 模式
exit;
退出 cli 工具
exit