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

Tablestore:時系列メタデータの管理

最終更新日:Dec 28, 2024

Tablestore では、QueryTimeseriesMeta オペレーションを呼び出して条件に基づいて時系列を取得したり、UpdateTimeseriesMeta オペレーションを呼び出して時系列メタデータを更新したり、DeleteTimeseriesMeta オペレーションを呼び出して時系列メタデータを削除したりできます。時系列を取得した後、ビジネス要件に基づいて時系列メタデータを管理できます。たとえば、時系列メタデータを削除および更新できます。

概要

時系列データを書き込む前に、時系列メタデータを定義できます。時系列データを書き込む前に時系列メタデータを定義しない場合、システムは時系列のメタデータを自動的に抽出し、メタデータのインデックスを作成します。

時系列メタデータが生成された後、ビジネス要件に基づいて時系列メタデータを管理できます。次の表は、時系列メタデータの管理に使用できる機能を示しています。

機能

説明

時系列の取得

QueryTimeseriesMeta オペレーションを呼び出して、メトリック名、データソース、タグ、更新時刻、またはプロパティに基づいて、あるいは複数の条件の組み合わせに基づいて時系列を取得できます。

時系列メタデータの更新

UpdateTimeseriesMeta オペレーションを呼び出して、時系列メタデータのプロパティなど、時系列メタデータを更新できます。

時系列メタデータのプロパティは _attributes 列に格納されます。有効期限 (TTL) が -1 に設定されている時系列メタデータのプロパティを更新できます。値 -1 は、データが期限切れにならないことを示します。

説明

詳細については、時系列データの TTL を参照してください。

時系列メタデータの削除

DeleteTimeseriesMeta オペレーションを呼び出して、一度に複数の時系列メタデータレコードを削除できます。

重要

時系列メタデータを削除しても、時系列のデータは削除されません。時系列識別子を指定して GetTimeseriesData オペレーションを呼び出すことで、時系列のデータをクエリできます。

方法

Tablestore コンソール、Tablestore CLI、または Tablestore SDK を使用して、時系列メタデータを管理できます。

説明

サポートされる機能は、時系列メタデータの管理に使用するメソッドによって異なります。

時系列メタデータを管理する前に、以下の準備が整っていることを確認してください。

Tablestore コンソールの使用

Tablestore コンソールを使用して、時系列を取得したり、時系列メタデータを更新したりできます。

時系列の取得

  1. インスタンス管理 ページに移動します。

    1. Tablestore コンソール にログインします。

    2. 上部のナビゲーションバーで、リソースグループとリージョンを選択します。

    3. 概要 ページで、管理するインスタンスの名前をクリックするか、インスタンスの アクション 列の インスタンスの管理 をクリックします。

  2. インスタンスの詳細 タブの下部にある 時系列テーブル タブをクリックします。

  3. 時系列テーブル タブで、管理する時系列テーブルの名前をクリックし、データのクエリ タブをクリックします。時系列テーブルの アクション 列の データの管理 をクリックすることもできます。

  4. データのクエリ タブで、右上隅にある データのクエリ をクリックします。

  5. データのクエリ ダイアログボックスで、[メトリック名] パラメーターと [データソース] パラメーターを構成し、[タグ]、[プロパティ]、[更新日時] セクションの 追加 をクリックして条件を追加します。

    次の図は、メトリック名が cpu で、タグに os=Ubuntu16.10 が含まれる時系列をクエリする方法の例を示しています。fig_querytimeseries

  6. OK をクリックします。

    条件を満たす時系列が データのクエリ タブに表示されます。

時系列メタデータの更新

  1. インスタンス管理 ページに移動します。

    1. Tablestore コンソール にログインします。

    2. 上部のナビゲーションバーで、リソースグループとリージョンを選択します。

    3. 概要 ページで、管理するインスタンスの名前をクリックするか、インスタンスの アクション 列の インスタンスの管理 をクリックします。

  2. インスタンスの詳細 タブの下部にある 時系列テーブル タブをクリックします。

  3. 時系列テーブル タブで、管理する時系列テーブルの名前をクリックし、データのクエリ タブをクリックします。時系列テーブルの アクション 列の データの管理 をクリックすることもできます。

  4. データのクエリ タブで、管理する時系列を見つけ、アクション 列の 更新 をクリックします。

  5. 時系列の更新 ダイアログボックスで、時系列メタデータのプロパティを追加、削除、または変更します。

  6. OK をクリックします。

Tablestore CLI の使用

Tablestore CLI を使用して、時系列を取得したり、時系列メタデータを更新したりできます。

時系列の取得

query_ts_meta (省略形: qtm) コマンドを実行して、条件を指定して時系列を取得し、すべてまたは特定の数の時系列を返すことができます。詳細については、時系列の取得 または 時系列のスキャン を参照してください。

  • 条件を指定して時系列を取得する

    次のサンプルコードは、メトリック名が cpu でデータソースが localhost である時系列を取得する方法を示しています。

    query_ts_meta --measurement cpu --datasource localhost --limit 10

  • 時系列をスキャンし、特定の数の時系列を返す

    次のサンプルコードは、時系列をスキャンして 10 個の時系列を返す方法を示しています。

    query_ts_meta --limit 10

時系列メタデータの更新

update_ts_meta (省略形: utm) コマンドを実行して、時系列メタデータのプロパティを更新できます。

次のサンプルコードは、特定の時系列のメタデータのプロパティを "city=nanjing""region=jiangning" に変更する方法を示しています。

update_ts_meta --k '["cpu","localhost",["city=hangzhou","region=xihu"]]' --attrs '["city=nanjing","region=jiangning"]' 

Tablestore SDK の使用

Tablestore SDK for Java および Tablestore SDK for Go を使用して、時系列の取得、時系列メタデータの更新、および時系列メタデータの削除を行うことができます。この例では、Tablestore SDK for Java を使用します。

時系列の取得

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

// 時系列テーブルの名前を指定します。
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());
}

時系列メタデータの更新

次のサンプルコードは、時系列テーブル内の複数の時系列のメタデータのプロパティを更新する方法の例を示しています。

// 複数の時系列のメタデータのプロパティを更新する例
private static void updateTimeseriesMeta(TimeseriesClient client) {
    List<TimeseriesMeta> timeseriesMetaList = new ArrayList<TimeseriesMeta>();
    for (int i = 0; i < 10; i++) {
        Map<String, String> tags = new HashMap<String, String>();
        tags.put("region", "hangzhou");
        tags.put("os", "Ubuntu16.04");
        // 時系列の識別子を構築します。
        TimeseriesKey timeseriesKey = new TimeseriesKey("cpu", "host_" + i, tags);
        TimeseriesMeta meta = new TimeseriesMeta(timeseriesKey);
        // 時系列のプロパティの値を指定します。
        Map<String, String> attrs = new HashMap<String, String>();
        attrs.put("status", "online");
        meta.setAttributes(attrs);
        timeseriesMetaList.add(meta);
    }
    // 時系列テーブルの名前を指定します。
    String tableName = "<TIME_SERIES_TABLE>";
    UpdateTimeseriesMetaRequest updateTimeseriesMetaRequest = new UpdateTimeseriesMetaRequest(tableName);
    updateTimeseriesMetaRequest.setMetas(timeseriesMetaList);
    UpdateTimeseriesMetaResponse updateTimeseriesMetaResponse = client.updateTimeseriesMeta(updateTimeseriesMetaRequest);
    // すべての時系列のプロパティが更新されたかどうかを確認します。
    if (!updateTimeseriesMetaResponse.isAllSuccess()) {
        for (UpdateTimeseriesMetaResponse.FailedRowResult failedRowResult : updateTimeseriesMetaResponse.getFailedRows()) {
            System.out.println(failedRowResult.getIndex());
            System.out.println(failedRowResult.getError());
        }
    }
}

時系列メタデータの削除

次のコードは、時系列テーブル内の一部の時系列のメタデータを削除する方法の例を示しています。

// 時系列テーブル内の一部の時系列のメタデータを削除する例
private static void deleteTimeseriesMeta(TimeseriesClient client) {
    List<TimeseriesKey> timeseriesKeyList = new ArrayList<TimeseriesKey>();
    for (int i = 0; i < 10; i++) {
        Map<String, String> tags = new HashMap<String, String>();
        tags.put("region", "hangzhou");
        tags.put("os", "Ubuntu16.04");
        // 時系列識別子を構築します。
        TimeseriesKey timeseriesKey = new TimeseriesKey("cpu", "host_" + i, tags);
        timeseriesKeyList.add(timeseriesKey);
    }
    // 時系列テーブルの名前を指定します。
    String tableName = "<TIME_SERIES_TABLE>";
    DeleteTimeseriesMetaRequest deleteTimeseriesMetaRequest = new DeleteTimeseriesMetaRequest(tableName);
    deleteTimeseriesMetaRequest.setTimeseriesKeys(timeseriesKeyList);
    DeleteTimeseriesMetaResponse deleteTimeseriesMetaResponse = client.deleteTimeseriesMeta(deleteTimeseriesMetaRequest);
    // 時系列のメタデータが削除されたかどうかを確認します。
    if (!deleteTimeseriesMetaResponse.isAllSuccess()) {
        for (DeleteTimeseriesMetaResponse.FailedRowResult failedRowResult : deleteTimeseriesMetaResponse.getFailedRows()) {
            System.out.println(failedRowResult.getIndex());
            System.out.println(failedRowResult.getError());
        }
    }
}

FAQ

時系列データを削除するにはどうすればよいですか?

関連情報

  • 時系列を取得した後、時系列内で特定の条件を満たす時系列データをクエリできます。詳細については、時系列データのクエリ を参照してください。

  • 不要になった時系列メタデータを自動的に削除したり、時系列メタデータの保持期間を延長したりする場合は、時系列メタデータの TTL を構成できます。詳細については、時系列データの TTL を参照してください。