En Bigquery no existe una función nativa como DBMS_LOCK.SLEEP (o DBMS_SESSION.SLEEP) de Oracle ("Pone un procedimiento a dormir por un tiempo específico"). Intenté usar un UDF con código JavaScript pero no funciona como esperaba: no se detiene más que forzado. ¿Puedes ayudarme a entender lo que está pasando? ¡Gracias!
CREATE TEMP FUNCTION JS_Sleep(x FLOAT64) RETURNS FLOAT64 LANGUAGE js AS r""" function sleep(milliseconds) { const date = Date.now(); let currentDate = null; do { currentDate = Date.now(); } while (currentDate - date < milliseconds); } return sleep(x); """; select JS_Sleep(10000);En BigQuery, CURRENT_TIMESTAMP() similar a Date.now() siempre devuelve el mismo valor en una sola declaración o en una sola transacción como si el tiempo se detuviera, independientemente de cuántos aparezcan en una consulta.
En mi experiencia, esto también se aplica a Date.now(). En su caso, JS_Sleep() se ejecuta para siempre porque el tiempo se detiene dentro de su consulta.