全部產品
Search
文件中心

Tablestore:全匹配查詢

更新時間:Jul 05, 2024

全匹配查詢(MatchAllQuery)可以匹配所有行,常用於查詢表中資料總行數,或者隨機返回幾條資料。

介面

全匹配查詢的介面為Search或者ParallelScan,具體的Query類型為MatchAllQuery

參數

參數

說明

query

設定查詢類型為MatchAllQuery。

tableName

資料表名稱。

indexName

多元索引名稱。

limit

本次查詢需要返回的最大數量。

如果要隨機擷取幾行資料,請設定limit為正整數。

如果只為了擷取行數,無需具體資料,可以設定limit=0,即不返回任意一行資料。

columnsToGet

是否返回所有列,包含returnAll和columns設定。

returnAll預設為false,表示不返回所有列,此時可以通過columns指定返回的列;如果未通過columns指定返回的列,則只返回主鍵列。

當設定returnAll為true時,表示返回所有列。

getTotalCount

是否返回匹配的總行數,預設為false,表示不返回。

返回匹配的總行數會影響查詢效能。

使用方式

您可以使用命令列工具或者SDK進行全匹配查詢。進行全匹配查詢之前,您需要完成如下準備工作。

  • 使用阿里雲帳號或者使用具有Table Store操作許可權的RAM使用者進行操作。如果需要為RAM使用者授權Table Store操作許可權,請參見通過RAM Policy為RAM使用者授權進行配置。

    使用SDK方式和命令列工具方式進行操作時,如果當前無可用AccessKey,則需要為阿里雲帳號或者RAM使用者建立AccessKey。具體操作,請參見建立AccessKey

  • 已建立資料表。具體操作,請參見資料表操作

  • 已為資料表建立多元索引。具體操作,請參見建立多元索引

  • 使用SDK方式進行操作時,還需要完成初始化Client。具體操作,請參見初始化OTSClient

  • 使用命令列工具方式進行操作前,還需要完成下載並啟動命令列工具,然後配置接入執行個體資訊並選擇要操作的表。具體操作,請參見下載命令列工具啟動並配置資料表操作

使用命令列工具

通過命令列工具執行search命令使用多元索引查詢資料。更多資訊,請參見多元索引

  1. 執行search命令使用search_index多元索引查詢表中資料,並返回所有建立索引的列。

    search -n search_index --return_all_indexed
  2. 根據系統提示輸入查詢條件,樣本如下:

    {
        "Offset": -1,
        "Limit": 10,
        "Collapse": null,
        "Sort": null,
        "GetTotalCount": true,
        "Token": null,
        "Query": {
            "Name": "MatchAllQuery",
            "Query": {
            }
        }
    }

使用SDK

您可以通過Java SDKGo SDKPython SDKNode.js SDK.NET SDKPHP SDK使用全匹配查詢。此處以Java SDK為例介紹全匹配查詢的使用。

以下樣本用於通過MatchAllQuery查詢表中資料的總行數。

/**
 * 通過MatchAllQuery查詢表中資料的總行數。
 * @param client
 */
private static void matchAllQuery(SyncClient client) {
    SearchQuery searchQuery = new SearchQuery();

    /**
    * 設定查詢類型為MatchAllQuery。
    */
    searchQuery.setQuery(new MatchAllQuery()); 

    /**
     * MatchAllQuery結果中的TotalCount可以表示表中資料的總行數。
     * 如果要隨機擷取幾行資料,請設定limit為正整數。
     * 如果只為了擷取行數,但不需要具體資料,可以設定limit=0,即不返回任意一行資料。
     */
    searchQuery.setLimit(0);
    SearchRequest searchRequest = new SearchRequest("<TABLE_NAME>", "<SEARCH_INDEX_NAME>", searchQuery);

    /**
    * 設定返回匹配的總行數。
    */ 
    searchQuery.setGetTotalCount(true);
    SearchResponse resp = client.search(searchRequest);
    /**
     * 判斷返回的結果是否完整,當isAllSuccess為false時,表示可能存在部分節點查詢失敗,返回的是部分資料。
     */
    if (!resp.isAllSuccess()) {
        System.out.println("NotAllSuccess!");
    }
    System.out.println("IsAllSuccess: " + resp.isAllSuccess());
    System.out.println("TotalCount: " + resp.getTotalCount()); //列印總行數。
    System.out.println(resp.getRequestId());
}
            

計費說明

使用多元索引查詢資料時會消耗讀輸送量。更多資訊,請參見多元索引計量計費

常見問題

如何查看錶的總行數

相關文檔