You can use match all query to match all rows in a table to query the total number of rows in the table and return multiple random rows.

API operation

You can call the Search or ParallelScan operation and set the query type to MatchAllQuery to perform a match all query.

Usage

You can use the following Tablestore SDKs to perform a match all query:

Parameters

Parameter Description
query The query type. Set the query type to MatchAllQuery.
tableName The name of the data table.
indexName The name of the search index.
limit The maximum number of rows that you want the current query to return.

If you want the current query to return multiple random rows of data, set limit to a positive integer.

To query only the number of matched rows without returning specific data, you can set limit to 0. This way, Tablestore returns the number of matched rows without data from the table.

columnsToGet Specifies whether to return all columns.

By default, returnAll is false, which specifies that not all columns are returned. In this case, you can use columns to specify the columns that you want to return. If you do not specify the columns that you want to return, only the primary key columns are returned.

If returnAll is set to true, all columns are returned.

getTotalCount Specifies whether to return the total number of rows that match the query conditions. By default, getTotalCount is false, which specifies that the total number of rows that match the query conditions is not returned.

If this parameter is set to true, the query performance is compromised.

Examples

/**
 * Use match all query to query the total number of rows in a table. 
 * @param client
 */
private static void matchAllQuery(SyncClient client) {
    SearchQuery searchQuery = new SearchQuery();

    /**
    * Set the query type to MatchAllQuery. 
    */
    searchQuery.setQuery(new MatchAllQuery()); 

    /**
     * In the MatchAllQuery-based query result, the value of TotalCount is the total number of rows in the table. 
     If you want the current query to return multiple random rows of data, set limit to a positive integer. 
     * To query only the number of matched rows without returning specific data, you can set limit to 0. This way, Tablestore returns the number of matched rows without data from the table. 
     */
    searchQuery.setLimit(0);
    SearchRequest searchRequest = new SearchRequest(TABLE_NAME, INDEX_NAME, searchQuery);

    /**
    * Specify that the total number of rows that match the query conditions is returned. 
    */ 
    searchQuery.setGetTotalCount(true);
    SearchResponse resp = client.search(searchRequest);
    /**
     * Check whether the returned total number of rows that match the query conditions is correct. If isAllSuccess is false, Tablestore may fail to query data on all servers and return a value that is smaller than the total number of rows that match the query conditions. 
     */
    if (!resp.isAllSuccess()) {
        System.out.println("NotAllSuccess!");
    }
    System.out.println("IsAllSuccess: " + resp.isAllSuccess());
    System.out.println("TotalCount: " + resp.getTotalCount()); // Specify that the total number of rows that match the query conditions is displayed. 
    System.out.println(resp.getRequestId());
}