查詢時序資料

更新時間:
Copy as MD

通過 Tablestore SDK for Java 從時序表中查詢符合指定條件的時序資料。

前提條件

已初始化用戶端。詳情請參見初始化Tablestore Client

方法說明

public GetTimeseriesDataResponse getTimeseriesData(GetTimeseriesDataRequest request) throws TableStoreException, ClientException

GetTimeseriesDataRequest參數說明

  • timeseriesTableName(必選)String:時序表名稱。

  • timeseriesKey(必選)TimeseriesKey:時間軸標識,包含以下參數。

    名稱

    類型

    說明

    measurementName(必選)

    String

    時間軸的度量名稱。

    dataSource(必選)

    String

    時間軸的資料來源資訊。

    tags(必選)

    SortedMap<String, String>

    時間軸的標籤資訊,由多個索引值對(key-value)組成。

  • beginTimeInUs(必選)long:起始時間戳記,單位為微秒,取值必須大於等於 0。查詢範圍包含該時間戳記。

    • 查詢條件包含起始時間戳記。

  • endTimeInUs(必選)long:結束時間戳記,單位為微秒,取值必須大於 0。查詢範圍不包含該時間戳記。

    • 查詢條件不包含結束時間戳記。

  • limit(可選)int:單次請求的最大返回行數。預設值為 5000,取值範圍為(0,5000]

    • 若合格資料行數超過 limit,實際返回行數可能因掃描資料量等因素低於該限制。可通過 nextToken 繼續擷取剩餘資料。

  • nextToken(可選)byte[]:分頁查詢憑證,用於擷取下一頁資料。預設值為空白。

    • 首次請求將nextToken設定為空白。若響應未返回全部資料,返回結果中的nextToken不為空白,傳入後續請求即可翻頁。

    • 如需持久化或傳輸nextToken,使用 Base 64 編碼將nextToken轉為字串。nextToken為位元據,直接使用new String(nextToken)會導致 token 資訊丟失。

  • 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());
    });
}

還可以在查詢時配置以下可選項。

  • 設定單次請求的最大返回行數

    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進行儲存和傳輸。
        String tokenAsString = Base64.toBase64String(nextToken);
        // 將String重新解碼為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());
        });
    }

常見問題