建立時序表並建立SQL映射關係後,您可以通過控制台、SDK等不同方式使用SQL查詢時序資料。
時序表的SQL映射關係
根據每個時間軸每個時刻對應一個值或者多個值,時序模型分為“單值模型”和“多值模型”。對於同一個時序表,您可以建立三種SQL映射關係用於資料查詢,詳細說明請參見下表。
映射關聯類型 | 描述 | 建立方式 | 在SQL中的表名 |
以單值模型查詢時序資料。 | 建立時序表後,系統自動建立SQL映射關係。 | 與時序表名相同 | |
以多值模型查詢時序資料。 | 建立時序表後,由使用者手動建立SQL映射關係。 | 在時序表名後拼接 | |
查詢時間軸中繼資料。 | 建立時序表後,系統自動建立SQL映射關係。 | 在時序表名稱後拼接 |
單值模型映射關係
時序表建立後,系統會自動建立單值模型映射關係。在SQL中表名與時序表名稱相同,用於以單值模型查詢時序資料。
表結構請參見下表。
欄位名稱 | 類型 | 描述 |
_m_name | VARCHAR | 度量名稱。 |
_data_source | VARCHAR | 資料來源。 |
_tags | VARCHAR | 時間軸標籤,以數組表示。多個標籤的格式為 ["tagKey1=tagValue1","tagKey2=tagValue2"] 。 您可以使用tag_value_at函數提取某個標籤的值。 |
_time | BIGINT | 資料點的時間戳記,單位微秒。 |
_field_name | VARCHAR | 資料列名。 |
_long_value | BIGINT | 整型的資料值。如果該資料列為非整型,則值為NULL。 |
_double_value | DOUBLE | 浮點數類型的資料值。如果該資料列為非浮點數,則值為NULL。 |
_bool_value | BOOL | 布爾類型的資料值。如果該資料列為非布爾值,則值為NULL。 |
_string_value | VARCHAR | 字串類型的資料值。如果該資料列為非字串,則值為NULL。 |
_binary_value | MEDIUMBLOB | 二進位類型的資料值。如果該資料列為非二進位,則值為NULL。 |
_attributes | VARCHAR | 時間軸屬性,格式與標籤相同。 |
_meta_update_time | BIGINT | 時間軸的中繼資料更新時間。 當使用者更新時間軸屬性時,系統會自動更新時間軸中繼資料更新時間。此外,如果該時間軸的資料持續寫入,系統也會定時更新該時間,可用於判斷一條時間軸是否活躍。 |
多值模型映射關係
當以多值模型查詢時序資料時,您需要執行CREATE TABLE語句來建立多值模型映射關係。在SQL中表名為時序表名稱後拼接::尾碼
,其中尾碼
由使用者自訂。一個時序表支援建立多個多值模型映射關係。
建立多值模型映射關係時,您需要在SQL語句中指定多值模型的映射關係名稱、包含的資料列的列名和類型等。具體操作,請參見建立多值模型映射關係。
表結構請參見下表。
如果要通過多值模型映射關係讀取時間軸中繼資料的屬性列(_attributes)或者中繼資料最新動向時間列(_meta_update_time),您需要將這兩列添加到多值模型映射關係中,系統會自動填滿這兩個中繼資料列的內容。
欄位名稱 | 類型 | 描述 |
_m_name | VARCHAR | 度量名稱。 |
_data_source | VARCHAR | 資料來源。 |
_tags | VARCHAR | 時間軸標籤,以數組表示。多個標籤的格式為 ["tagKey1=tagValue1","tagKey2=tagValue2"] 。您可以使用tag_value_at函數提取某個標籤的值。 |
_time | BIGINT | 資料點的時間戳記,單位微秒。 |
自訂資料列名 | 自訂的資料列,支援添加多個。 如果指定的列名或者類型與表中實際寫入的列名或者類型不符,則該列讀取結果為null。 | |
_attributes(可選) | MEDIUMTEXT | 時間軸屬性,格式與標籤相同。 |
_meta_update_time(可選) | BIGINT | 時間軸的中繼資料更新時間。 當使用者更新時間軸屬性時,系統會自動更新時間軸中繼資料更新時間。此外,如果該時間軸的資料持續寫入,系統也會定時更新該時間,可用於判斷一條時間軸是否活躍。 |
時間軸中繼資料映射關係
時序表建立後,系統會自動建立時間軸中繼資料映射關係。在SQL中表名為時序表名稱後拼接::meta
,用於查詢時間軸中繼資料。假如時序表名稱為timeseries_table,則時序中繼資料表的名稱為timeseries_table::meta
。
表結構請參見下表。
欄位名稱 | 類型 | 描述 |
_m_name | VARCHAR | 度量名稱。 |
_data_source | VARCHAR | 資料來源。 |
_tags | VARCHAR | 時間軸標籤。 |
_attributes | VARCHAR | 時間軸屬性。 |
_meta_update_time | BIGINT | 時間軸的中繼資料更新時間。 當使用者更新時間軸屬性時,系統會自動更新時間軸中繼資料更新時間。此外,如果該時間軸的資料持續寫入,系統也會定時更新該時間,可用於判斷一條時間軸是否活躍。 |
SQL文法
建立多值模型映射關係
通過CREATE TABLE語句建立多值模型映射關係。
SQL文法
CREATE TABLE `timeseries_table::user_mapping_name` ( `_m_name` VARCHAR(1024), `_data_source` VARCHAR(1024), `_tags` VARCHAR(1024), `_time` BIGINT(20), `user_column_name1` data_type, ...... `user_column_namen` data_type, PRIMARY KEY(`_m_name`,`_data_source`,`_tags`,`_time`) );
詳細參數說明請參見多值模型映射關係的表結構資訊。
SQL樣本
假設測量的屬性同時包含了cpu、memory、disktop三種度量,此處以建立多實值型別映射表
timeseries_table::muti_model
為例介紹。SQL樣本如下:CREATE TABLE `timeseries_table::muti_model` ( `_m_name` VARCHAR(1024), `_data_source` VARCHAR(1024), `_tags` VARCHAR(1024), `_time` BIGINT(20), `cpu` DOUBLE(10), `memory` DOUBLE(10), `disktop` DOUBLE(10), PRIMARY KEY(`_m_name`,`_data_source`,`_tags`,`_time`) );
查詢資料
通過SELECT語句執行時序資料查詢。更多資訊,請參見查詢資料。
Table Store還提供tag_value_at擴充函數用於時間軸標籤(_tags)中的某個標籤(tag)的值以及提取時間軸屬性(_attributes)中的某個屬性值。
假設_tag為["host=abc","region=hangzhou"],則您可以使用tag_value_at(_tags, "host")提取host標籤的值,即"abc"。SQL語句樣本如下:
SELECT tag_value_at(_tags, "host") as host FROM timeseries_table LIMIT 1;
SQL樣本
查詢時間軸
建立時序表後,系統會自動建立時間軸中繼資料映射表,您可以使用時間線中繼資料映射表查詢時間軸。
此處以時序表名稱為timeseries_table,時間軸中繼資料映射表名稱為timeseries_table::meta
,度量類型為basic_metric為例介紹。
查詢時序中繼資料表中basic_metric度量類型下的時間軸。
SELECT * FROM `timeseries_table::meta` WHERE _m_name = "basic_metric" LIMIT 100;
查詢時序中繼資料表中滿足多個標籤條件(host=host001, region=hangzhou)的時間軸。
SELECT * FROM `timeseries_table::meta` WHERE _m_name = "basic_metric" AND tag_value_at(_tags, "host") = "host001" AND tag_value_at(_tags, "region") = "hangzhou" LIMIT 100;
查詢時序中繼資料表中滿足多個標籤條件(host=host001, region=hangzhou)和屬性條件(status=online),且在某個時刻之後仍活躍的時間軸。
SELECT * FROM `timeseries_table::meta` WHERE _m_name = "basic_metric" AND tag_value_at(_tags, "host") = "host001" AND tag_value_at(_tags, "region") = "hangzhou" AND tag_value_at(_attributes, "status") = "online" AND _meta_update_time > (UNIX_TIMESTAMP() - 900) * 1000000 LIMIT 100;
使用單值模型映射表查詢時序資料
建立時序表後,系統會自動建立同名的單值模型映射表,您可以使用單值模型映射表查詢時序資料。
此處以時序表名稱為timeseries_table,單值模型映射表名稱為timeseries_table
,度量類型為basic_metric為例介紹。
查詢時序資料表中basic_metric度量類型的資料。
SELECT * FROM timeseries_table WHERE _m_name = "basic_metric" LIMIT 10;
假設資料來源為device001,查詢時序資料表中basic_metric度量類型下device001資料來源在某個時刻之後的資料。
SELECT * FROM timeseries_table WHERE _m_name = "basic_metric" AND _data_source = "device001" AND _time > (UNIX_TIMESTAMP() - 900) * 1000000 LIMIT 10;
查詢時序資料表中滿足單個標籤條件(host=host001)的時間軸的資料。
SELECT * FROM timeseries_table WHERE _m_name = "basic_metric" AND tag_value_at(_tags, "host") = "host001" AND _time > (UNIX_TIMESTAMP() - 900) * 1000000 LIMIT 10;
查詢時序資料表中滿足多個標籤條件(host=host001, region=hangzhou)的時間軸的資料。
SELECT * FROM timeseries_table WHERE _m_name = "basic_metric" AND tag_value_at(_tags, "host") = "host001" AND tag_value_at(_tags, "region") = "hangzhou" AND _time > (UNIX_TIMESTAMP() - 900) * 1000000 LIMIT 10;
對時序資料表中某條時間軸(host=host001)的cpu_usr資料按照時間視窗(600 s彙總一次)進行彙總(avg、max)查詢。
SELECT tag_value_at(_tags, "host") as host,_time DIV 600000000 * 600 as time_sec,avg(_double_value) as cpu_avg,max(_double_value) as cpu_max FROM timeseries_table WHERE _m_name = "basic_metric" AND _time > (UNIX_TIMESTAMP() - 21600) * 1000000 AND tag_value_at(_tags, "host") = "host001" AND _field_name = "cpu_summary_usr" GROUP BY host,time_sec ORDER BY time_sec LIMIT 100;
使用多值模型映射表查詢時序資料
建立時序表後,通過手動建立多值模型映射關係,您可以使用多值模型映射表查詢時序資料。關於建立多值模型映射關係的具體操作,請參見建立多值模型映射關係。
此處以時序表名稱為timeseries_table,多值模型映射表名稱為timeseries_table::muti_model
,測量的屬性同時包含了cpu、memory、disktop三種度量為例介紹。
查詢多值模型映射表中資料來源標識為host_01的資料。(假設_data_source中儲存了host_id)
SELECT * FROM `timeseries_table::muti_model` WHERE _data_source = "host_01" LIMIT 10;
查詢多值模型映射表中cpu大於20.0的所有度量資訊。
SELECT cpu,memory,disktop FROM `timeseries_table::muti_model` WHERE cpu > 20.0 LIMIT 10;
計算多值模型映射表中滿足標籤條件(region=hangzhou)的主機在日期為2022-01-01內的平均cpu和最大disktop。
SELECT avg(cpu) as avg_cpu,max(disktop) as max_disktop FROM `timeseries_table::muti_mode` WHERE tag_value_at(_tags,"region") = "hangzhou" AND _time > 1640966400000000 AND _time < 1641052799000000 GROUP BY _data_source;
使用方式
您可以通過以下方式使用SQL查詢時序資料。查詢時序資料時,請根據實際需要對應映射表進行操作。
使用控制台。具體操作,請參見通過控制台使用SQL查詢。
使用SDK。具體操作,請參見通過SDK使用SQL查詢。
使用JDBC
使用JDBC直連。具體操作,請參見JDBC串連Table Store。
通過Hibernate使用。具體操作,請參見通過Hibernate使用SQL查詢資料。
通過MyBatis使用。具體操作,請參見通過MyBatis使用SQL查詢資料。
使用Go語言驅動。具體操作,請參見通過Go語言驅動使用SQL查詢資料。
使用命令列工具。具體操作,請參見使用命令列工具。