- Querying
Async Queries
Rockset's asynchronous mode enables you to perform the following asynchronously:
- Send a query request.
- Receive back a query ID.
- Poll/fetch results whenever the query completes.
Note: Rockset's maximum query timeout is 30 minutes.
The following subsections describe how asynchronous mode works:
Asynchronous Query Request
Query requests can be sent through either a Query Lambda or raw SQL. To send the request asynchronously, populate the async_options
field with the following parameters:
client_timeout_ms
- Time for which the system will maintain the initial client connection before closing it and returning a partial response signaling that the query is still running. This can be set up to two minutes.timeout_ms
- Time after which the query will be terminated by the system and a timeout error returned. This may be set up to 30 minutes.max_initial_results
- Maximum number of rows for the client to process in an initial client response. Additional results must fetched through subsequent calls (using a pagination cursor). This parameter does NOT limit the total number of results returned by the query (use theLIMIT
SQL clause if you want to do this) – only the cutoff after which results will be paginated. This field only applies if the query completes withinclient_timeout_ms
.
Example Request
The following shows an example of an asynchronous query request configured with async_options
:
{
"sql": {
"query": "SELECT * FROM _events"
},
"async_options": {
"client_timeout_ms": 10000, # 10 seconds
"timeout_ms": 1800000, # 30 minutes
"max_initial_results": 100
}
}
Note: You can use async_options
in query lambdas in exactly the same way
Common Asynchronous Flows
Depending on the course of execution within the system, there are several possible results:
Condition(s) | Result(s) | Comments |
---|---|---|
Query runs to completion within client_timeout_ms and has a result size smaller than max_initial_results . | Returned in the results field in-band. | This is identical to how all non-paginated queries return results. |
Query runs to completion within client_timeout_ms but with a result size exceeds max_initial_results | First max_initial_results rows returned in-band along with a next_cursor to directly fetch the next page of results via GET .../queries/{queryId}/pages . | This is identical to how all paginated queries return results. |
Query does not run to completion within client_timeout_ms (regardless of result size). | A status: RUNNING response and a query ID. | Use this ID to poll the status with GET .../queries/{queryId} until it returns status: COMPLETE . Then you can retrieve the first (and possibly only) page with GET .../queries/{queryId}/pages . This is fairly symmetrical to the paginated query mechanism but involves polling for query completion first. |
timeout_ms is exceeded | The query will stop execution and return an error. |
Note: You can easily force certain behavioral paths. For example, setting max_initial_results
or client_timeout_ms
to 0 will always force the pagination of results.