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

Tablestore:時系列データのクエリ

最終更新日:Dec 28, 2024

メトリック名やデータソースなどの時系列データに関する情報をクエリする場合、または指定された条件を満たす時系列データを一覧表示する場合、QueryTimeseriesMeta オペレーションを呼び出すことができます。このオペレーションを使用すると、メトリック名、データソース、タグ、属性、更新時刻などの特定の条件で時系列データをクエリできます。

説明

詳細については、QueryTimeseriesMeta を参照してください。

前提条件

クラス定義

public class QueryTimeseriesMetaRequest implements Request {
    /** 時系列テーブルの名前。 */
    private final String timeseriesTableName;
    /** クエリ条件。*/
    private MetaQueryCondition condition;
    /** クエリ条件を満たす時系列データの総数を返すかどうかを指定します。 */
    private boolean getTotalHits = false;
    /** 一度に返す時系列データの数。 */
    private int limit = -1;
    /** 時系列データをクエリするための次のリクエストで使用されるトークン。 */
    private byte[] nextToken;
}

次のクラスはクエリ条件を定義します。

CompositeMetaQueryCondition

public class CompositeMetaQueryCondition implements MetaQueryCondition {
    /** 論理演算子。 */
    private final MetaQueryCompositeOperator operator;
    /** サブ条件のリスト。 */
    private List<MetaQueryCondition> subConditions = new ArrayList<MetaQueryCondition>();
}

MeasurementMetaQueryCondition

public class MeasurementMetaQueryCondition implements MetaQueryCondition {
    /** 比較演算子。 */
    private final MetaQuerySingleOperator operator;
    /** クエリする時系列データのメトリック名。 */
    private final String value;
}

DataSourceMetaQueryCondition

public class DataSourceMetaQueryCondition implements MetaQueryCondition {
    /** 比較演算子。 */
    private final MetaQuerySingleOperator operator;
     /** クエリする時系列データのデータソース名。 */
    private final String value;
}

TagMetaQueryCondition

public class TagMetaQueryCondition implements MetaQueryCondition {
    /** 比較演算子。 */
    private final MetaQuerySingleOperator operator;
    /** タグ名。 */
    private final String tagName;
    /** タグ値。 */
    private final String value;
}

AttributeMetaQueryCondition

public class AttributeMetaQueryCondition implements MetaQueryCondition {
    /** 比較演算子。 */
    private final MetaQuerySingleOperator operator;
    /** 属性名。 */
    private final String attributeName;
    /** 属性値。 */
    private final String value;
}

UpdateTimeMetaQueryCondition

public class UpdateTimeMetaQueryCondition implements MetaQueryCondition {
    /** 比較演算子。 */
    private final MetaQuerySingleOperator operator;
    /** 時系列データのメタデータが更新されたタイムスタンプ。 */
    private final long timeInUs;
}

パラメーター

時系列データをクエリするには、timeseriesTableName パラメーターと condition パラメーターを指定する必要があります。compositeMetaQueryCondition、measurementMetaQueryCondition、dataSourceMetaQueryCondition、tagMetaQueryCondition、attributeMetaQueryCondition、updateTimeMetaQueryCondition などの種類の条件がサポートされています。次の表に、条件を示します。

条件

説明

compositeMetaQueryCondition

次の内容を含む複合条件:

  • operator: 論理演算子。有効な値: AND、OR、NOT。

  • subConditions: 複雑なクエリのために演算子を使用して組み合わせることができるサブ条件。

measurementMetaQueryCondition

次の内容を含むメトリック名条件:

  • operator: 比較演算子またはプレフィックス一致条件。有効な値: =、!=、>、>=、<、<=。

  • value: クエリする時系列データのメトリック名。タイプ: STRING。

dataSourceMetaQueryCondition

次の内容を含むデータソース条件:

  • operator: 比較演算子またはプレフィックス一致条件。有効な値: =、!=、>、>=、<、<=。

  • value: クエリする時系列データのデータソース。タイプ: STRING。

tagMetaQueryCondition

次の内容を含むタグ条件:

  • operator: 比較演算子またはプレフィックス一致条件。有効な値: =、!=、>、>=、<、<=。

  • tagName: クエリする時系列データのタグ名。タイプ: STRING。

  • value: クエリする時系列データのタグ値。タイプ: STRING。

attributeMetaQueryCondition

時系列データのメタデータの属性条件。属性条件には次の内容が含まれます:

  • operator: 比較演算子またはプレフィックス一致条件。有効な値: =、!=、>、>=、<、<=。

  • attributeName: 属性名。タイプ: STRING。

  • value: 属性値。タイプ: STRING。

updateTimeMetaQueryCondition

時系列データのメタデータの更新時刻条件。更新時刻条件には次の内容が含まれます:

  • operator: 比較演算子。有効な値: =、!=、>、>=、<、<=。

  • timeInUs: 時系列データのメタデータが更新されたタイムスタンプ。単位: マイクロ秒。

次のサンプルコードは、時系列テーブルで、メトリック名が cpu で、値が Ubuntu で始まる os タグを持つすべての時系列データをクエリする方法の例を示しています。

private static void queryTimeseriesMeta(TimeseriesClient client) {
    // 時系列テーブルの名前を指定します。
    String tableName = "<TIME_SERIES_TABLE>";
    QueryTimeseriesMetaRequest queryTimeseriesMetaRequest = new QueryTimeseriesMetaRequest(tableName);
    // メトリック名が cpu で、値が Ubuntu で始まる os タグを持つすべての時系列データをクエリします。measurement_name="cpu" and have_prefix(os, "Ubuntu")
    CompositeMetaQueryCondition compositeMetaQueryCondition = new CompositeMetaQueryCondition(MetaQueryCompositeOperator.OP_AND);
    compositeMetaQueryCondition.addSubCondition(new MeasurementMetaQueryCondition(MetaQuerySingleOperator.OP_EQUAL, "cpu"));
    compositeMetaQueryCondition.addSubCondition(new TagMetaQueryCondition(MetaQuerySingleOperator.OP_PREFIX, "os", "Ubuntu"));
    queryTimeseriesMetaRequest.setCondition(compositeMetaQueryCondition);
    queryTimeseriesMetaRequest.setGetTotalHits(true);
    // 1つのリクエストで返される時系列データのメタデータエントリの最大数を指定します。
    queryTimeseriesMetaRequest.setLimit(100);
    // クエリを開始します。
    QueryTimeseriesMetaResponse queryTimeseriesMetaResponse = client.queryTimeseriesMeta(queryTimeseriesMetaRequest);
    // クエリ条件を満たす時系列データの総数を表示します。
    System.out.println(queryTimeseriesMetaResponse.getTotalHits());

    // リクエスト結果を保存します。
    List<TimeseriesMeta> timeseriesMetas = new ArrayList<TimeseriesMeta>();
    timeseriesMetas.addAll(queryTimeseriesMetaResponse.getTimeseriesMetas());

    // レスポンスに NextToken が含まれている場合は、新しいリクエストを開始して残りの結果を取得できます。
    while (queryTimeseriesMetaResponse.getNextToken() != null) {
        queryTimeseriesMetaRequest.setNextToken(queryTimeseriesMetaResponse.getNextToken());
        queryTimeseriesMetaResponse = client.queryTimeseriesMeta(queryTimeseriesMetaRequest);
        timeseriesMetas.addAll(queryTimeseriesMetaResponse.getTimeseriesMetas());
        // 返される時系列データの最大数を指定します。
        if (timeseriesMetas.size() >= 1000) {
            break;
        }
    }

    System.out.println(timeseriesMetas.size());
    for (TimeseriesMeta timeseriesMeta : timeseriesMetas) {
        System.out.println(timeseriesMeta.getTimeseriesKey().getMeasurementName());
        System.out.println(timeseriesMeta.getTimeseriesKey().getDataSource());
        System.out.println(timeseriesMeta.getTimeseriesKey().getTags());
        System.out.println(timeseriesMeta.getAttributes());
        System.out.println(timeseriesMeta.getUpdateTimeInUs());
    }
}

次の手順

時系列データをクエリした後、時系列データに対して次の操作を実行できます。