メトリック名やデータソースなどの時系列データに関する情報をクエリする場合、または指定された条件を満たす時系列データを一覧表示する場合、QueryTimeseriesMeta オペレーションを呼び出すことができます。このオペレーションを使用すると、メトリック名、データソース、タグ、属性、更新時刻などの特定の条件で時系列データをクエリできます。
詳細については、QueryTimeseriesMeta を参照してください。
前提条件
時系列データは、データをクエリする時系列テーブルに書き込まれます。詳細については、時系列データの書き込み を参照してください。
TimeseriesClient インスタンスが初期化されています。詳細については、OTSClient インスタンスの初期化 を参照してください。
クラス定義
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 | 次の内容を含む複合条件:
|
measurementMetaQueryCondition | 次の内容を含むメトリック名条件:
|
dataSourceMetaQueryCondition | 次の内容を含むデータソース条件:
|
tagMetaQueryCondition | 次の内容を含むタグ条件:
|
attributeMetaQueryCondition | 時系列データのメタデータの属性条件。属性条件には次の内容が含まれます:
|
updateTimeMetaQueryCondition | 時系列データのメタデータの更新時刻条件。更新時刻条件には次の内容が含まれます:
|
例
次のサンプルコードは、時系列テーブルで、メトリック名が 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());
}
}
次の手順
時系列データをクエリした後、時系列データに対して次の操作を実行できます。
時系列データで指定された条件を満たす時系列データをクエリします。詳細については、時系列データのクエリ を参照してください。
時系列データのメタデータの属性を更新します。詳細については、時系列データのメタデータの更新 を参照してください。
不要になった時系列データのメタデータを削除します。詳細については、時系列データのメタデータの削除 を参照してください。