Usa el tiempo de ejecución avanzado de BigQuery
El tiempo de ejecución avanzado de BigQuery es un conjunto de mejoras de rendimiento diseñadas para acelerar automáticamente las cargas de trabajo analíticas sin necesidad de que el usuario realice acciones ni cambie el código. En este documento, se describen estas mejoras de rendimiento, incluidas la vectorización mejorada y las optimizaciones de consultas breves.
Roles y permisos
Para obtener los permisos que necesitas para especificar un parámetro de configuración, pídele a tu administrador que te otorgue el rol de IAM de administrador de BigQuery (roles/bigquery.admin) en tu proyecto o organización.
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
También puedes obtener los permisos necesarios a través de roles personalizados o cualquier otro rol predefinido.
Vectorización mejorada
La ejecución vectorizada es un modelo de procesamiento de consultas que opera en columnas de datos en bloques que se alinean con el tamaño de la caché de la CPU y usa instrucciones de instrucción única, múltiples datos (SIMD). La vectorización mejorada extiende la ejecución de consultas vectorizadas en BigQuery a los siguientes aspectos del procesamiento de consultas:
- Al aprovechar las codificaciones de datos especializadas dentro del formato de almacenamiento de Capacitor, las operaciones de evaluación de filtros se pueden ejecutar en los datos codificados.
- Las codificaciones especializadas se propagan a través del plan de consulta, lo que permite procesar más datos mientras aún están codificados.
- Cuando se implementa el plegado de expresiones para evaluar funciones determinísticas y expresiones constantes, BigQuery puede simplificar predicados complejos en valores constantes.
Optimizaciones de consultas cortas
Por lo general, BigQuery ejecuta consultas en un entorno distribuido con una capa intermedia de Shuffle. Las optimizaciones de consultas cortas identifican de forma dinámica las consultas que se pueden ejecutar como una sola etapa, lo que reduce la latencia y el consumo de ranuras. Las codificaciones especializadas se pueden usar de manera más eficaz cuando una consulta se ejecuta en una sola etapa. Estas optimizaciones son más eficaces cuando se usan con el modo opcional de creación de trabajos, que minimiza la latencia del inicio, el mantenimiento y la recuperación de resultados de los trabajos.
La elegibilidad para las optimizaciones de consultas cortas es dinámica y se ve influenciada por los siguientes factores:
- Es el tamaño previsto del análisis de datos.
- La cantidad de movimiento de datos requerido
- Es la selectividad de los filtros de búsqueda.
- El tipo y el diseño físico de los datos en el almacenamiento.
- Es la estructura general de la búsqueda.
- Las estadísticas históricas de las ejecuciones de consultas anteriores.
Habilita el entorno de ejecución avanzado
Entre el 15 de septiembre de 2025 y principios de 2026, BigQuery comenzará a usar el tiempo de ejecución avanzado como el tiempo de ejecución predeterminado para todos los proyectos. Para habilitar el tiempo de ejecución avanzado en un proyecto o una organización existentes, usa la instrucción ALTER PROJECT o ALTER ORGANIZATION para cambiar la configuración predeterminada. En la instrucción, establece el argumento query_runtime en 'advanced'. Por ejemplo:
ALTER PROJECTPROJECT_NAMESET OPTIONS ( `region-LOCATION.query_runtime` = 'advanced' );
Reemplaza lo siguiente:
PROJECT_NAME: el nombre del proyectoLOCATION: Es la ubicación en la que los trabajos deben intentar usar el tiempo de ejecución avanzado.
El cambio puede tardar varios minutos en aplicarse.
Una vez que habilites el entorno de ejecución avanzado, las consultas aptas del proyecto o la organización usarán el entorno de ejecución avanzado, independientemente del usuario que haya creado el trabajo de la consulta.
Estima el impacto del tiempo de ejecución avanzado
Para estimar el impacto del tiempo de ejecución avanzado, puedes usar la siguiente consulta en SQL para identificar las consultas del proyecto con la mayor mejora estimada en el tiempo de ejecución:
WITH
jobs AS (
SELECT
*,
query_info.query_hashes.normalized_literals AS query_hash,
TIMESTAMP_DIFF(end_time, start_time, MILLISECOND) AS elapsed_ms,
EXISTS(
SELECT 1
FROM UNNEST(JSON_QUERY_ARRAY(query_info.optimization_details.optimizations)) AS o
WHERE JSON_VALUE(o, '$.enhanced_vectorization') = 'applied'
) AS has_advanced_runtime
FROM region-LOCATION.INFORMATION_SCHEMA.JOBS_BY_PROJECT
WHERE EXTRACT(DATE FROM creation_time) > DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY)
),
most_recent_jobs_without_advanced_runtime AS (
SELECT *
FROM jobs
WHERE NOT has_advanced_runtime
QUALIFY ROW_NUMBER() OVER (PARTITION BY query_hash ORDER BY end_time DESC) = 1
)
SELECT
job.job_id,
100 * SAFE_DIVIDE(
original_job.elapsed_ms - job.elapsed_ms,
original_job.elapsed_ms) AS percent_execution_time_saved,
job.elapsed_ms AS new_elapsed_ms,
original_job.elapsed_ms AS original_elapsed_ms,
FROM jobs AS job
INNER JOIN most_recent_jobs_without_advanced_runtime AS original_job
USING (query_hash)
WHERE
job.has_advanced_runtime
AND original_job.end_time < job.start_time
ORDER BY percent_execution_time_saved DESC
LIMIT 10;
Reemplaza lo siguiente:
LOCATION: Es la ubicación en la que se debe medir el rendimiento del trabajo.
Si se habilitó y aplicó el tiempo de ejecución avanzado, los resultados de esta consulta pueden ser similares a los siguientes:
/*--------------+----------------------------+----------------+---------------------*
| job_id | percent_elapsed_time_saved | new_elapsed_ms | original_elapsed_ms |
+--------------+----------------------------+----------------+---------------------+
| sample_job1 | 45.38834951456311 | 225 | 412 |
| sample_job2 | 45.19480519480519 | 211 | 385 |
| sample_job3 | 33.246753246753244 | 257 | 385 |
| sample_job4 | 29.28802588996764 | 1311 | 1854 |
| sample_job5 | 28.18181818181818 | 1027 | 1430 |
| sample_job6 | 25.804195804195807 | 1061 | 1430 |
| sample_job7 | 25.734265734265733 | 1062 | 1430 |
| sample_job8 | 25.454545454545453 | 1066 | 1430 |
| sample_job9 | 25.384615384615383 | 1067 | 1430 |
| sample_job10 | 25.034965034965033 | 1072 | 1430 |
*--------------+----------------------------+----------------+---------------------*/
Los resultados de esta consulta son solo una estimación del impacto del tiempo de ejecución avanzado. Muchos factores pueden influir en el rendimiento de las consultas, incluidos, sin limitaciones, la disponibilidad de los espacios, el cambio en los datos a lo largo del tiempo, las definiciones de vistas o UDF, y las diferencias en los valores de los parámetros de consulta.
Si los resultados de esta consulta están vacíos, significa que ninguna tarea usó el tiempo de ejecución avanzado o que todas las tareas se optimizaron hace más de 30 días.
Esta consulta se puede aplicar a otras métricas de rendimiento de consultas, como total_slot_ms y total_bytes_billed. Para obtener más información, consulta el esquema de INFORMATION_SCHEMA.JOBS_BY_PROJECT.