Usa optimizaciones basadas en el historial

Para obtener asistencia durante la vista previa, envía un correo electrónico a bigquery-history-based-optimization-support@google.com.

En esta guía, se describe cómo habilitar, inhabilitar y analizar optimizaciones basadas en el historial para consultas.

Acerca de las optimizaciones basadas en el historial

Las optimizaciones basadas en el historial usan información de ejecuciones ya completadas de consultas similares para aplicar optimizaciones adicionales y mejorar aún más el rendimiento de las consultas, como el tiempo de ranura consumido y la latencia de la consulta. Por ejemplo, cuando aplicas la optimización basada en el historial, la primera ejecución de la consulta puede tardar 60 segundos, pero la segunda ejecución de la consulta puede tardar solo 30 segundos si se identificó una optimización basada en el historial. Este proceso continúa hasta que no hay optimizaciones adicionales que agregar.

El siguiente es un ejemplo de cómo funcionan las optimizaciones basadas en el historial con BigQuery:

Cantidad de ejecuciones Tiempo de ranura de consulta consumido Notas
1 60 Ejecución original.
2 30 Se aplicó la primera optimización basada en el historial.
3 20 Se aplicó la segunda optimización basada en el historial.
4 21 No hay optimizaciones adicionales basadas en el historial que se apliquen.
5 19 No hay optimizaciones adicionales basadas en el historial que se apliquen.
6 20 No hay optimizaciones adicionales basadas en el historial que se apliquen.

Las optimizaciones basadas en el historial solo se aplican cuando se puede confiar en que habrá un impacto beneficioso en el rendimiento de las consultas. Además, cuando una optimización no mejora significativamente el rendimiento de las consultas, esa optimización se revoca y no se usa en ejecuciones futuras de esa consulta.

Habilita las optimizaciones basadas en el historial

Para usar optimizaciones basadas en el historial en un proyecto, incluye el siguiente parámetro en la declaración ALTER PROJECT: default_query_optimizer_options = 'adaptive=on'

Ejemplo:

ALTER PROJECT `user_project`
SET OPTIONS (
  `region-us.default_query_optimizer_options` = 'adaptive=on'
);

Inhabilita las optimizaciones basadas en el historial

Para inhabilitar las optimizaciones basadas en el historial en un proyecto, incluye el parámetro default_query_optimizer_options = 'adaptive=off' en la declaración ALTER PROJECT.

Ejemplo:

ALTER PROJECT `user_project`
SET OPTIONS (
  `region-us.default_query_optimizer_options` = 'adaptive=off'
);

Revisa las optimizaciones basadas en el historial de un trabajo

Para revisar las optimizaciones basadas en el historial de un trabajo, puedes usar una consulta de SQL o una llamada de método de la API de REST.

SQL

Puedes usar una consulta con el fin de obtener las optimizaciones basadas en el historial de un trabajo. La consulta debe incluir INFORMATION_SCHEMA.JOBS_BY_PROJECT y el nombre de la columna query_info.optimization_details.

En el siguiente ejemplo, los detalles de optimización se muestran para un trabajo llamado sample_job. Si no se aplicaron optimizaciones basadas en el historial, se produce NULL para optimization_details:

SELECT
  job_id,
  query_info.optimization_details
FROM `project_name.region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
WHERE job_id = 'sample_job'
LIMIT 1;

Los resultados son similares a los siguientes:

-- The JSON in optimization_details has been formatted for readability.
/*------------+-----------------------------------------------------------------*
 | job_id     | optimization_details                                            |
 +------------+-----------------------------------------------------------------+
 | sample_job | {                                                               |
 |            |   "optimizations": [                                            |
 |            |     {                                                           |
 |            |       "semi_join_reduction": "web_sales.web_date,RIGHT"         |
 |            |     },                                                          |
 |            |     {                                                           |
 |            |       "semi_join_reduction": "catalog_sales.catalog_date,RIGHT" |
 |            |     },                                                          |
 |            |     {                                                           |
 |            |       "semi_join_reduction": "store_sales.store_date,RIGHT"     |
 |            |     },                                                          |
 |            |     {                                                           |
 |            |       "join_commutation": "web_returns.web_item"                |
 |            |     },                                                          |
 |            |     {                                                           |
 |            |       "parallelism_adjustment": "applied"                       |
 |            |     },                                                          |
 |            |   ]                                                             |
 |            | }                                                               |
 *------------+-----------------------------------------------------------------*/

API

Para obtener los detalles de optimización de un trabajo, puedes llamar al método jobs.get.

En el siguiente ejemplo, el método jobs.get muestra los detalles de optimización (optimizationDetails) en la respuesta completa:

{
  "jobReference": {
    "projectId": "myProject",
    "jobId": "sample_job"
  }
}

Los resultados son similares a los siguientes:

-- The unrelated parts in the full response have been removed.
{
  "jobReference": {
    "projectId": "myProject",
    "jobId": "sample_job",
    "location": "US"
  },
  "statistics": {
    "query": {
      "queryInfo": {
        "optimizationDetails": {
          "optimizations": [
            {
              "semi_join_reduction": "web_sales.web_date,RIGHT"
            },
            {
              "semi_join_reduction": "catalog_sales.catalog_date,RIGHT"
            },
            {
              "semi_join_reduction": "store_sales.store_date,RIGHT"
            },
            {
              "join_commutation": "web_returns.web_item"
            },
            {
              "parallelism_adjustment": "applied"
            }
          ]
        }
      }
    }
  }
}

Funciones y permisos

  • Para habilitar las optimizaciones basadas en el historial, debes tener los permisos necesarios para crear la configuración predeterminada de BigQuery y, luego, debes usar la declaración ALTER PROJECT para habilitar las optimizaciones basadas en el historial. Una vez que hayas habilitado las optimizaciones basadas en el historial, todos los trabajos de ese proyecto usarán optimizaciones basadas en el historial, sin importar el usuario que creó el trabajo. A fin de obtener más información sobre los permisos necesarios para la configuración predeterminada, consulta Permisos necesarios para la configuración predeterminada. Para habilitar las optimizaciones basadas en el historial, consulta Habilita las optimizaciones basadas en el historial.

  • Para revisar las optimizaciones basadas en el historial de un trabajo mediante la vista INFORMATION_SCHEMA.JOBS, debes tener el rol necesario. Si deseas obtener más información, consulta Rol necesario para la vista INFORMATION_SCHEMA.JOBS.