Utilizza le ottimizzazioni basate sulla cronologia

Per ricevere assistenza durante l'anteprima, invia un'email all'indirizzo bigquery-history-based-optimization-support@google.com.

Questa guida descrive come abilitare, disabilitare e analizzare le ottimizzazioni basate sulla cronologia per le query.

Informazioni sulle ottimizzazioni basate sulla cronologia

Le ottimizzazioni basate sulla cronologia utilizzano le informazioni di esecuzioni già completate di query simili per applicare ulteriori ottimizzazioni e migliorare ulteriormente le prestazioni delle query, come il tempo di slot utilizzato e la latenza delle query. Ad esempio, quando applichi l'ottimizzazione basata sulla cronologia, la prima esecuzione della query potrebbe richiedere 60 secondi, mentre la seconda potrebbe richiedere solo 30 secondi se è stata identificata un'ottimizzazione basata sulla cronologia. Questo processo continua fino a quando non ci sono ulteriori ottimizzazioni da aggiungere.

Di seguito è riportato un esempio di come funzionano le ottimizzazioni basate sulla cronologia con BigQuery:

Conteggio esecuzioni Tempo slot query utilizzato Note
1 60 Esecuzione originale.
2 30 Prima ottimizzazione basata sulla cronologia applicata.
3 20 Seconda ottimizzazione basata sulla cronologia applicata.
4 21 Non è possibile applicare ulteriori ottimizzazioni basate sulla cronologia.
5 19 Non è possibile applicare ulteriori ottimizzazioni basate sulla cronologia.
6 20 Non è possibile applicare ulteriori ottimizzazioni basate sulla cronologia.

Le ottimizzazioni basate sulla cronologia vengono applicate solo quando c'è un'alta certezza che ci sarà un impatto positivo sulle prestazioni delle query. Inoltre, quando un'ottimizzazione non migliora in modo significativo le prestazioni delle query, viene revocata e non utilizzata nelle esecuzioni future della query.

Attiva le ottimizzazioni basate sulla cronologia

Per utilizzare le ottimizzazioni basate sulla cronologia in un progetto, includi il seguente parametro nell'istruzione ALTER PROJECT: default_query_optimizer_options = 'adaptive=on'

Esempio:

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

Disattiva le ottimizzazioni basate sulla cronologia

Per disabilitare le ottimizzazioni basate sulla cronologia in un progetto, includi il parametro default_query_optimizer_options = 'adaptive=off' nell'istruzione ALTER PROJECT.

Esempio:

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

Esaminare le ottimizzazioni basate sulla cronologia di un job

Per esaminare le ottimizzazioni basate sulla cronologia di un job, puoi utilizzare una query SQL o una chiamata al metodo dell'API REST.

SQL

Puoi utilizzare una query per ottenere le ottimizzazioni basate sulla cronologia di un job. La query deve includere INFORMATION_SCHEMA.JOBS_BY_PROJECT e il nome della colonna query_info.optimization_details.

Nell'esempio seguente, i dettagli di ottimizzazione vengono restituiti per un job denominato sample_job. Se non è stata applicata alcuna ottimizzazione basata sulla cronologia, viene prodotto NULL per 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;

I risultati sono simili ai seguenti:

-- 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

Per ottenere i dettagli di ottimizzazione di un job, puoi chiamare il metodo jobs.get.

Nell'esempio seguente, il metodo jobs.get restituisce i dettagli di ottimizzazione (optimizationDetails) nella risposta completa:

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

I risultati sono simili ai seguenti:

-- 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"
            }
          ]
        }
      }
    }
  }
}

Ruoli e autorizzazioni

  • Per attivare le ottimizzazioni basate sulla cronologia, devi disporre delle autorizzazioni necessarie per creare configurazioni predefinite di BigQuery, dopodiché devi utilizzare l'istruzione ALTER PROJECT per abilitare le ottimizzazioni basate sulla cronologia. Una volta abilitate le ottimizzazioni basate sulla cronologia, tutti i job nel progetto utilizzano le ottimizzazioni basate sulla cronologia, indipendentemente dall'utente che ha creato il job. Per scoprire di più sulle autorizzazioni richieste per le configurazioni predefinite, consulta Autorizzazioni obbligatorie per le configurazioni predefinite. Per abilitare le ottimizzazioni basate sulla cronologia, consulta Abilitare le ottimizzazioni basate sulla cronologia.

  • Per esaminare le ottimizzazioni basate sulla cronologia di un job che utilizza la visualizzazione INFORMATION_SCHEMA.JOBS, devi avere il ruolo richiesto. Per ulteriori informazioni, consulta la sezione Ruolo obbligatorio per la vista INFORMATION_SCHEMA.JOBS.