全部產品
Search
文件中心

Tablestore:使用SQL查詢時序資料

更新時間:Jun 30, 2024

建立時序表並建立SQL映射關係後,您可以通過控制台、SDK等不同方式使用SQL查詢時序資料。

時序表的SQL映射關係

根據每個時間軸每個時刻對應一個值或者多個值,時序模型分為“單值模型”和“多值模型”。對於同一個時序表,您可以建立三種SQL映射關係用於資料查詢,詳細說明請參見下表。

映射關聯類型

描述

建立方式

在SQL中的表名

單值模型映射關係

以單值模型查詢時序資料。

建立時序表後,系統自動建立SQL映射關係。

與時序表名相同

多值模型映射關係

以多值模型查詢時序資料。

建立時序表後,由使用者手動建立SQL映射關係。

在時序表名後拼接::尾碼,即時序表名::尾碼,其中尾碼由使用者在建立時自訂

時間軸中繼資料映射關係

查詢時間軸中繼資料。

建立時序表後,系統自動建立SQL映射關係。

在時序表名稱後拼接::meta,即時序表名::meta

單值模型映射關係

時序表建立後,系統會自動建立單值模型映射關係。在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

資料點的時間戳記,單位微秒。

自訂資料列名

SQL資料類型

自訂的資料列,支援添加多個。

如果指定的列名或者類型與表中實際寫入的列名或者類型不符,則該列讀取結果為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查詢時序資料。查詢時序資料時,請根據實際需要對應映射表進行操作。