Usa colas de consultas

BigQuery determina de forma automática la cantidad de consultas que se pueden ejecutar de forma simultánea, lo que se denomina simultaneidad dinámica. Las consultas adicionales se ponen en cola hasta que los recursos de procesamiento están disponibles. En este documento, se explica cómo controlar el objetivo de simultaneidad máxima y configurar el tiempo de espera de la cola para consultas interactivas y por lotes.

Descripción general

BigQuery determina de forma dinámica la cantidad de consultas que se pueden ejecutar de forma simultánea según los recursos de procesamiento disponibles. La cantidad de consultas que se pueden ejecutar de forma simultánea se calcula por proyecto a pedido o por reserva. Las consultas adicionales se colocan en una cola hasta que haya suficiente capacidad disponible para comenzar la ejecución. La longitud máxima de la cola es de 1,000 consultas interactivas y 20,000 consultas por lotes por proyecto y por región, sin importar si el proyecto es a pedido o usa una reserva. En el siguiente ejemplo, se muestra el comportamiento de un proyecto según demanda cuando la simultaneidad de consultas calculada es 202:

202 consultas simultáneas, seguidas de las consultas en cola, seguidas de consultas que muestran un error

Para las reservas, tienes la opción de establecer el objetivo de simultaneidad máxima, un límite superior en la cantidad de consultas que se pueden ejecutar de forma simultánea en una reserva, para garantizar que cada una a la consulta se le asigna una cantidad mínima de ranuras. No puedes especificar un objetivo de simultaneidad máxima para un proyecto a pedido; siempre se procesa de forma dinámica.

Comportamiento de las colas

BigQuery aplica la programación equilibrada para garantizar que ningún proyecto individual pueda consumir todas las ranuras de una reserva.

Las consultas de proyectos que tienen el porcentaje más bajo de simultaneidad se quitan primero. Durante la ejecución, las ranuras se distribuyen de manera equitativa entre los proyectos antes de distribuirse entre los trabajos de un proyecto.

Por ejemplo, supongamos que tienes una reserva asignada a dos proyectos: A y B. BigQuery calcula 5 para la simultaneidad de la reserva. El proyecto A tiene cuatro consultas que se ejecutan en simultáneo, el proyecto B tiene una consulta en ejecución y otras consultas están en cola. Una consulta del proyecto B se sacaría de la cola primero, incluso si se envió después de la consulta del proyecto A. Una vez que una consulta comienza a ejecutarse, recibe un porcentaje justo de ranuras en la reserva compartida.

Además de la cantidad total de consultas simultáneas, BigQuery determina de forma dinámica la cantidad máxima de consultas por lotes simultáneas que se ejecutarán por proyecto o reserva según demanda. Si la cantidad de consultas por lotes que se ejecutan en simultáneo alcanza este máximo, las consultas interactivas se priorizan incluso si se enviaron más adelante.

Cuando borras una reserva, se agota el tiempo de espera de todas las consultas en cola. Cuando un proyecto asignado a una reserva se reasigna a otra reserva, todas las solicitudes que están en cola o en ejecución continúan estándolo en la reserva anterior, mientras que todas las solicitudes nuevas se dirigen a la reserva nueva. Cuando un proyecto asignado a una reserva se quita de esta, las consultas en ejecución continúan en la reserva, mientras que las solicitudes nuevas y en cola se ejecutan con el modelo según demanda. De manera opcional, puedes cancelar los trabajos de consulta individuales en ejecución o en cola.

Controla el tiempo de espera de la cola

Para controlar el tiempo de espera de la cola de consultas interactivas o por lotes, usa la declaración ALTER PROJECT SET OPTIONS o la declaración ALTER ORGANIZATION SET OPTIONS para establecer los campos default_interactive_query_queue_timeout_ms o default_batch_query_queue_timeout_ms en tus proyectos o en la configuración predeterminada de tu organización.

Para ver el tiempo de espera de la cola para las consultas interactivas o por lotes en tu proyecto, consulta la vistaINFORMATION_SCHEMA.EFFECTIVE_PROJECT_OPTIONS.

Para desactivar la cola, establece el tiempo de espera de la cola en -1. Si alcanzas tu simultaneidad máxima de consultas, las consultas adicionales fallan con un error ADMISSION_DENIED.

Establece el objetivo de simultaneidad máxima

Puedes configurar el objetivo de simultaneidad máxima de forma manual cuando creas una reserva. De forma predeterminada, el objetivo de simultaneidad máxima es cero, lo que significa que BigQuery determina de forma dinámica la simultaneidad según los recursos disponibles. De lo contrario, si estableces un objetivo distinto de cero, el objetivo de simultaneidad máxima especifica un límite superior para la cantidad de consultas que se ejecutan simultáneamente en una reserva, lo que garantiza una cantidad mínima de capacidad de ranuras disponible para cada consulta que se ejecuta.

El aumento de objetivo de simultaneidad máxima no garantiza que se ejecuten más consultas de forma simultánea. La simultaneidad real depende de los recursos de procesamiento disponibles, que se pueden aumentar a través de la adición de más ranuras a tu reserva.

Roles obligatorios

Para obtener el permiso que necesitas para configurar la simultaneidad en una reserva nueva, pídele a tu administrador que te otorgue el rol Editor de recursos de BigQuery (roles/bigquery.resourceEditor) de IAM en el proyecto de administración que mantiene la propiedad de los compromisos. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

Este rol predefinido contiene el permiso bigquery.reservations.create, que se requiere para configurar la simultaneidad en una reserva nueva.

También puedes obtener este permiso con roles personalizados o con otros roles predefinidos.

Para obtener más información de los roles de IAM en BigQuery, consulta Funciones y permisos predefinidos.

Establece el objetivo de simultaneidad máxima para una reserva

Elige una de las opciones siguientes:

Console

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a BigQuery

  2. En el menú de navegación, ve a la sección Administración de capacidad.

  3. Haz clic en Crear reserva.

  4. Elige la configuración de reserva.

  5. Para expandir la sección Configuración avanzada, haz clic en la flecha de expansión .

  6. Para configurar la simultaneidad de los trabajos de destino, haz clic en el botón de activación Anular la simultaneidad automática del trabajo de destino y, luego, escribe la simultaneidad de los trabajos de destino.

  7. Haz clic en Guardar.

SQL

Para establecer el objetivo de simultaneidad máxima para una reserva nueva, usa la declaración DDL CREATE RESERVATION y configura el campo target_job_concurrency.

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a BigQuery

  2. En el editor de consultas, escribe la siguiente oración:

    CREATE RESERVATION `ADMIN_PROJECT_ID.LOCATION.RESERVATION_NAME`
      OPTIONS (
        target_job_concurrency = CONCURRENCY);

    Reemplaza lo siguiente:

    • ADMIN_PROJECT_ID: Es el proyecto que posee la reserva
    • LOCATION: Es la ubicación de la reserva, como region-us
    • RESERVATION_NAME: por el nombre de la reserva
    • CONCURRENCY: Es el objetivo de simultaneidad máxima.

  3. Haz clic en Ejecutar.

Si deseas obtener información sobre cómo ejecutar consultas, visita Ejecuta una consulta interactiva.

bq

Para configurar el objetivo de simultaneidad máxima de una reserva nueva, ejecuta el comando bq mk:

bq mk \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION \
    --target_job_concurrency=CONCURRENCY \
    --reservation \
    RESERVATION_NAME

Reemplaza lo siguiente:

  • ADMIN_PROJECT_ID: Es el proyecto que posee la reserva
  • LOCATION: Es la ubicación de la reserva.
  • CONCURRENCY: Es el objetivo de simultaneidad máxima.
  • RESERVATION_NAME: El nombre de la reserva

API

Para configurar el objetivo de simultaneidad máxima en la API de BigQuery Reservation, configura el campo concurrency en el recurso de reserva y llama al método CreateReservationRequest.

Actualiza el objetivo de simultaneidad máxima

Puedes actualizar el objetivo de simultaneidad máxima de una reserva en cualquier momento. Sin embargo, aumentar el objetivo no garantiza que se ejecuten más consultas de forma simultánea. La simultaneidad real depende de los recursos de procesamiento disponibles. Si reduces el objetivo de simultaneidad máxima, las consultas en ejecución activamente no se ven afectadas y las consultas en cola no se ejecutarán hasta que la cantidad de consultas simultáneas sea inferior al objetivo nuevo.

Si configuras el objetivo de simultaneidad máxima en 0, BigQuery determina de forma dinámica la simultaneidad según los recursos disponibles (el comportamiento predeterminado).

Roles obligatorios

Para obtener el permiso que necesitas para actualizar el objetivo de simultaneidad máxima de una reserva, pídele a tu administrador que te otorgue el rol Editor de recursos de BigQuery (roles/bigquery.resourceEditor) de IAM en el proyecto de administración que mantiene la propiedad de los compromisos. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

Este rol predefinido contiene el permiso bigquery.reservations.update, que se requiere para actualizar el objetivo de simultaneidad máxima de una reserva.

También puedes obtener este permiso con roles personalizados o con otros roles predefinidos.

Para obtener más información de los roles de IAM en BigQuery, consulta Funciones y permisos predefinidos.

Actualiza el objetivo de simultaneidad máxima de una reserva

Elige una de las opciones siguientes:

Console

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a BigQuery

  2. En el menú de navegación, ve a la sección Administración de capacidad.

  3. Haz clic en la pestaña Reservas de ranuras.

  4. Busca la reserva que deseas actualizar.

  5. Expande la opción Actions.

  6. Haz clic en Editar.

  7. Para expandir la sección Configuración avanzada, haz clic en la flecha de expansión .

  8. Para configurar la simultaneidad de los trabajos de destino, haz clic en el botón de activación Anular la simultaneidad automática del trabajo de destino y, luego, escribe la simultaneidad de los trabajos de destino.

  9. Haz clic en Guardar.

SQL

Para actualizar el objetivo de simultaneidad máxima de una reserva existente, usa la declaración DDL ALTER RESERVATION y configura el campo target_job_concurrency.

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a BigQuery

  2. En el editor de consultas, escribe la siguiente oración:

    ALTER RESERVATION `ADMIN_PROJECT_ID.LOCATION.RESERVATION_NAME`
    SET OPTIONS (
      target_job_concurrency = CONCURRENCY);

    Reemplaza lo siguiente:

    • ADMIN_PROJECT_ID: Es el proyecto que posee la reserva
    • LOCATION: Es la ubicación de la reserva, como region-us
    • RESERVATION_NAME: por el nombre de la reserva
    • CONCURRENCY: Es el objetivo de simultaneidad máxima.

  3. Haz clic en Ejecutar.

Si deseas obtener información sobre cómo ejecutar consultas, visita Ejecuta una consulta interactiva.

bq

Para actualizar el objetivo de simultaneidad máxima de una reserva existente, ejecuta el comando bq update:

bq update \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION \
    --target_job_concurrency=CONCURRENCY \
    --reservation \
    RESERVATION_NAME

Reemplaza lo siguiente:

  • ADMIN_PROJECT_ID: Es el proyecto que posee la reserva
  • LOCATION: Es la ubicación de la reserva.
  • CONCURRENCY: Es el objetivo de simultaneidad máxima.
  • RESERVATION_NAME: El nombre de la reserva

API

Para actualizar el objetivo de simultaneidad máxima en la API de BigQuery Reservation, configura el campo concurrency en el recurso de reserva y llama al método UpdateReservationRequest.

Supervisión

Para saber qué consultas se están ejecutando y cuáles están en cola, mira las vistas INFORMATION_SCHEMA.JOBS_BY_* y INFORMATION_SCHEMA.JOBS_TIMELINE_BY_*. El campo state se establece en RUNNING para las consultas que se ejecutan de forma activa y en PENDING para las consultas en cola.

Para ver cuántas consultas simultáneas se ejecutaron cuando se alcanzó el umbral de simultaneidad dinámico por cada segundo durante el último día, ejecuta la siguiente consulta:

SELECT
  t1.period_start,
  t1.job_count AS dynamic_concurrency_threshold
FROM (
  SELECT
    period_start,
    state,
    COUNT(DISTINCT job_id) AS job_count
  FROM
    `PROJECT_ID.REGION_ID`.INFORMATION_SCHEMA.JOBS_TIMELINE
  WHERE
    period_start BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY)
    AND CURRENT_TIMESTAMP()
    AND reservation_id = "RESERVATION_ID"
  GROUP BY
    period_start,
    state) AS t1
JOIN (
  SELECT
    period_start,
    state,
    COUNT(DISTINCT job_id) AS job_count
  FROM
    `PROJECT_ID.REGION_ID`.INFORMATION_SCHEMA.JOBS_TIMELINE
  WHERE
    state = "PENDING"
    AND period_start BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY)
    AND CURRENT_TIMESTAMP()
    AND reservation_id = "RESERVATION_ID"
  GROUP BY
    period_start,
    state
  HAVING
    COUNT(DISTINCT job_id) > 0 ) AS t2
ON
  t1.period_start = t2.period_start
WHERE
  t1.state = "RUNNING";

Reemplaza lo siguiente:

  • PROJECT_ID: Es el nombre del proyecto en el que ejecutaste las consultas
  • REGION_ID: Es la ubicación en la que se procesaron las consultas
  • RESERVATION_ID: Es el nombre de la reserva en la que se ejecutan las consultas

Puedes supervisar la longitud de la cola de consultas de tu reserva con los Gráficos de recursos administrativos de BigQuery y a través del gráfico Simultaneidad de los trabajos con la métrica Pendiente.

Longitud de la cola en los gráficos de recursos administrativos.

También puedes supervisar la longitud de la cola en Cloud Monitoring si consultas la métrica de recuento de trabajos y verificas la cantidad de trabajos en estado pendiente.

Longitud de la cola en Cloud Monitoring.

Limitaciones

  • Cada proyecto según demanda puede poner en cola hasta 1,000 consultas interactivas y 20,000 consultas por lotes a la vez. Las consultas que excedan este límite muestran un error de cuota. No puedes solicitar un aumento de estos límites.
  • Dentro de una reserva, cada proyecto asignado a esa reserva puede poner en cola hasta 1,000 consultas interactivas y 20,000 por lotes de forma simultánea. Las consultas que excedan este límite muestran un error de cuota. No puedes solicitar un aumento de estos límites.
  • De forma predeterminada, los trabajos de consulta que no han iniciado el tiempo de espera de ejecución después de 6 horas para las consultas interactivas y 24 horas para las consultas por lotes.
  • No puedes establecer el objetivo de simultaneidad máxima para consultas que se ejecutan en un proyecto a pedido.
  • No puedes establecer el objetivo de simultaneidad máxima para consultas que se ejecutan con una reserva de edición Standard. Para obtener más información sobre las ediciones, consulta Introducción a las ediciones de BigQuery.

¿Qué sigue?