Utilizza code di query
BigQuery determina automaticamente il numero di query che possono in contemporanea, chiamata contemporaneità dinamica. Le query aggiuntive sono in coda finché le risorse di elaborazione non diventano disponibili. Questo documento spiega come per controllare la destinazione massima di contemporaneità e impostare il timeout della coda query interattive e batch.
Panoramica
BigQuery determina dinamicamente il numero di query che possono contemporaneamente in base alle risorse Google Cloud. Il numero di query che possono essere eseguite contemporaneamente viene calcolato in base a progetto on demand o per prenotazione. Vengono inserite altre query 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 query per progetto per regione, a prescindere dal fatto che il progetto sia on demand o utilizzando una prenotazione. L'esempio seguente mostra il comportamento di un progetto on demand quando la contemporaneità delle query calcolate è 202:
Per le prenotazioni puoi scegliere imposta il target di contemporaneità massimo, limite superiore al numero di query che possono essere eseguite contemporaneamente in una prenotazione, per assicurarti che ogni query è assegnato un numero minimo di slot. Non puoi specificare una contemporaneità massima target per un progetto on demand; viene sempre calcolato in modo dinamico.
Comportamento di coda
BigQuery applica una equa pianificazione per garantire in modo che nessun singolo progetto possa consumare tutti gli slot in una prenotazione.
Le query dei progetti che hanno la quota di contemporaneità più bassa vengono rimosse in coda per prima cosa. Durante gli slot vengono distribuiti equamente tra i progetti prima di tra i vari 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 contemporaneamente query, il progetto B ha una query in esecuzione e le altre sono in coda. Una query dal progetto B sarebbe è stata rimossa in coda anche se è stata inviata dopo la query del progetto A. Dopo il giorno inizia l'esecuzione di una query, riceve una buona quota di slot prenotazione.
Oltre al numero totale di query in parallelo, BigQuery determina dinamicamente il numero massimo per eseguire query batch in parallelo per progetto o prenotazione on demand. Se il numero di query batch eseguite contemporaneamente raggiunge questo valore massimo, le query interattive hanno la priorità anche se sono state inviate in un secondo momento.
Quando elimini una prenotazione, tutte le query in coda scadono. Quando un progetto assegnati a una prenotazione vengono riassegnati 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 le query continuano nella prenotazione le richieste nuove e in coda vengono eseguite utilizzando il modello on demand. In via facoltativa, annullare la corsa singolarmente o di job di query in coda.
Controlla il timeout della coda
Per controllare il timeout della coda per le query interattive o batch, utilizza
Dichiarazione ALTER PROJECT SET OPTIONS
o il
Dichiarazione ALTER ORGANIZATION SET OPTIONS
per impostare default_interactive_query_queue_timeout_ms
o
default_batch_query_queue_timeout_ms
nel campo o
configurazione predefinita dell'organizzazione.
Per visualizzare il timeout della coda per le query interattive o batch nel progetto:
interroga il
INFORMATION_SCHEMA.EFFECTIVE_PROJECT_OPTIONS
visualizzazione.
Per disattivare la coda, imposta il timeout della coda su -1. Se raggiungi il limite massimo
la contemporaneità delle query, le altre query avranno esito negativo con un valore ADMISSION_DENIED
.
Imposta la destinazione massima di contemporaneità
Puoi impostare manualmente il target di contemporaneità massima quando crei un prenotazione. Per impostazione predefinita, il target di contemporaneità massimo è zero, il che significa che BigQuery determina dinamicamente la contemporaneità in base alle risorse disponibili. In caso contrario, se imposti una destinazione diversa da zero, il target di contemporaneità massimo specifica un limite superiore al numero di query eseguiti contemporaneamente in una prenotazione, che garantisce una quantità minima di capacità di slot disponibile per ogni query in esecuzione.
L'aumento del target di contemporaneità massimo non garantisce che un numero maggiore di query vengono eseguite simultaneamente. La contemporaneità effettiva dipende dalle risorse di calcolo disponibili di risorse, che possono essere aumentate aggiungendo più slot alla prenotazione.
Ruoli obbligatori
Per ottenere l'autorizzazione necessaria per impostare la contemporaneità in una nuova prenotazione,
chiedi all'amministratore di concederti
Ruolo IAM Editor risorse BigQuery (roles/bigquery.resourceEditor
) nella
progetto di amministrazione
che mantenga la proprietà degli impegni.
Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.
Questo ruolo predefinito contiene
bigquery.reservations.create
, che è
necessario per impostare la contemporaneità in una nuova prenotazione.
Potresti anche riuscire a ottenere questa autorizzazione con ruoli personalizzati e altri ruoli predefiniti.
Per ulteriori informazioni sui ruoli IAM in BigQuery, vedi Autorizzazioni e ruoli predefiniti.
Imposta la destinazione massima di contemporaneità per una prenotazione
Seleziona una delle seguenti opzioni:
Console
Nella console Google Cloud, vai alla pagina BigQuery.
Nel menu di navigazione, vai alla sezione Gestione della capacità.
Fai clic su Crea prenotazione.
Seleziona le impostazioni di prenotazione.
Per espandere la sezione Impostazioni avanzate, fai clic sull'icona
freccia di espansione.Per impostare la contemporaneità target dei job, fai clic sul pulsante Override attiva la contemporaneità dei job di destinazione automatica e inserisci il valore Target Contemporaneità dei job.
Fai clic su Salva.
SQL
Per impostare la destinazione massima di contemporaneità per una nuova prenotazione, utilizza il metodo
CREATE RESERVATION
Istruzione DDL
e imposta
Campo target_job_concurrency
.
Nella console Google Cloud, vai alla pagina BigQuery.
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 esempioregion-us
-
RESERVATION_NAME
: il nome della prenotazione -
CONCURRENCY
: target di contemporaneità massima
-
Fai clic su
Esegui.
Per ulteriori informazioni su come eseguire le query, consulta 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 prenotazioneLOCATION
: il luogo della prenotazioneCONCURRENCY
: target di contemporaneità massimaRESERVATION_NAME
: il nome della prenotazione
API
Per impostare la destinazione massima di contemporaneità nel
API BigQuery Reservation,
imposta il campo concurrency
nel
risorsa prenotazione
e richiamare il
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 un numero maggiore di query vengono eseguite simultaneamente. La contemporaneità effettiva dipende dalle risorse di calcolo disponibili Google Cloud. Se riduci il target di contemporaneità massima, allora l'esecuzione attiva e le query in coda non vengono eseguite finché il numero per le query in parallelo è inferiore al nuovo target.
Se imposti il target di contemporaneità massima su 0, BigQuery determina dinamicamente la contemporaneità in base alle risorse disponibili (comportamento predefinito).
Ruoli obbligatori
Per ottenere l'autorizzazione necessaria per aggiornare la destinazione massima di contemporaneità per una prenotazione,
chiedi all'amministratore di concederti
Ruolo IAM Editor risorse BigQuery (roles/bigquery.resourceEditor
) nella
progetto di amministrazione
che mantenga la proprietà degli impegni.
Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.
Questo ruolo predefinito contiene
bigquery.reservations.update
, che è
necessario per aggiornare la destinazione massima di contemporaneità per una prenotazione.
Potresti anche riuscire a ottenere questa autorizzazione con ruoli personalizzati e altri ruoli predefiniti.
Per ulteriori informazioni sui ruoli IAM in BigQuery, vedi Autorizzazioni e ruoli predefiniti.
Aggiorna la destinazione massima di contemporaneità per una prenotazione
Seleziona una delle seguenti opzioni:
Console
Nella console Google Cloud, vai alla pagina BigQuery.
Nel menu di navigazione, vai alla sezione Gestione della capacità.
Fai clic sulla scheda Prenotazioni slot.
Trova la prenotazione da aggiornare.
Espandi
Azioni.Fai clic su Modifica.
Per espandere la sezione Impostazioni avanzate, fai clic sull'icona
freccia di espansione.Per impostare la contemporaneità target dei job, fai clic sul pulsante Override attiva la contemporaneità dei job di destinazione automatica e inserisci il valore Target Contemporaneità dei job.
Fai clic su Salva.
SQL
Per aggiornare la destinazione massima di contemporaneità per una prenotazione esistente, utilizza il metodo
ALTER RESERVATION
Istruzione DDL
e imposta
Campo target_job_concurrency
.
Nella console Google Cloud, vai alla pagina BigQuery.
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 esempioregion-us
-
RESERVATION_NAME
: il nome della prenotazione -
CONCURRENCY
: target di contemporaneità massima
-
Fai clic su
Esegui.
Per ulteriori informazioni su come eseguire le query, consulta 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 prenotazioneLOCATION
: il luogo della prenotazioneCONCURRENCY
: target di contemporaneità massimaRESERVATION_NAME
: il nome della prenotazione
API
Per aggiornare la destinazione massima di contemporaneità nel
API BigQuery Reservation,
imposta il campo concurrency
nel
risorsa prenotazione
e richiamare il
UpdateReservationRequest
.
Monitoraggio
Per individuare le query in esecuzione e quelle in coda,
INFORMATION_SCHEMA.JOBS_BY_*
e
INFORMATION_SCHEMA.JOBS_TIMELINE_BY_*
visualizzazioni. Il campo state
è impostato su RUNNING
per le query in esecuzione attiva e per
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 queryREGION_ID
: località in cui sono state elaborate le queryRESERVATION_ID
: il nome della prenotazione in cui sono eseguite le query
Puoi monitorare la lunghezza della coda di query per la prenotazione utilizzando Grafici delle risorse amministrative BigQuery e selezionando il grafico Contemporaneità job con la metrica In sospeso.
Puoi anche monitorare la coda in Cloud Monitoring esaminando conteggio job e filtrare per il numero di job in stato In attesa.
Limitazioni
- Ogni progetto on demand può inserire in coda fino a 1000 query interattive e 20.000 query in batch query alla volta. Le query che superano questo limite restituiscono un di quota. Non puoi richiedere un aumento di questi limiti.
- All'interno di una prenotazione, ogni progetto assegnato alla prenotazione può essere inserito in coda fino a 1000 query interattive e 20.000 query in batch query alla volta. Le query che superano questo limite restituiscono un 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 un Prenotazione per la versione Standard. Per ulteriori informazioni sulle versioni, vedi Introduzione a BigQuery di Google Cloud.
Passaggi successivi
- Scopri di più su come diagnosticare e risolvere errori relativi al limite della coda delle query.