### Description

Only "search hits" based queries (no aggregations) provide a consistent view on the data when paginating through the result set. With point-in-time, it is possible to support transactional semantics for aggregation queries as well.

This issue is somewhat blocked by https://github.com/elastic/elasticsearch/issues/75528 because a PIT can not immediately be closed if the aggregation result set contains less than `fetch_size` records. This could cause some increased resource utilization due to open PITs. Especially if the client does not close the SQL cursor.
x-pack/plugin/sql/src/internalClusterTest/java/org/elasticsearch/xpack/sql/action/SqlSearchPageTimeoutIT.java
@Override
    protected Settings nodeSettings(int nodeOrdinal, Settings otherSettings) {
        Settings.Builder settings = Settings.builder().put(super.nodeSettings(nodeOrdinal, otherSettings));
        
        settings.put(SearchService.KEEPALIVE_INTERVAL_SETTING.getKey(), TimeValue.timeValueMillis(100));
        return settings.build();
    }
    public void testSearchContextIsCleanedUpAfterPageTimeoutForHitsQueries() throws Exception {
        setupTestIndex();
        SqlQueryResponse response = new SqlQueryRequestBuilder(client(), SqlQueryAction.INSTANCE).query("SELECT field FROM test")
            .fetchSize(1)
            .pageTimeout(TimeValue.timeValueMillis(500))
            .get();
        assertTrue(response.hasCursor());
        assertEquals(1, getNumberOfSearchContexts());
        assertBusy(() -> assertEquals(0, getNumberOfSearchContexts()));
        SearchPhaseExecutionException exception = expectThrows(
            SearchPhaseExecutionException.class,
            () -> new SqlQueryRequestBuilder(client(), SqlQueryAction.INSTANCE).cursor(response.cursor()).get()
        );
        assertThat(Arrays.asList(exception.guessRootCauses()), contains(instanceOf(SearchContextMissingException.class)));
    }
    public void testNoSearchContextForAggregationQueries() throws InterruptedException {
        setupTestIndex();
        SqlQueryResponse response = new SqlQueryRequestBuilder(client(), SqlQueryAction.INSTANCE).query(
            "SELECT COUNT(*) FROM test GROUP BY field"
        ).fetchSize(1).pageTimeout(TimeValue.timeValueMillis(500)).get();
        assertEquals(1, response.size());