使用SQL查詢時(shí)序數(shù)據(jù)
創(chuàng)建時(shí)序表并建立SQL映射關(guān)系后,您可以通過(guò)控制臺(tái)、SDK等不同方式使用SQL查詢時(shí)序數(shù)據(jù)。
時(shí)序表的SQL映射關(guān)系
根據(jù)每個(gè)時(shí)間線每個(gè)時(shí)刻對(duì)應(yīng)一個(gè)值或者多個(gè)值,時(shí)序模型分為“單值模型”和“多值模型”。對(duì)于同一個(gè)時(shí)序表,您可以建立三種SQL映射關(guān)系用于數(shù)據(jù)查詢,詳細(xì)說(shuō)明請(qǐng)參見(jiàn)下表。
映射關(guān)系類型 | 描述 | 創(chuàng)建方式 | 在SQL中的表名 |
以單值模型查詢時(shí)序數(shù)據(jù)。 | 創(chuàng)建時(shí)序表后,系統(tǒng)自動(dòng)建立SQL映射關(guān)系。 | 與時(shí)序表名相同 | |
以多值模型查詢時(shí)序數(shù)據(jù)。 | 創(chuàng)建時(shí)序表后,由用戶手動(dòng)建立SQL映射關(guān)系。 | 在時(shí)序表名后拼接 | |
查詢時(shí)間線元數(shù)據(jù)。 | 創(chuàng)建時(shí)序表后,系統(tǒng)自動(dòng)建立SQL映射關(guān)系。 | 在時(shí)序表名稱后拼接 |
單值模型映射關(guān)系
時(shí)序表創(chuàng)建后,系統(tǒng)會(huì)自動(dòng)創(chuàng)建單值模型映射關(guān)系。在SQL中表名與時(shí)序表名稱相同,用于以單值模型查詢時(shí)序數(shù)據(jù)。
表結(jié)構(gòu)請(qǐng)參見(jiàn)下表。
字段名稱 | 類型 | 描述 |
_m_name | VARCHAR | 度量名稱。 |
_data_source | VARCHAR | 數(shù)據(jù)源。 |
_tags | VARCHAR | 時(shí)間線標(biāo)簽,以數(shù)組表示。多個(gè)標(biāo)簽的格式為 ["tagKey1=tagValue1","tagKey2=tagValue2"] 。 您可以使用tag_value_at函數(shù)提取某個(gè)標(biāo)簽的值。 |
_time | BIGINT | 數(shù)據(jù)點(diǎn)的時(shí)間戳,單位微秒。 |
_field_name | VARCHAR | 數(shù)據(jù)列名。 |
_long_value | BIGINT | 整型的數(shù)據(jù)值。如果該數(shù)據(jù)列為非整型,則值為NULL。 |
_double_value | DOUBLE | 浮點(diǎn)數(shù)類型的數(shù)據(jù)值。如果該數(shù)據(jù)列為非浮點(diǎn)數(shù),則值為NULL。 |
_bool_value | BOOL | 布爾類型的數(shù)據(jù)值。如果該數(shù)據(jù)列為非布爾值,則值為NULL。 |
_string_value | VARCHAR | 字符串類型的數(shù)據(jù)值。如果該數(shù)據(jù)列為非字符串,則值為NULL。 |
_binary_value | MEDIUMBLOB | 二進(jìn)制類型的數(shù)據(jù)值。如果該數(shù)據(jù)列為非二進(jìn)制,則值為NULL。 |
_attributes | VARCHAR | 時(shí)間線屬性,格式與標(biāo)簽相同。 |
_meta_update_time | BIGINT | 時(shí)間線的元數(shù)據(jù)更新時(shí)間。 當(dāng)用戶更新時(shí)間線屬性時(shí),系統(tǒng)會(huì)自動(dòng)更新時(shí)間線元數(shù)據(jù)更新時(shí)間。此外,如果該時(shí)間線的數(shù)據(jù)持續(xù)寫(xiě)入,系統(tǒng)也會(huì)定時(shí)更新該時(shí)間,可用于判斷一條時(shí)間線是否活躍。 |
多值模型映射關(guān)系
當(dāng)以多值模型查詢時(shí)序數(shù)據(jù)時(shí),您需要執(zhí)行CREATE TABLE語(yǔ)句來(lái)創(chuàng)建多值模型映射關(guān)系。在SQL中表名為時(shí)序表名稱后拼接::后綴
,其中后綴
由用戶自定義。一個(gè)時(shí)序表支持創(chuàng)建多個(gè)多值模型映射關(guān)系。
創(chuàng)建多值模型映射關(guān)系時(shí),您需要在SQL語(yǔ)句中指定多值模型的映射關(guān)系名稱、包含的數(shù)據(jù)列的列名和類型等。具體操作,請(qǐng)參見(jiàn)創(chuàng)建多值模型映射關(guān)系。
表結(jié)構(gòu)請(qǐng)參見(jiàn)下表。
如果要通過(guò)多值模型映射關(guān)系讀取時(shí)間線元數(shù)據(jù)的屬性列(_attributes)或者元數(shù)據(jù)最近更新時(shí)間列(_meta_update_time),您需要將這兩列添加到多值模型映射關(guān)系中,系統(tǒng)會(huì)自動(dòng)填充這兩個(gè)元數(shù)據(jù)列的內(nèi)容。
字段名稱 | 類型 | 描述 |
_m_name | VARCHAR | 度量名稱。 |
_data_source | VARCHAR | 數(shù)據(jù)源。 |
_tags | VARCHAR | 時(shí)間線標(biāo)簽,以數(shù)組表示。多個(gè)標(biāo)簽的格式為 ["tagKey1=tagValue1","tagKey2=tagValue2"] 。您可以使用tag_value_at函數(shù)提取某個(gè)標(biāo)簽的值。 |
_time | BIGINT | 數(shù)據(jù)點(diǎn)的時(shí)間戳,單位微秒。 |
自定義數(shù)據(jù)列名 | 自定義的數(shù)據(jù)列,支持添加多個(gè)。 如果指定的列名或者類型與表中實(shí)際寫(xiě)入的列名或者類型不符,則該列讀取結(jié)果為null。 | |
_attributes(可選) | MEDIUMTEXT | 時(shí)間線屬性,格式與標(biāo)簽相同。 |
_meta_update_time(可選) | BIGINT | 時(shí)間線的元數(shù)據(jù)更新時(shí)間。 當(dāng)用戶更新時(shí)間線屬性時(shí),系統(tǒng)會(huì)自動(dòng)更新時(shí)間線元數(shù)據(jù)更新時(shí)間。此外,如果該時(shí)間線的數(shù)據(jù)持續(xù)寫(xiě)入,系統(tǒng)也會(huì)定時(shí)更新該時(shí)間,可用于判斷一條時(shí)間線是否活躍。 |
時(shí)間線元數(shù)據(jù)映射關(guān)系
時(shí)序表創(chuàng)建后,系統(tǒng)會(huì)自動(dòng)創(chuàng)建時(shí)間線元數(shù)據(jù)映射關(guān)系。在SQL中表名為時(shí)序表名稱后拼接::meta
,用于查詢時(shí)間線元數(shù)據(jù)。假如時(shí)序表名稱為timeseries_table,則時(shí)序元數(shù)據(jù)表的名稱為timeseries_table::meta
。
表結(jié)構(gòu)請(qǐng)參見(jiàn)下表。
字段名稱 | 類型 | 描述 |
_m_name | VARCHAR | 度量名稱。 |
_data_source | VARCHAR | 數(shù)據(jù)源。 |
_tags | VARCHAR | 時(shí)間線標(biāo)簽。 |
_attributes | VARCHAR | 時(shí)間線屬性。 |
_meta_update_time | BIGINT | 時(shí)間線的元數(shù)據(jù)更新時(shí)間。 當(dāng)用戶更新時(shí)間線屬性時(shí),系統(tǒng)會(huì)自動(dòng)更新時(shí)間線元數(shù)據(jù)更新時(shí)間。此外,如果該時(shí)間線的數(shù)據(jù)持續(xù)寫(xiě)入,系統(tǒng)也會(huì)定時(shí)更新該時(shí)間,可用于判斷一條時(shí)間線是否活躍。 |
SQL語(yǔ)法
創(chuàng)建多值模型映射關(guān)系
通過(guò)CREATE TABLE語(yǔ)句創(chuàng)建多值模型映射關(guān)系。
SQL語(yǔ)法
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`) );
詳細(xì)參數(shù)說(shuō)明請(qǐng)參見(jiàn)多值模型映射關(guān)系的表結(jié)構(gòu)信息。
SQL示例
假設(shè)測(cè)量的屬性同時(shí)包含了cpu、memory、disktop三種度量,此處以創(chuàng)建多值類型映射表
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`) );
查詢數(shù)據(jù)
通過(guò)SELECT語(yǔ)句執(zhí)行時(shí)序數(shù)據(jù)查詢。更多信息,請(qǐng)參見(jiàn)查詢數(shù)據(jù)。
表格存儲(chǔ)還提供tag_value_at擴(kuò)展函數(shù)用于時(shí)間線標(biāo)簽(_tags)中的某個(gè)標(biāo)簽(tag)的值以及提取時(shí)間線屬性(_attributes)中的某個(gè)屬性值。
假設(shè)_tag為["host=abc","region=hangzhou"],則您可以使用tag_value_at(_tags, "host")提取host標(biāo)簽的值,即"abc"。SQL語(yǔ)句示例如下:
SELECT tag_value_at(_tags, "host") as host FROM timeseries_table LIMIT 1;
SQL示例
查詢時(shí)間線
創(chuàng)建時(shí)序表后,系統(tǒng)會(huì)自動(dòng)創(chuàng)建時(shí)間線元數(shù)據(jù)映射表,您可以使用時(shí)間線元數(shù)據(jù)映射表查詢時(shí)間線。
此處以時(shí)序表名稱為timeseries_table,時(shí)間線元數(shù)據(jù)映射表名稱為timeseries_table::meta
,度量類型為basic_metric為例介紹。
查詢時(shí)序元數(shù)據(jù)表中basic_metric度量類型下的時(shí)間線。
SELECT * FROM `timeseries_table::meta` WHERE _m_name = "basic_metric" LIMIT 100;
查詢時(shí)序元數(shù)據(jù)表中滿足多個(gè)標(biāo)簽條件(host=host001, region=hangzhou)的時(shí)間線。
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;
查詢時(shí)序元數(shù)據(jù)表中滿足多個(gè)標(biāo)簽條件(host=host001, region=hangzhou)和屬性條件(status=online),且在某個(gè)時(shí)刻之后仍活躍的時(shí)間線。
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;
使用單值模型映射表查詢時(shí)序數(shù)據(jù)
創(chuàng)建時(shí)序表后,系統(tǒng)會(huì)自動(dòng)創(chuàng)建同名的單值模型映射表,您可以使用單值模型映射表查詢時(shí)序數(shù)據(jù)。
此處以時(shí)序表名稱為timeseries_table,單值模型映射表名稱為timeseries_table
,度量類型為basic_metric為例介紹。
查詢時(shí)序數(shù)據(jù)表中basic_metric度量類型的數(shù)據(jù)。
SELECT * FROM timeseries_table WHERE _m_name = "basic_metric" LIMIT 10;
假設(shè)數(shù)據(jù)源為device001,查詢時(shí)序數(shù)據(jù)表中basic_metric度量類型下device001數(shù)據(jù)源在某個(gè)時(shí)刻之后的數(shù)據(jù)。
SELECT * FROM timeseries_table WHERE _m_name = "basic_metric" AND _data_source = "device001" AND _time > (UNIX_TIMESTAMP() - 900) * 1000000 LIMIT 10;
查詢時(shí)序數(shù)據(jù)表中滿足單個(gè)標(biāo)簽條件(host=host001)的時(shí)間線的數(shù)據(jù)。
SELECT * FROM timeseries_table WHERE _m_name = "basic_metric" AND tag_value_at(_tags, "host") = "host001" AND _time > (UNIX_TIMESTAMP() - 900) * 1000000 LIMIT 10;
查詢時(shí)序數(shù)據(jù)表中滿足多個(gè)標(biāo)簽條件(host=host001, region=hangzhou)的時(shí)間線的數(shù)據(jù)。
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;
對(duì)時(shí)序數(shù)據(jù)表中某條時(shí)間線(host=host001)的cpu_usr數(shù)據(jù)按照時(shí)間窗口(600 s聚合一次)進(jìn)行聚合(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;
使用多值模型映射表查詢時(shí)序數(shù)據(jù)
創(chuàng)建時(shí)序表后,通過(guò)手動(dòng)創(chuàng)建多值模型映射關(guān)系,您可以使用多值模型映射表查詢時(shí)序數(shù)據(jù)。關(guān)于創(chuàng)建多值模型映射關(guān)系的具體操作,請(qǐng)參見(jiàn)創(chuàng)建多值模型映射關(guān)系。
此處以時(shí)序表名稱為timeseries_table,多值模型映射表名稱為timeseries_table::muti_model
,測(cè)量的屬性同時(shí)包含了cpu、memory、disktop三種度量為例介紹。
查詢多值模型映射表中數(shù)據(jù)源標(biāo)識(shí)為host_01的數(shù)據(jù)。(假設(shè)_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;
計(jì)算多值模型映射表中滿足標(biāo)簽條件(region=hangzhou)的主機(jī)在日期為2022-01-01內(nèi)的平均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;
使用方式
您可以通過(guò)以下方式使用SQL查詢時(shí)序數(shù)據(jù)。查詢時(shí)序數(shù)據(jù)時(shí),請(qǐng)根據(jù)實(shí)際需要對(duì)應(yīng)映射表進(jìn)行操作。
使用控制臺(tái)。具體操作,請(qǐng)參見(jiàn)通過(guò)控制臺(tái)使用SQL查詢。
使用SDK。具體操作,請(qǐng)參見(jiàn)使用SDK。
使用JDBC
使用JDBC直連。具體操作,請(qǐng)參見(jiàn)JDBC連接表格存儲(chǔ)。
通過(guò)Hibernate使用。具體操作,請(qǐng)參見(jiàn)通過(guò)Hibernate使用。
通過(guò)MyBatis使用。具體操作,請(qǐng)參見(jiàn)通過(guò)MyBatis使用。
使用Go語(yǔ)言驅(qū)動(dòng)。具體操作,請(qǐng)參見(jiàn)使用Go語(yǔ)言驅(qū)動(dòng)。
使用命令行工具。具體操作,請(qǐng)參見(jiàn)使用命令行工具。