Utilizza code di query

BigQuery determina automaticamente il numero di query che possono essere eseguite contemporaneamente, chiamata contemporaneità dinamica. Le query aggiuntive vengono messe in coda finché le risorse di elaborazione non diventano disponibili. Questo documento spiega come controllare la destinazione massima di contemporaneità e impostare il timeout della coda per le query interattive e batch.

Panoramica

BigQuery determina in modo dinamico il numero di query che possono essere eseguite contemporaneamente in base alle risorse di calcolo disponibili. Il numero di query che possono essere eseguite contemporaneamente viene calcolato per progetto on demand o per prenotazione. Ulteriori query vengono messe in coda finché non è disponibile capacità sufficiente per iniziare l'esecuzione. La lunghezza della coda è limitata a 1000 query interattive e 20.000 query batch per progetto per regione, a prescindere dal fatto che il progetto sia on demand o utilizzi una prenotazione. L'esempio seguente mostra il comportamento per un progetto on demand quando la contemporaneità delle query calcolate è 202:

202 query in parallelo, seguite da query in coda, seguite da query che restituiscono un errore.

Per le prenotazioni puoi impostare il target di contemporaneità massimo, ovvero un limite superiore al numero di query che possono essere eseguite contemporaneamente in una prenotazione, per garantire che ogni query venga allocata un numero minimo di slot. Non puoi specificare una destinazione di contemporaneità massima per un progetto on demand; questo viene sempre calcolato in modo dinamico.

Comportamento di coda

BigQuery applica una equa pianificazione per garantire che nessun singolo progetto possa utilizzare tutti gli slot in una prenotazione.

Le query dei progetti che hanno la quota di contemporaneità più bassa vengono rimosse prima in coda. Durante l'esecuzione, gli slot sono distribuiti equamente tra i progetti prima di essere distribuiti tra i job all'interno di un progetto.

Ad esempio, supponiamo che tu abbia una prenotazione assegnata a due progetti: A e B. BigQuery ne calcola 5 per la contemporaneità della prenotazione. Il progetto A ha quattro query in esecuzione contemporanea, il progetto B ha una query in esecuzione e le altre query sono in coda. Una query del progetto B verrebbe rimossa prima in coda anche se è stata inviata dopo la query del progetto A. Dopo che una query inizia l'esecuzione, riceve una buona quota di slot nella prenotazione condivisa.

I job di query in un progetto on demand vengono eseguiti nell'ordine in cui sono stati inviati.

BigQuery determina in modo dinamico il numero massimo di query batch eseguite contemporaneamente per progetto.

Quando elimini una prenotazione, tutte le query in coda scadono. Quando un progetto assegnato a una prenotazione viene riassegnato a un'altra prenotazione, tutte le richieste in coda o in esecuzione continuano a farlo nella precedente prenotazione, mentre tutte le nuove richieste vanno alla nuova prenotazione. Quando un progetto assegnato a una prenotazione viene rimosso dalla prenotazione, le query in esecuzione continuano nella prenotazione mentre le richieste nuove e in coda vengono eseguite utilizzando il modello on demand. Facoltativamente, puoi annullare singoli job di query in esecuzione o in coda.

Controlla il timeout della coda

Per controllare il timeout della coda per le query interattive o batch, utilizza l'istruzione ALTER PROJECT SET OPTIONS o l'istruzione ALTER ORGANIZATION SET OPTIONS per impostare i campi default_interactive_query_queue_timeout_ms o default_batch_query_queue_timeout_ms nella configurazione predefinita del progetto o dell'organizzazione.

Per visualizzare il timeout della coda per le query interattive o batch nel progetto, esegui una query nella vista INFORMATION_SCHEMA.EFFECTIVE_PROJECT_OPTIONS.

Per disattivare la coda, imposta il timeout della coda su -1. Se raggiungi la contemporaneità massima delle query, le query aggiuntive non vanno a buon fine e viene generato un errore ADMISSION_DENIED.

Imposta la destinazione massima di contemporaneità

Puoi impostare manualmente il target di contemporaneità massima quando crei una prenotazione. Per impostazione predefinita, il target della contemporaneità massima è zero, il che significa che BigQuery determina dinamicamente la contemporaneità in base alle risorse disponibili. Altrimenti, se imposti una destinazione diversa da zero, la destinazione massima di contemporaneità specifica un limite superiore al numero di query eseguite contemporaneamente in una prenotazione, garantendo una quantità minima di capacità di slot disponibile per ogni query eseguita.

L'aumento del target di contemporaneità massima non garantisce che vengano eseguite più query contemporaneamente. La contemporaneità effettiva dipende dalle risorse di calcolo disponibili, che possono essere aumentate aggiungendo altri slot alla prenotazione.

Ruoli obbligatori

Per ottenere l'autorizzazione necessaria per impostare la contemporaneità in una nuova prenotazione, chiedi all'amministratore di concederti il ruolo IAM Editor risorse BigQuery (roles/bigquery.resourceEditor) sul progetto di amministrazione che mantiene la proprietà degli impegni. Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.

Questo ruolo predefinito contiene l'autorizzazione bigquery.reservations.create, necessaria per impostare la contemporaneità in una nuova prenotazione.

Potresti riuscire a ottenere questa autorizzazione anche con i ruoli personalizzati o altri ruoli predefiniti.

Per ulteriori informazioni sui ruoli IAM in BigQuery, vedi Ruoli e autorizzazioni predefiniti.

Imposta la destinazione massima di contemporaneità per una prenotazione

Seleziona una delle seguenti opzioni:

Console

  1. Nella console Google Cloud, vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nel menu di navigazione, vai alla sezione Gestione della capacità.

  3. Fai clic su Crea prenotazione.

  4. Seleziona le impostazioni di prenotazione.

  5. Per espandere la sezione Impostazioni avanzate, fai clic sulla freccia di espansione.

  6. Per impostare la contemporaneità dei job di destinazione, fai clic sul pulsante di attivazione/disattivazione Ignora la contemporaneità dei job di destinazione automatica per attivare e inserire il valore in Contemporaneità target dei job.

  7. Fai clic su Salva.

SQL

Per impostare il target di contemporaneità massimo per una nuova prenotazione, utilizza l'istruzione DDL CREATE RESERVATION e imposta il campo target_job_concurrency.

  1. Nella console Google Cloud, vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nell'editor query, inserisci la seguente istruzione:

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

    Sostituisci quanto segue:

    • ADMIN_PROJECT_ID: il progetto proprietario della prenotazione
    • LOCATION: il luogo della prenotazione, ad esempio region-us
    • RESERVATION_NAME: il nome della prenotazione
    • CONCURRENCY: target di contemporaneità massima

  3. Fai clic su Esegui.

Per ulteriori informazioni su come eseguire le query, vedi Eseguire una query interattiva.

bq

Per impostare la destinazione massima di contemporaneità per una nuova prenotazione, esegui il comando bq mk:

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

Sostituisci quanto segue:

  • ADMIN_PROJECT_ID: il progetto proprietario della prenotazione
  • LOCATION: il luogo della prenotazione
  • CONCURRENCY: target di contemporaneità massima
  • RESERVATION_NAME: il nome della prenotazione

API

Per impostare il target di contemporaneità massima nell'API BigQuery Reservation, imposta il campo concurrency nella risorsa di prenotazione e chiama il metodo CreateReservationRequest.

Aggiorna la destinazione massima di contemporaneità

Puoi aggiornare la destinazione massima di contemporaneità per una prenotazione in qualsiasi momento. Tuttavia, l'aumento del target non garantisce che vengano eseguite più query contemporaneamente. La contemporaneità effettiva dipende dalle risorse di calcolo disponibili. Se riduci il target di contemporaneità massima, le query in esecuzione attiva non sono interessate e le query in coda non vengono eseguite finché il numero di query in parallelo non scende al di sotto del nuovo target.

Se imposti il target di contemporaneità massima su 0, BigQuery determina dinamicamente la contemporaneità in base alle risorse disponibili (il comportamento predefinito).

Ruoli obbligatori

Per ottenere l'autorizzazione necessaria per aggiornare la destinazione massima di contemporaneità per una prenotazione, chiedi all'amministratore di concederti il ruolo IAM Editor risorse BigQuery (roles/bigquery.resourceEditor) nel progetto di amministrazione che mantiene la proprietà degli impegni. Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.

Questo ruolo predefinito contiene l'autorizzazione bigquery.reservations.update, necessaria per aggiornare la destinazione massima di contemporaneità per una prenotazione.

Potresti riuscire a ottenere questa autorizzazione anche con i ruoli personalizzati o altri ruoli predefiniti.

Per ulteriori informazioni sui ruoli IAM in BigQuery, vedi Ruoli e autorizzazioni predefiniti.

Aggiorna la destinazione massima di contemporaneità per una prenotazione

Seleziona una delle seguenti opzioni:

Console

  1. Nella console Google Cloud, vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nel menu di navigazione, vai alla sezione Gestione della capacità.

  3. Fai clic sulla scheda Prenotazioni slot.

  4. Trova la prenotazione da aggiornare.

  5. Espandi l'opzione Azioni.

  6. Fai clic su Modifica.

  7. Per espandere la sezione Impostazioni avanzate, fai clic sulla freccia di espansione.

  8. Per impostare la contemporaneità dei job di destinazione, fai clic sul pulsante di attivazione/disattivazione Ignora la contemporaneità dei job di destinazione automatica per attivare e inserire il valore in Contemporaneità target dei job.

  9. Fai clic su Salva.

SQL

Per aggiornare il target di contemporaneità massima per una prenotazione esistente, utilizza l'istruzione DDL ALTER RESERVATION e imposta il campo target_job_concurrency.

  1. Nella console Google Cloud, vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nell'editor query, inserisci la seguente istruzione:

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

    Sostituisci quanto segue:

    • ADMIN_PROJECT_ID: il progetto proprietario della prenotazione
    • LOCATION: il luogo della prenotazione, ad esempio region-us
    • RESERVATION_NAME: il nome della prenotazione
    • CONCURRENCY: target di contemporaneità massima

  3. Fai clic su Esegui.

Per ulteriori informazioni su come eseguire le query, vedi Eseguire una query interattiva.

bq

Per aggiornare la destinazione massima di contemporaneità per una prenotazione esistente, esegui il comando bq update:

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

Sostituisci quanto segue:

  • ADMIN_PROJECT_ID: il progetto proprietario della prenotazione
  • LOCATION: il luogo della prenotazione
  • CONCURRENCY: target di contemporaneità massima
  • RESERVATION_NAME: il nome della prenotazione

API

Per aggiornare il target di contemporaneità massima nell'API BigQuery Reservation, imposta il campo concurrency nella risorsa di prenotazione e chiama il metodo UpdateReservationRequest.

Monitoraggio

Per individuare le query in esecuzione e quelle in coda, controlla le visualizzazioni INFORMATION_SCHEMA.JOBS_BY_* e INFORMATION_SCHEMA.JOBS_TIMELINE_BY_*. Il campo state è impostato su RUNNING per le query in esecuzione attiva e su PENDING per le query in coda.

Per visualizzare quante query in parallelo sono state eseguite quando è stata raggiunta la soglia di contemporaneità dinamica per ogni secondo nell'ultimo giorno, esegui questa query:

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

Sostituisci quanto segue:

  • PROJECT_ID: il nome del progetto in cui hai eseguito le query
  • REGION_ID: località in cui sono state elaborate le query
  • RESERVATION_ID: il nome della prenotazione in cui sono eseguite le query

Puoi monitorare la lunghezza della coda di query per la prenotazione utilizzando i grafici delle risorse amministrative di BigQuery e selezionando il grafico Contemporaneità job con la metrica In attesa.

Lunghezza della coda nei grafici delle risorse amministrative.

Puoi anche monitorare la lunghezza della coda in Cloud Monitoring visualizzando la metrica conteggio job e filtrando in base al numero di job nello stato in attesa.

Lunghezza coda in Cloud Monitoring.

Limitazioni

  • Ogni progetto on demand può aggiungere alla coda fino a 1000 query interattive e 20.000 query in batch alla volta. Le query che superano questo limite restituiscono un errore di quota. Non puoi richiedere un aumento di questi limiti.
  • All'interno di una prenotazione, ogni progetto assegnato alla prenotazione può aggiungere alla coda fino a 1000 query interattive e 20.000 query batch alla volta. Le query che superano questo limite restituiscono un errore di quota. Non puoi richiedere un aumento di questi limiti.
  • Per impostazione predefinita, i job di query che non hanno iniziato l'esecuzione scadono dopo 6 ore per le query interattive e 24 ore per le query in batch.
  • Non puoi impostare la destinazione di contemporaneità massima per le query in esecuzione in un progetto on demand.
  • Non puoi impostare la destinazione di contemporaneità massima per le query in esecuzione con una prenotazione della versione Standard. Per ulteriori informazioni sulle versioni, consulta Introduzione alle versioni BigQuery.

Passaggi successivi