Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
No Cosmos DB (no Azure e no Fabric), as consultas podem ter várias páginas de resultados. Este documento explica os critérios usados pelo mecanismo de consulta do Cosmos DB para decidir se os resultados da consulta devem ser divididos em várias páginas. Opcionalmente, você pode usar tokens de continuação para gerenciar resultados de consulta que abrangem várias páginas.
Execuções de consulta
Às vezes, os resultados da consulta são divididos em várias páginas. Uma execução de consulta separada gera os resultados de cada página. Quando os resultados da consulta não podem ser retornados em uma única execução, o Cosmos DB divide automaticamente os resultados em várias páginas.
Você pode especificar o número máximo de itens retornados por uma consulta definindo o MaxItemCount. O MaxItemCount é especificado por solicitação e informa ao mecanismo de consulta para retornar esse número de itens ou menos. Você pode definir MaxItemCount se -1 não quiser colocar um limite no número de resultados por execução de consulta.
Além disso, há outros motivos pelos quais o mecanismo de consulta pode precisar dividir os resultados da consulta em várias páginas. Estes motivos incluem:
- O contêiner foi limitado e não havia RUs (unidades de solicitação) disponíveis para retornar mais resultados de consulta
- A resposta da execução da consulta foi muito grande
- O tempo da execução da consulta foi muito longo
- Foi mais eficiente para o mecanismo de consulta retornar resultados em execuções extras
O número de itens retornados por execução de consulta é menor ou igual a 'MaxItemCount''. No entanto, é possível que outros critérios limitassem o número de resultados que a consulta poderia retornar. Se você executar a mesma consulta várias vezes, o número de páginas poderá não ser constante. Por exemplo, se uma consulta for limitada, poderá haver menos resultados disponíveis por página, o que significa que a consulta tem páginas extras. Em alguns casos, também é possível que sua consulta possa retornar uma página vazia de resultados.
Manipular várias páginas de resultados
Para garantir resultados precisos da consulta, você deve progredir em todas as páginas. Você deve continuar a executar consultas até que não haja páginas extras.
Aqui estão alguns exemplos para processar resultados de consultas com várias páginas:
Tokens de continuação
No SDK do .NET e no SDK do Java, opcionalmente, você pode usar tokens de continuação como um indicador para o progresso da consulta. As execuções de consulta do Cosmos DB são sem estado no lado do servidor e podem ser retomadas a qualquer momento usando o token de continuação. Para o SDK do Python, os tokens de continuação só têm suporte para consultas de partição única. A chave de partição deve ser especificada no objeto de opções porque não é suficiente tê-la na própria consulta.
Aqui estão alguns exemplos para usar tokens de continuação:
Se a consulta retornar um token de continuação, haverá resultados de consulta extras.
Na API REST do Cosmos DB, você pode gerenciar tokens de continuação com o x-ms-continuation cabeçalho. Assim como ocorre com a consulta com o SDK do .NET ou Java, se o x-ms-continuation cabeçalho de resposta não estiver vazio, isso significa que a consulta tem resultados extras.
Desde que você esteja usando a mesma versão do SDK, os tokens de continuação nunca expiram. Opcionalmente, você pode restringir o tamanho de um token de continuação. Independentemente da quantidade de dados ou do número de partições físicas em seu contêiner, as consultas retornam um único token de continuação.
Você não pode usar tokens de continuação para consultas com GROUP BY ou DISTINCT porque essas consultas exigiriam o armazenamento de uma quantidade significativa de estado. Para consultas com DISTINCT, você poderá usar tokens de continuação se adicionar ORDER BY à consulta.
Aqui está um exemplo de uma consulta com DISTINCT que poderia usar um token de continuação:
SELECT DISTINCT VALUE
e.name
FROM
employees e
ORDER BY
e.name