QueryTimeseriesMeta を呼び出して、時系列テーブル内の時系列を検索します。メトリック名、データソース、タグ、属性、または更新時間でフィルターを適用し、必要な時系列を正確に取得できます。
API の完全な仕様については、「QueryTimeseriesMeta」をご参照ください。
前提条件
クライアントが初期化済みである必要があります。詳細については、「Tablestore クライアントの初期化」をご参照ください。
クラス定義
QueryTimeseriesMetaRequest は、時系列テーブル名とオプションのクエリ条件を受け取ります。setCondition を使用して結果をフィルターし、setGetTotalHits を使用して一致する時系列の件数を含め、setLimit を使用してページサイズを制御します。結果のページネーションには NextToken を使用します。
public class QueryTimeseriesMetaRequest implements Request {
/** The name of the time series table. */
private final String timeseriesTableName;
/** The query conditions.*/
private MetaQueryCondition condition;
/** Specifies whether to return the total number of time series that meet the query conditions. */
private boolean getTotalHits = false;
/** The number of time series to return at a time. */
private int limit = -1;
/** The token that is used in the next request to query time series. */
private byte[] nextToken;
}
以下のクラスは MetaQueryCondition を実装し、サポートされるクエリ条件タイプを定義します。
CompositeMetaQueryCondition
AND、OR、または NOT 論理演算子を使用して複数の条件を組み合わせます。
public class CompositeMetaQueryCondition implements MetaQueryCondition {
/** The logical operator. */
private final MetaQueryCompositeOperator operator;
/** The list of subconditions. */
private List<MetaQueryCondition> subConditions = new ArrayList<MetaQueryCondition>();
}
MeasurementMetaQueryCondition
メトリック名でフィルターします。
public class MeasurementMetaQueryCondition implements MetaQueryCondition {
/** The relational operator. */
private final MetaQuerySingleOperator operator;
/** The name of the metric of the time series that you want to query. */
private final String value;
}
DataSourceMetaQueryCondition
データソースでフィルターします。
public class DataSourceMetaQueryCondition implements MetaQueryCondition {
/** The relational operator. */
private final MetaQuerySingleOperator operator;
/** The name of the data source of the time series that you want to query. */
private final String value;
}
TagMetaQueryCondition
タグ名およびタグ値でフィルターします。
public class TagMetaQueryCondition implements MetaQueryCondition {
/** The relational operator. */
private final MetaQuerySingleOperator operator;
/** The tag name. */
private final String tagName;
/** The tag value. */
private final String value;
}
AttributeMetaQueryCondition
属性名および属性値でフィルターします。
public class AttributeMetaQueryCondition implements MetaQueryCondition {
/** The relational operator. */
private final MetaQuerySingleOperator operator;
/** The attribute name. */
private final String attributeName;
/** The attribute value. */
private final String value;
}
UpdateTimeMetaQueryCondition
時系列メタデータが最後に更新された時刻でフィルターします。
public class UpdateTimeMetaQueryCondition implements MetaQueryCondition {
/** The relational operator. */
private final MetaQuerySingleOperator operator;
/** The timestamp when the time series metadata is updated. */
private final long timeInUs;
}
パラメーター
timeseriesTableName および少なくとも 1 つの条件を指定します。以下の表は、各条件タイプについて説明しています。
|
条件 |
説明 |
|
compositeMetaQueryCondition |
論理演算子を使用して複数の条件を組み合わせます。
|
|
measurementMetaQueryCondition |
メトリック名でフィルターします。
|
|
dataSourceMetaQueryCondition |
データソースでフィルターします。
|
|
tagMetaQueryCondition |
タグ名およびタグ値でフィルターします。
|
|
attributeMetaQueryCondition |
属性名および属性値でフィルターします。
|
|
updateTimeMetaQueryCondition |
メタデータが最後に更新された時刻でフィルターします。
|
例
以下の例では、メトリック名が cpu で、os タグの値が Ubuntu で始まるすべての時系列をテーブルからクエリします。結果は最大 100 件ずつページングされ、合計 1,000 件の結果が取得された時点で停止します。
private static void queryTimeseriesMeta(TimeseriesClient client) {
// 時系列テーブルの名前を指定します。
String tableName = "<TIME_SERIES_TABLE>";
QueryTimeseriesMetaRequest queryTimeseriesMetaRequest = new QueryTimeseriesMetaRequest(tableName);
// メトリック名が cpu で、os タグの値が Ubuntu で始まるすべての時系列をクエリします。 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());
}
}
次のステップ
時系列をクエリした後、以下の操作が可能です。
一致する時系列内のデータポイントをクエリします。詳細については、「時系列データのクエリ」をご参照ください。
時系列メタデータに格納されている属性を更新します。詳細については、「時系列メタデータの更新」をご参照ください。
不要になった時系列メタデータを削除します。詳細については、「時系列メタデータの削除」をご参照ください。