Tablestore で時系列テーブルを作成し、SQL で時系列テーブルのマッピングテーブルを作成した後、Tablestore コンソールで、または Tablestore SDK を使用して SQL ステートメントを実行し、時系列テーブルの時系列データをクエリできます。
SQL での時系列テーブルのマッピングテーブル
TimeSeries モデルは、時系列の各時点で 1 つ以上の値が生成されるかどうかに基づいて、単一値モデルと複数値モデルに分類されます。次の表では、データをクエリするために 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 でマッピングテーブルを作成するときに、接尾辞
を指定します。時系列テーブルの 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 のマッピングテーブルで指定された列の名前または型が時系列テーブルの列の名前または型と一致しない場合、マッピングテーブルの列の値は 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 を使用して時系列データをクエリできます。時系列データをクエリするときは、ビジネス要件に基づいてマッピングテーブルで操作を実行できます。
Tablestore コンソールで SQL を使用して時系列データをクエリします。詳細については、Tablestore コンソールで SQL クエリ機能を使用するを参照してください。
Tablestore SDK を使用して SQL を使用して時系列データをクエリします。詳細については、Tablestore SDK を使用して SQL クエリ機能を使用するを参照してください。
Java Database Connectivity (JDBC) を使用して SQL を使用して時系列データをクエリします。
JDBC を使用して Tablestore にアクセスします。詳細については、JDBC を使用して Tablestore にアクセスするを参照してください。
Hibernate を使用して Tablestore 用の JDBC ドライバを使用します。詳細については、Hibernate を使用して SQL ステートメントを実行することでデータをクエリするを参照してください。
MyBatis を使用して Tablestore 用の JDBC ドライバを使用します。詳細については、MyBatis を使用して SQL ステートメントを実行することでデータをクエリするを参照してください。
Go 用の Tablestore ドライバを使用して Tablestore にアクセスします。詳細については、Go 用の Tablestore ドライバを使用して SQL ステートメントを実行することでデータをクエリするを参照してください。
Tablestore CLI で SQL を使用して時系列データをクエリします。詳細については、SQL クエリを参照してください。