View a markdown version of this page

Reduzir chamadas de API com pesquisa longa - Amazon Redshift

O Amazon Redshift deixará de oferecer suporte ao uso de UDFs em Python após 30 de junho de 2026. Começaremos a aplicar essa alteração em fases. Consulte mais informações sobre os detalhes do fim da vida útil do Python e as opções de migração na publicação do blog publicada em 30 de junho de 2025.

Reduzir chamadas de API com pesquisa longa

Por padrão, as operações da API de dados retornam uma resposta imediata. Se a operação for com relação a uma instrução em andamento, você deverá pesquisar repetidamente até que a instrução atinja um estado de terminal. Com a pesquisa longa, defina WaitTimeSeconds como um valor entre 1 e 30. A API atrasará o retorno de uma resposta síncrona até que a instrução termine ou WaitTimeSeconds seja atingido, o que ocorrer primeiro.

A pesquisa longa é compatível com DescribeStatement, ExecuteStatement, BatchExecuteStatement, GetStatementResult e GetStatementResultV2.

Quando uma operação usa WaitTimeSeconds para enviar uma nova instrução ou aguardar uma existente:

  • Se a instrução for concluída dentro do tempo de espera, a resposta incluirá o status de terminal ou os dados do resultado, dependendo da operação.

  • Se a instrução ainda estiver em execução quando o tempo de espera expirar, a resposta retornará o status em andamento atual.

  • Se a instrução já estiver concluída antes da solicitação de pesquisa longa ser feita, a API retornará imediatamente com o status de terminal.

  • Se WaitTimeSeconds for omitido, o comportamento assíncrono padrão será preservado.

Casos de uso comuns

Veja a seguir exemplos de quando a pesquisa longa pode ser útil:

  • Enviar uma breve consulta e aguardar a conclusão: use ExecuteStatement com WaitTimeSeconds. Quando a consulta termina ou o tempo de espera expira, a resposta retorna a instrução Status, RedshiftPid e HasResultSet. Para obter os metadados completos da instrução, chame DescribeStatement. Se HasResultSet for true, chame GetStatementResult para buscar os resultados.

  • Pesquisa longa de status: use ExecuteStatement para enviar a consulta e, em seguida, chame DescribeStatement com WaitTimeSeconds. Quando a consulta for concluída, DescribeStatement retornará os metadados completos da instrução, incluindo status, duração e detalhes do erro.

  • Pesquisa longa de resultado: use ExecuteStatement para enviar a consulta e, em seguida, chame GetStatementResult com WaitTimeSeconds. Quando a consulta é concluída, os dados do resultado são retornados diretamente. Se a consulta ainda estiver em execução quando o tempo de espera expirar, uma ResourceNotFoundException será retornada indicando que ainda não há resultados disponíveis.

  • Enviar várias consultas e aguardar a conclusão do lote inteiro: use BatchExecuteStatement com WaitTimeSeconds. A chamada permanece aberta até que todas as instruções secundárias sejam concluídas e retorna o ID principal do lote e o status geral.

  • Enviar várias consultas e status de pesquisa longa para uma instrução secundária: use DescribeStatement ou GetStatementResult com o ID da instrução secundária e WaitTimeSeconds. Retorna assim que a instrução secundária termina, sem esperar pelo resto do lote.