全部產品
Search
文件中心

Tablestore:查詢時序資料

更新時間:Apr 09, 2025

通過調用GetTimeseriesData介面,您可以查詢符合指定條件的時序資料。

前提條件

初始化Tablestore Client

參數說明

request包含以下參數:

參數

說明

timeseriesTableName(必選

時序表名稱。

timeseriesKey(必選

時間軸標識。包括如下內容:

  • measurement_name(必選):時間軸的度量名稱。

  • data_source(必選):資料來源資訊。

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

beginTimeInUs(可選)

要查詢的時間範圍,單位為微秒。預設值為0。

beginTimeInUs和endTimeInUs分別表示起始時間戳記和結束時間戳記,查詢的時間範圍為左閉右開的區間。

endTimeInUs(可選)

backward(可選)

是否按照時間倒序讀取資料,可用於擷取某條時間軸的最新資料。取值範圍如下:

  • True:按照時間倒序讀取。

  • False(預設):按照時間正序讀取。

fieldsToGet(可選)

要擷取的資料列。如果不指定,則預設擷取所有列。

重要

在fieldsToGet中,需要明確指定要擷取的每一列的列名及其資料類型。如果資料類型與實際不匹配,則將無法讀取該列的資料。

limit(可選)

本次請求最多返回的行數。預設值為5000,取值範圍為(0,5000]

說明

limit僅限制最多返回的行數,在滿足條件行數大於limit時,也可能由於掃描資料量等限制導致返回行數少於limit條,此時可以通過nextToken繼續擷取後面的行。

nextToken(可選)

如果一次查詢僅返回了部分合格行,此時response中會包括nextToken,可在下一次請求中指定nextToken用來繼續讀取資料。

重要

如果需要持久化nextToken或者傳輸nextToken給前端頁面,您可以使用Base64編碼將nextToken編碼為String後進行儲存或傳輸。nextToken本身不是字串,如果直接使用str(nextToken)將token編碼為String,則會導致token資訊丟失。

樣本

以下樣本用於查詢時序表中滿足指定條件的時序資料。

# 時間軸的標籤資訊。
tags = {"tag1": "t1", "tag2": "t2"}
# 時間軸標識。
key = TimeseriesKey("measure1", "datasource1", tags)

try:
    request = GetTimeseriesDataRequest("<TIMESERIES_TABLE_NAME>")
    # 時間軸標識
    request.timeseriesKey = key
    # 指定時間範圍的結束時間戳記。
    request.endTimeInUs = int(time.time() * 1000000)
    # 限制請求最多返回的行數。
    request.limit = 20
    # 指定要擷取的資料列。如果不指定,則預設擷取所有列。
    request.fieldsToGet = {"string_field": DataType.STRING, "long_field": DataType.LONG}

    # 調用介面查詢時序資料。
    response = ots_client.get_timeseries_data(request)
    print(response.rows)

    # 如果nextToken不為空白,可以發起下一次請求。
    if response.nextToken is not None:
        # 擷取nextToken。
        next_token = response.nextToken

        # 如果需要持久化nextToken或者傳輸nextToken給前端頁面,您可以使用Base64編碼將nextToken編碼為String進行儲存和傳輸。
        # token本身不是字串,直接使用str(nextToken)將token編碼為String會造成token資訊丟失。
        token_as_string = base64.b64encode(next_token).decode('utf-8')
        # 將String解碼為byte。
        next_token_byte = base64.b64decode(token_as_string.encode('utf-8'))

        # 調用介面查詢時序資料。
        request.nextToken = next_token
        response = ots_client.get_timeseries_data(request)
        print(response.rows)
    print("get timeseries data succeeded.")
except Exception as e:
    # 如果拋出異常,則說明執行失敗,處理異常。
    print("get timeseries data failed. %s" % e)