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

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

最終更新日:May 01, 2026

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]

    • 一致する行数が limit を超える場合でも、スキャンされたデータ量によっては応答に含まれる行数が limit より少なくなることがあります。nextToken パラメーターを使用して、残りのデータを取得してください。

  • nextToken (オプション) byte[]:次のページの結果を取得するためのページネーショントークン。デフォルトでは空です。

    • 最初のリクエストでは、nextToken を空のままにしてください。応答にすべての一致データが含まれていない場合、応答内の nextToken は空ではありません。後続のリクエストでこのトークンを渡すことで、結果をページネーションできます。

    • nextToken を永続化または転送するには、Base64 文字列としてエンコードしてください。トークンはバイナリであり文字列ではないため、new String(nextToken) を直接使用するとトークンが破損します。

  • backward (オプション) boolean:逆順(最新から過去へ)でデータを読み取るかどうかを指定します。デフォルト値は false です。

  • fieldsToGet (オプション) List<Pair<String, ColumnType>>:返すデータ列。設定しない場合は、すべてのデータ列が返されます。

    • 各列について、名前とデータの型の両方を指定してください。指定された型が実際の型と一致しない場合、その列は読み取れません。

サンプルコード

以下の例では、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 が null でない場合、さらにデータがあります。
    if (getTimeseriesDataResponse.getNextToken() != null) {
        // nextToken の値を取得します。
        byte[] nextToken = getTimeseriesDataResponse.getNextToken();
        
        /*
        // nextToken を永続化または転送するには、Base64 文字列としてエンコードします。
        String tokenAsString = Base64.toBase64String(nextToken);
        // 文字列を byte[] にデコードします。
        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());
        });
    }

よくある質問