建立時序表並建立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語句執行時序資料查詢。更多資訊,請參見查詢資料

Tablestore還提供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;

使用單值模型映射表查詢時序資料

建立時序表後,系統會自動建立同名的單值模型映射表,您可以使用單值模型映射表查詢時序資料。

此處以時序表名稱為timeseries_table,單值模型映射表名稱為timeseries_table,度量類型為basic_metric為例介紹。

  • 查詢時序資料表中basic_metric度量類型的資料。
    SELECT * FROM timeseries_table WHERE _m_name = "basic_metric" 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;

使用多值模型映射表查詢時序資料

建立時序表後,通過手動建立多值模型映射關係,您可以使用多值模型映射表查詢時序資料。關於建立多值模型映射關係的具體操作,請參見建立多值模型映射關係

此處以時序表名稱為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查詢時序資料。查詢時序資料時,請根據實際需要對應映射表進行操作。