View a markdown version of this page

Reducción de las llamadas a la API con el sondeo largo - Amazon Redshift

Amazon Redshift dejará de admitir la creación de UDF de Python después del 30 de junio de 2026. Empezaremos a aplicarlo por fases. Para obtener más información sobre los detalles del fin de vida de Python y las opciones de migración, consulte la entrada del blog que se publicó el 30 de junio de 2025.

Reducción de las llamadas a la API con el sondeo largo

De forma predeterminada, las operaciones de la API de datos devuelven una respuesta inmediata. Si la operación va en contra de una instrucción en curso, debe sondear repetidamente hasta que la instrucción alcance un estado terminal. Con el sondeo largo, establezca WaitTimeSeconds en un valor comprendido entre 1 y 30. La API retrasará la devolución de una respuesta sincrónica hasta que la instrucción finalice o se alcance WaitTimeSeconds, lo que ocurra primero.

El sondeo largo es compatible con DescribeStatement, ExecuteStatement, BatchExecuteStatement, GetStatementResult y GetStatementResultV2.

Cuando una operación usa WaitTimeSeconds para enviar una nueva instrucción o esperar una ya existente:

  • Si la instrucción se completa dentro del tiempo de espera, la respuesta incluye el estado terminal o los datos del resultado, según la operación.

  • Si la instrucción sigue ejecutándose al expirar el tiempo de espera, la respuesta devuelve el estado actual en curso.

  • Si la instrucción ya se completó antes de que se realizara la solicitud de sondeo prolongado, la API devuelve inmediatamente el estado terminal.

  • Si WaitTimeSeconds se omite, se conserva el comportamiento asíncrono predeterminado.

Casos de uso comunes

A continuación, se muestran ejemplos de casos en los que el sondeo largo puede ser útil:

  • Envíe una consulta breve y espere a que se complete: use ExecuteStatement con WaitTimeSeconds. Cuando la consulta finaliza o el tiempo de espera expira, la respuesta devuelve la instrucción Status, RedshiftPid y HasResultSet. Para obtener los metadatos completos de la instrucción, llame a DescribeStatement. Si HasResultSet es true, llame a GetStatementResult para obtener los resultados.

  • Sondeo largo para determinar el estado: use ExecuteStatement para enviar la consulta y, a continuación, llame a DescribeStatement con WaitTimeSeconds. Cuando la consulta finaliza, DescribeStatement devuelve los metadatos completos de la instrucción, incluidos el estado, la duración y los detalles del error.

  • Sondeo largo para determinar el resultado: use ExecuteStatement para enviar la consulta y, a continuación, llame a GetStatementResult con WaitTimeSeconds. Cuando finaliza la consulta, los datos de los resultados se devuelven directamente. Si la consulta sigue ejecutándose cuando vence el tiempo de espera, se devuelve ResourceNotFoundException, lo que indica que aún no hay resultados disponibles.

  • Envíe varias consultas y espere a que se complete todo el lote: use BatchExecuteStatement con WaitTimeSeconds. La llamada permanece abierta hasta que se completen todas las subinstrucciones y devuelve el ID principal del lote y su estado general.

  • Envíe varias consultas y sondee el estado de una subinstrucción mediante sondeo largo: utilice DescribeStatement o GetStatementResult con el ID de la subinstrucción y WaitTimeSeconds. Se devuelve tan pronto como finaliza la subinstrucción, sin esperar al resto del lote.