すべてのプロダクト
Search
ドキュメントセンター

Tablestore:時系列データのクエリに SQL を使用する方法

最終更新日:Dec 28, 2024

Tablestore で時系列テーブルを作成し、SQL で時系列テーブルのマッピングテーブルを作成した後、Tablestore コンソールで、または Tablestore SDK を使用して SQL ステートメントを実行し、時系列テーブルの時系列データをクエリできます。

SQL での時系列テーブルのマッピングテーブル

TimeSeries モデルは、時系列の各時点で 1 つ以上の値が生成されるかどうかに基づいて、単一値モデルと複数値モデルに分類されます。次の表では、データをクエリするために SQL で時系列テーブルに作成できるマッピングテーブルの種類について説明します。

マッピングテーブルの種類

説明

作成方法

SQL でのマッピングテーブルの名前

単一値モデルのマッピングテーブル

単一値モデルのマッピングテーブルを使用して時系列データをクエリします。

時系列テーブルを作成すると、システムは時系列テーブルの SQL でマッピングテーブルを自動的に作成します。

時系列テーブルの名前と同じです。

複数値モデルのマッピングテーブル

複数値モデルのマッピングテーブルを使用して時系列データをクエリします。

時系列テーブルを作成した後、時系列テーブルの SQL でマッピングテーブルを手動で作成できます。

マッピングテーブルの名前は、時系列テーブルの名前::接尾辞 形式です。時系列テーブルの SQL でマッピングテーブルを作成するときに、接尾辞 を指定します。

時系列メタデータのマッピングテーブル

時系列メタデータをクエリします。

時系列テーブルを作成すると、システムは時系列メタデータの SQL でマッピングテーブルを自動的に作成します。

マッピングテーブルの名前は、時系列テーブルの名前::meta 形式です。

単一値モデルのマッピングテーブル

時系列テーブルを作成すると、システムは時系列テーブルの 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 でマッピングテーブルを作成するときに、接尾辞 を指定します。時系列テーブルの SQL で複数値モデルのマッピングテーブルを複数作成できます。

時系列テーブルの複数値モデルのマッピングテーブルを作成するときは、マッピングテーブルの名前、およびマッピングテーブルのデータ列の名前と型を指定します。詳細については、このトピックの時系列テーブルの複数値モデルのマッピングテーブルを作成するセクションを参照してください。

次の表では、SQL でのマッピングテーブルのスキーマについて説明します。

説明

複数値モデルのマッピングテーブルを使用して時系列メタデータのプロパティ列 (_attributes) またはメタデータ更新時刻列 (_meta_update_time) を読み取る場合は、2 つの列をマッピングテーブルに追加します。システムは 2 つのメタデータ列のコンテンツを自動的に入力します。

列名

種類

説明

_m_name

VARCHAR

メトリック名。

_data_source

VARCHAR

データソース。

_tags

VARCHAR

時系列のタグ。値は、["tagKey1=tagValue1","tagKey2=tagValue2"] 形式の複数のタグを含む配列です。tag_value_at 関数を使用して、タグの値を抽出できます。

_time

BIGINT

データポイントのタイムスタンプ。単位: マイクロ秒。

カスタムデータ列の名前。

SQL データ型

SQL のマッピングテーブルに複数のカスタムデータ列を追加できます。

SQL のマッピングテーブルで指定された列の名前または型が時系列テーブルの列の名前または型と一致しない場合、マッピングテーブルの列の値は null になります。

_attributes (オプション)

MEDIUMTEXT

時系列のプロパティ。プロパティの形式は、タグの形式と同じです。

_meta_update_time (オプション)

BIGINT

時系列のメタデータが更新された時点。

時系列のプロパティを更新すると、システムは時系列のメタデータ更新時刻を自動的に更新します。時系列へのデータの書き込みを続行すると、システムは一定の間隔で時系列のメタデータ更新時刻を更新します。メタデータ更新時刻を使用して、時系列がアクティブかどうかを判断できます。

時系列メタデータのマッピングテーブル

時系列テーブルを作成すると、システムは時系列メタデータのマッピングテーブルを自動的に作成します。SQL でのマッピングテーブルの名前は、時系列テーブルの名前::meta 形式です。マッピングテーブルを使用して、時系列メタデータをクエリできます。たとえば、時系列テーブルの名前が timeseries_table の場合、時系列メタデータのマッピングテーブルの名前は timeseries_table::meta です。

次の表では、SQL でのマッピングテーブルのスキーマについて説明します。

列名

種類

説明

_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 構文のパラメータの詳細については、このトピックの複数値モデルのマッピングテーブルセクションのテーブルスキーマを参照してください。

  • SQL の例

    次のサンプルコードは、時系列テーブルに timeseries_table::muti_model という名前の複数値モデルのマッピングテーブルを作成する方法の例を示しています。マッピングテーブルのメトリックは、cpu、memory、および disktop です。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 は、時系列のタグ (_tags) 内のタグの値を抽出するための tag_value_at 拡張関数を提供します。この関数を使用して、時系列のプロパティ (_attributes) 内のプロパティの値を抽出することもできます。

_tags の値が ["host=abc","region=hangzhou"] の場合、tag_value_at(_tags, "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;
  • 時系列データテーブルで、メトリックタイプが 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 秒の時間枠に基づいて集計 (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 であるデータをクエリします。この例では、host_id は _data_source に格納されています。

    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;
  • 複数値モデルのマッピングテーブルを使用して、2022 年 1 月 1 日に特定のタグ条件 (region=hangzhou) を満たすホストの平均 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 を使用して時系列データをクエリできます。時系列データをクエリするときは、ビジネス要件に基づいてマッピングテーブルで操作を実行できます。