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

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

最終更新日:May 08, 2025

このトピックでは、Tablestore SDK for Java を使用して、時系列テーブル内の特定の条件を満たす時系列データをクエリする方法について説明します。

前提条件

Tablestore クライアントの初期化.

メソッドの説明

public GetTimeseriesDataResponse getTimeseriesData(GetTimeseriesDataRequest request) throws TableStoreException, ClientException

GetTimeseriesDataRequest パラメーター

  • timeseriesTableName (必須) String: 時系列テーブルの名前。

  • timeseriesKey (必須) TimeseriesKey: 時系列識別子。以下のパラメーターが含まれます。

    名前

    説明

    measurementName (必須)

    String

    時系列のメジャー名。

    dataSource (必須)

    String

    時系列のデータソース情報。

    tags (必須)

    SortedMap<String, String>

    時系列のタグ情報。複数のキーと値のペアで構成されます。

  • beginTimeInUs (必須) long: 開始タイムスタンプ。単位はマイクロ秒です。値は 0 以上である必要があります。

    • クエリ条件には、開始タイムスタンプが含まれます。

  • endTimeInUs (必須) long: 終了タイムスタンプ。単位はマイクロ秒です。値は 0 より大きい必要があります。

    • クエリ条件には、終了タイムスタンプは含まれません。

  • limit (オプション) int: 1 回のリクエストで返される最大行数。デフォルト値は 5000 です。有効値の範囲は (0,5000] です。

    • 条件を満たす行数が制限を超えていても、スキャンされるデータ量などの要因により、1 回のリクエストで返される行数が制限よりも少なくなる場合があります。nextToken を使用して残りのデータを取得できます。

  • nextToken (オプション) byte[]: ページングクエリのトークン。次のページのデータを取得するために使用されます。このパラメーターはデフォルトでは空です。

    • 最初のリクエストでは、nextToken を空に設定する必要があります。リクエストが条件を満たすすべてのデータを返さない場合、レスポンスの nextToken パラメーター値は空ではありません。nextToken を使用してページングクエリを実行できます。

    • nextToken を永続化したり、nextToken をフロントエンドページに転送する必要がある場合は、Base64 を使用して nextToken を文字列にエンコードして、保存および転送できます。nextToken 自体は文字列ではありません。new String(nextToken) をエンコードに直接使用すると、トークン情報が失われます。

  • backward (オプション) boolean: データを逆時系列順に読み取るかどうかを指定します。デフォルト値は false です。

  • fieldsToGet (オプション) List<Pair<String, ColumnType>>: クエリするデータ列を指定します。このパラメーターを指定しない場合、デフォルトですべての列がクエリされます。

    • fieldsToGet では、取得する各列の列名とデータ型を明示的に指定する必要があります。データ型が実際の型と一致しない場合、その列のデータを読み取ることができません。

サンプルコード

次のサンプルコードは、timeseries_table_sample 時系列テーブル内の条件を満たす時系列データをクエリします。

private static void getTimeseriesData(TimeseriesClient client) {
    String tableName = "timeseries_table_sample";
    GetTimeseriesDataRequest getTimeseriesDataRequest = new GetTimeseriesDataRequest(tableName);
    
    // 時系列識別子を指定します。メジャー名は cpu、データソース識別子は host_0、タグは "region=hangzhou" と "os=Ubuntu16.04" です。
    Map<String, String> tags = new HashMap<String, String>();
    tags.put("region", "hangzhou");
    tags.put("os", "Ubuntu16.04");
    TimeseriesKey timeseriesKey = new TimeseriesKey("cpu", "host_0", tags);
    getTimeseriesDataRequest.setTimeseriesKey(timeseriesKey);
    
    // 時間範囲を指定します。
    getTimeseriesDataRequest.setTimeRange(0, (System.currentTimeMillis() + 60 * 1000) * 1000);
    getTimeseriesDataRequest.setLimit(20);
    
    // 時系列データをクエリします。
    GetTimeseriesDataResponse getTimeseriesDataResponse = client.getTimeseriesData(getTimeseriesDataRequest);
    // クエリ結果を出力します。
    getTimeseriesDataResponse.getRows().forEach(row -> {
        System.out.println("TimeseriesKey: " + row.getTimeseriesKey() + "; TimeInUs: " + row.getTimeInUs() + "; Fields: " + row.getFields());
    });
}

時系列データをクエリする際に、サンプルコードを参照して以下の設定を行うこともできます。

  • 1 回のリクエストで返される最大行数を設定する

    getTimeseriesDataRequest.setLimit(20);
  • 逆順にソートするように設定する

    // データを逆時系列順に読み取って、時系列の最新データを取得します。
    getTimeseriesDataRequest.setBackward(true);
  • 結果で取得するデータ列を指定する

     getTimeseriesDataRequest.addFieldToGet("col_string", ColumnType.STRING);
     getTimeseriesDataRequest.addFieldToGet("col_long", ColumnType.INTEGER);
     getTimeseriesDataRequest.addFieldToGet("col_double", ColumnType.DOUBLE);
  • nextToken を使用してページングクエリを実行する

    // nextToken が空でない場合は、次のリクエストを開始できます。
    if (getTimeseriesDataResponse.getNextToken() != null) {
        // nextToken を取得します。
        byte[] nextToken = getTimeseriesDataResponse.getNextToken();
        
        /*
        // nextToken を永続化したり、nextToken をフロントエンドページに転送する必要がある場合は、Base64 を使用して nextToken を文字列にエンコードできます。
        String tokenAsString = Base64.toBase64String(nextToken);
        // 文字列を byte[] 型の nextToken にデコードします。
        byte[] tokenAsByte = Base64.fromBase64String(tokenAsString);
        */
        
        // nextToken を指定します。
        getTimeseriesDataRequest.setNextToken(nextToken);
        // 時系列データをクエリします。
        getTimeseriesDataResponse = client.getTimeseriesData(getTimeseriesDataRequest);
        // クエリ結果を出力します。
        getTimeseriesDataResponse.getRows().forEach(row -> {
            System.out.println("TimeseriesKey: " + row.getTimeseriesKey() + "; TimeInUs: " + row.getTimeInUs() + "; Fields: " + row.getFields());
        });
    }

FAQ