全部產品
Search
文件中心

Tablestore:檢索時間軸

更新時間:Jun 30, 2024

當不確定要查詢的時間軸資訊(例如度量名稱、資料來源資訊)或者需要按照指定條件列出時間軸時,您可以使用QueryTimeseriesMeta介面指定度量名稱、資料來源、標籤、屬性、更新時間等多種條件檢索時間軸。

說明

API介面說明請參見QueryTimeseriesMeta

前提條件

介面

public class QueryTimeseriesMetaRequest implements Request {
    /** 時序表名稱。*/
    private final String timeseriesTableName;
    /** 檢索條件.*/
    private MetaQueryCondition condition;
    /** 是否返回命中的總行數。*/
    private boolean getTotalHits = false;
    /** 一次返回的時間軸個數。*/
    private int limit = -1;
    /** 使用此傳回值作為下一次操作的起始點繼續讀取時間軸。*/
    private byte[] nextToken;
}

其中檢索條件的介面定義說明如下:

CompositeMetaQueryCondition

public class CompositeMetaQueryCondition implements MetaQueryCondition {
    /** 邏輯運算子。*/
    private final MetaQueryCompositeOperator operator;
    /** 子條件列表。*/
    private List<MetaQueryCondition> subConditions = new ArrayList<MetaQueryCondition>();
}

MeasurementMetaQueryCondition

public class MeasurementMetaQueryCondition implements MetaQueryCondition {
    /** 關係運算子。*/
    private final MetaQuerySingleOperator operator;
    /** 要匹配的度量名稱。*/
    private final String value;
}

DataSourceMetaQueryCondition

public class DataSourceMetaQueryCondition implements MetaQueryCondition {
    /** 關係運算子。*/
    private final MetaQuerySingleOperator operator;
     /** 要匹配的資料來源名稱。*/
    private final String value;
}

TagMetaQueryCondition

public class TagMetaQueryCondition implements MetaQueryCondition {
    /** 關係運算子。*/
    private final MetaQuerySingleOperator operator;
    /** 標籤名稱。*/
    private final String tagName;
    /** 標籤值。*/
    private final String value;
}

AttributeMetaQueryCondition

public class AttributeMetaQueryCondition implements MetaQueryCondition {
    /** 關係運算子。*/
    private final MetaQuerySingleOperator operator;
    /** 屬性名稱。*/
    private final String attributeName;
    /** 屬性值。*/
    private final String value;
}

UpdateTimeMetaQueryCondition

public class UpdateTimeMetaQueryCondition implements MetaQueryCondition {
    /** 關係運算子。*/
    private final MetaQuerySingleOperator operator;
    /** 時間軸中繼資料更新時間的時間戳記。*/
    private final long timeInUs;
}

參數

檢索時間軸時,您必須配置timeseriesTableName(時序表名稱)和condition(檢索條件)。其中condition包括compositeMetaQueryCondition(組合條件)、measurementMetaQueryCondition(度量名稱條件)、dataSourceMetaQueryCondition(資料來源條件)、tagMetaQueryCondition(標籤條件)、attributeMetaQueryCondition(屬性條件)和updateTimeMetaQueryCondition(更新時間條件)。檢索條件的詳細說明請參見下表。

參數

說明

compositeMetaQueryCondition

組合條件,包括如下內容:

  • operator:邏輯運算子,可選AND、OR、NOT。

  • subConditions:子條件列表,通過operator組成複雜查詢條件。

measurementMetaQueryCondition

度量名稱條件,包括如下內容:

  • operator:關係運算子或首碼匹配條件,關係運算子可選=、!=、>、>=、<、<=。

  • value:要匹配的度量名稱值,類型為字串。

dataSourceMetaQueryCondition

資料來源條件,包括如下內容:

  • operator:關係運算子或首碼匹配條件,關係運算子可選=、!=、>、>=、<、<=。

  • value:要匹配的資料來源值,類型為字串。

tagMetaQueryCondition

標籤條件,包括如下內容:

  • operator:關係運算子或首碼匹配條件,關係運算子可選=、!=、>、>=、<、<=。

  • tagName:要匹配的標籤名稱,類型為字串。

  • value:要匹配的標籤值,類型為字串。

attributeMetaQueryCondition

時間軸中繼資料的屬性條件,包括如下內容:

  • operator:關係運算子或首碼匹配條件,關係運算子可選=、!=、>、>=、<、<=。

  • attributeName:屬性名稱,類型為字串。

  • value:屬性值,類型為字串。

updateTimeMetaQueryCondition

時間軸中繼資料的更新時間條件,包括如下內容:

  • operator:關係運算子,可選=、!=、>、>=、<、<=。

  • timeInUs:時間軸中繼資料更新時間的時間戳記,單位為微秒。

樣本

以下樣本用於查詢指定時序表中度量名稱為cpu,標籤中含有os標籤且標籤首碼為Ubuntu的所有時間軸。

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);
    // 限制單次請求返回的時間軸中繼資料條數。
    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());
    }
}

相關文檔

確定到時間軸後,您可以執行如下操作: