Risolvere i problemi relativi alle query

Questo documento ha lo scopo di aiutarti a risolvere i problemi più comuni relativi a: di query in esecuzione, ad esempio identificando i motivi di lentezza delle query i passaggi per risolvere gli errori comuni restituiti da query non riuscite.

Risolvere i problemi relativi alle query lente

Quando risolvi i problemi di lentezza delle prestazioni delle query, considera i seguenti aspetti comuni cause:

  1. Controlla lo stato di Google Cloud Service Health pagina per le interruzioni note del servizio BigQuery che potrebbero influire sulle query delle prestazioni.

  2. Rivedi la sequenza temporale del job per la tua query nella pagina dei dettagli dell'offerta di lavoro. per vedere il tempo necessario per l'esecuzione di ogni fase della query.

    • Se la maggior parte del tempo trascorso è dovuta a tempi di creazione lunghi, contatta l'assistenza clienti Google Cloud per ricevere aiuto.

    • Se la maggior parte del tempo trascorso è dovuta a lunghi tempi di esecuzione, rivedi gli approfondimenti sulle prestazioni delle query. Gli insight sulle prestazioni delle query possono indicarti se la tua query è stata eseguita più a lungo del tempo medio di esecuzione e suggerire possibili cause. Le cause possibili potrebbero includere la contesa degli slot di query o un errore insufficiente quota di shuffling. Per ulteriori informazioni su ciascun problema di prestazioni delle query soluzioni possibili, consulta Interpretare gli insight sulle prestazioni delle query.

  3. Esamina i byte elaborati nella pagina dei dettagli del job di query. per vedere se è più alto del previsto. Puoi farlo confrontando il numero di byte elaborati dalla query attuale con un altro job di query completato in accettabile. In caso di grande discrepanza nei byte elaborati tra le due query, forse la query era lenta a causa della quantità di dati volume. Per informazioni su come ottimizzare le query per gestire grandi volumi di dati, consulta Ottimizzare il calcolo delle query.

    Puoi anche identificare le query nel progetto che elaborano un una grande quantità di dati, cercando le query più costose INFORMATION_SCHEMA.JOBS visualizzazione.

Se ancora non riesci a trovare il motivo per spiegare una query più lenta del previsto delle prestazioni, contatta l'assistenza clienti Google Cloud per ricevere aiuto.

Risoluzione dello schema Avro

Stringa di errore: Cannot skip stream

Questo errore può verificarsi quando vengono caricati più file Avro con schemi diversi, causando un problema di risoluzione dello schema e causando l'esito negativo del job di importazione casuale file.

Per risolvere questo errore, assicurati che l'ultimo file alfabetico nel job di caricamento contiene il soprainsieme (unione) degli schemi differenti. Questo è un requisito in base al modo in cui Avro gestisce la risoluzione dello schema.

Query simultanee in conflitto

Stringa di errore: Concurrent jobs in the same session are not allowed

Questo errore può verificarsi quando più query sono in esecuzione contemporaneamente in un sessione, che non è supportata. Consulta limitazioni relative alle sessioni.

Istruzioni DML in conflitto

Stringa di errore: Could not serialize access to table due to concurrent update

Questo errore può verificarsi quando si modificano le istruzioni DML (Data Manipulation Language) in esecuzione nella stessa tabella sono in conflitto tra loro quando la tabella viene troncata durante un'istruzione DML mutante. Per ulteriori informazioni le informazioni, vedi Conflitti tra istruzioni DML.

Per risolvere questo errore, esegui operazioni DML che interessano una singola tabella, in modo che non si sovrappongono.

Sottoquery correlate

Stringa di errore: Correlated subqueries that reference other tables are not supported unless they can be de-correlated

Questo errore può verificarsi quando la query contiene una sottoquery che fa riferimento a una esterna alla sottoquery, chiamata colonna di correlazione. La sottoquery correlata viene valutata utilizzando un'esecuzione nidificata inefficiente in cui la sottoquery viene valutata per ogni riga della query esterna che produce le colonne di correlazione. A volte, BigQuery riscrivere internamente le query con sottoquery correlate in modo più efficiente. L'errore delle sottoquery correlate si verifica quando BigQuery non può ottimizzare a sufficienza la query.

Per risolvere questo errore, prova a procedere nel seguente modo:

  • Rimuovi eventuali clausole ORDER BY, LIMIT, EXISTS, NOT EXISTS o IN da la tua sottoquery.
  • Utilizza una query multi-istruzione per creare una tabella temporanea a cui fare riferimento nella sottoquery.
  • Riscrivi la query per utilizzare invece un CROSS JOIN.

Autorizzazioni per il controllo dell'accesso a livello di colonna insufficienti

Stringa di errore: Requires raw access permissions on the read columns to execute the DML statements

Questo errore si verifica quando tenti di usare DELETE, UPDATE o MERGE DML senza disporre dell'autorizzazione Lettore granulare nella versione scansionata. colonne che utilizzano il controllo dell'accesso a livello di colonna per limitare l'accesso nella colonna livello. Per ulteriori informazioni, vedi Impatto sulle scritture dal controllo dell'accesso a livello di colonna.

Credenziali non valide per le query pianificate

Stringhe di errore:

  • Error code: INVALID_USERID
  • Error code 5: Authentication failure: User Id not found
  • PERMISSION_DENIED: BigQuery: Permission denied while getting Drive credentials

Questo errore può verificarsi quando una query pianificata non va a buon fine perché con credenziali obsolete, in particolare quando si eseguono query sui dati di Google Drive.

Per correggere questo errore, aggiornare le credenziali della query pianificata.

Credenziali dell'account di servizio non valide

Stringa di errore: HttpError 403 when requesting returned: The caller does not have permission

Questo errore potrebbe essere visualizzato quando tenti di configurare una query pianificata con un l'account di servizio. Per risolvere questo errore, consulta la procedura di risoluzione dei problemi in Problemi di autorizzazione e autorizzazione.

Ora snapshot non valida

Stringa di errore: Invalid snapshot time

Questo errore può verificarsi quando si cerca di eseguire query su dati storici al di fuori del finestra di spostamento cronologico per del set di dati. Per risolvere questo errore, modifica la query per accedere ai dati storici all'interno della finestra di spostamento cronologico del set di dati.

Questo errore può comparire anche se viene eliminata una delle tabelle utilizzate nella query e ricreato dopo l'avvio della query. Controlla se c'è una pianificazione o l'applicazione che esegue questa operazione eseguita contemporaneamente a la query non riuscita. In caso affermativo, prova a spostare il processo che esegue il calo, ricrea l'operazione da eseguire in un momento che non sia in conflitto con le query leggi la tabella.

Il job esiste già

Stringa di errore: Already Exists: Job <job name>

Questo errore può verificarsi per i job di query che devono valutare array di grandi dimensioni, in modo che occorre più tempo della media per creare un job di query. Ad esempio, un query con una clausola WHERE come WHERE column IN (<2000+ elements array>).

Per correggere questo errore:

Job non trovato

Stringa di errore: Job not found

Questo errore può verificarsi in risposta a un Chiamata getQueryResults, in cui non viene specificato alcun valore per il campo location. In questo caso, Riprova a effettuare la chiamata e fornisci un valore location.

Per ulteriori informazioni, vedi Evita di eseguire più valutazioni delle stesse espressioni tabella comuni (CTE).

La query supera il limite di tempo di esecuzione

Stringa di errore: Query fails due to reaching the execution time limit

Se la query raggiunge il limite di tempo di esecuzione della query, controlla delle esecuzioni precedenti della query eseguendo una query INFORMATION_SCHEMA.JOBS visualizzazione con una query simile all'esempio seguente:

SELECT TIMESTAMP_DIFF(end_time, start_time, SECOND) AS runtime_in_seconds
FROM `region-us`.INFORMATION_SCHEMA.JOBS
WHERE statement_type = 'QUERY'
AND query = "my query string";

Se le esecuzioni precedenti della query hanno richiesto molto meno tempo, utilizza approfondimenti sulle prestazioni delle query per determinare e risolvere il problema di fondo.

La risposta alla query è troppo grande

Stringa di errore: responseTooLarge

Questo errore si verifica quando i risultati della query sono superiori a dimensione massima della risposta.

Per correggere l'errore, segui le indicazioni fornite per Messaggio di errore responseTooLarge.

Troppe istruzioni DML

Stringa di errore: Too many DML statements outstanding against <table-name>, limit is 20

Questo errore si verifica quando superi il limite di 20 istruzioni DML con stato PENDING in coda per una singola tabella. Questo errore di solito si verifica quando invii job DML su una singola tabella più velocemente rispetto a BigQuery possono elaborare.

Una possibile soluzione è raggruppare più operazioni DML più piccole in ma meno lavori. Quando raggruppi i lavori più piccoli in lavori più grandi, il costo di esecuzione dei job più grandi viene ammortizzato e l'esecuzione è più rapida. Il consolidamento delle istruzioni DML che interessano gli stessi dati in genere migliora dei job DML ed è meno probabile che superino la quota di dimensioni della coda limite. Per saperne di più sull'ottimizzazione delle operazioni DML, consulta Istruzioni DML che aggiornano o inseriscono singole righe.

Altre soluzioni per migliorare l'efficienza di DML potrebbero essere la partizione o il clustering le tue tabelle. Per saperne di più, consulta le best practice.

L'utente non dispone dell'autorizzazione

Stringhe di errore:

  • Access Denied: Project [project_id]: User does not have bigquery.jobs.create permission in project [project_id].
  • User does not have permission to query table project-id:dataset.table.

Questo errore si verifica quando esegui una query senza Autorizzazione bigquery.jobs.create per il progetto da cui viene eseguito a prescindere dalle tue autorizzazioni per il progetto che contiene i dati. Tu deve avere anche l'autorizzazione bigquery.tables.getData su tutte le tabelle e le viste a cui fa riferimento la query.

Questo errore può verificarsi anche se la tabella non esiste nella regione della query, ad esempio asia-south1. Per eseguire query sulle viste, devi disporre di questa autorizzazione anche su tutti le tabelle e le viste sottostanti. Per ulteriori informazioni sulle autorizzazioni richieste, consulta Eseguire una query.

Per risolvere questo errore, considera quanto segue:

  • Account di servizio: gli account di servizio devono avere l'bigquery.jobs.create l'autorizzazione di accesso al progetto da cui vengono eseguite.

  • Ruoli personalizzati: i ruoli IAM personalizzati devono avere Autorizzazione bigquery.jobs.create inclusa esplicitamente nel ruolo pertinente.

  • Set di dati condivisi: quando lavori con set di dati condivisi in un progetto separato, potresti avere ancora bisogno dell'autorizzazione bigquery.jobs.create nel progetto per l'esecuzione o job in quel set di dati.

Per concedere l'autorizzazione ad accedere alla tabella

Per concedere l'autorizzazione ad accedere a una tabella a un principio:

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. In Explorer, vai alla tabella a cui vuoi accedere, seleziona Visualizza azioni, seleziona Condividi, quindi fai clic su Gestisci autorizzazioni.

  3. In Aggiungi entità, inserisci il nome degli utenti, dei gruppi, dei domini che vuoi aggiungere.

  4. In Assegna ruoli, seleziona l'autorizzazione bigquery.jobs.create. Come un'alternativa, concedendo ai Ruolo roles/bigquery.jobUser del progetto da cui viene eseguita la query, fornisce i necessari autorizzazioni aggiuntive.

  5. Fai clic su Salva.

Problemi relativi al superamento delle risorse

I seguenti problemi si verificano quando BigQuery non è sufficiente risorse per completare la query.

La query supera le risorse della CPU

Stringa di errore: Query exceeded resource limits

Questo errore si verifica quando le query on demand utilizzano troppa CPU rispetto al quantità di dati scansionati. Per informazioni su come risolvere questi problemi, consulta Risolvi i problemi relativi al superamento della soglia.

La query supera le risorse di memoria

Stringa di errore: Resources exceeded during query execution: The query could not be executed in the allotted memory

Per SELECT estratti conto, questo errore si verifica quando la query utilizza troppe risorse. Per risolvere questo errore, vedi Risolvere i problemi. dei problemi relativi al superamento della soglia.

La query supera le risorse di shuffling

Stringa di errore: Resources exceeded during query execution: Your project or organization exceeded the maximum disk and memory limit available for shuffle operations

Questo errore si verifica quando una query non riesce ad accedere a risorse di shuffling sufficienti.

Per correggere questo errore, esegui il provisioning di più slot o riduci la quantità di dati elaborati dalla query. Per ulteriori informazioni su come fare, vedi Quota di shuffle insufficiente.

Per ulteriori informazioni su come risolvere questi problemi, consulta l'articolo sulla risoluzione dei problemi dei problemi relativi al superamento della soglia.

La query è troppo complessa

Stringa di errore: Resources exceeded during query execution: Not enough resources for query planning - too many subqueries or query is too complex

Questo errore si verifica quando una query è troppo complessa. Le cause principali più complesse sono:

  • WITH clausole che sono molto nidificate o utilizzate ripetutamente.
  • Visualizzazioni nidificate o utilizzate più volte.
  • Utilizzo ripetuto dell'operatore UNION ALL.

Per risolvere questo errore, prova le seguenti opzioni:

  • Suddividi la query in più query, quindi utilizza linguaggio procedurale eseguire queste query in sequenza con stato condiviso.
  • Utilizza tabelle temporanee invece delle clausole WITH.
  • Riscrivi la query per ridurre il numero di oggetti di riferimento e confronti.

Puoi monitorare in modo proattivo le query che stanno per raggiungere il limite di complessità utilizzando il campo query_info.resource_warning nella INFORMATION_SCHEMA.JOBS visualizzazione. L'esempio seguente restituisce query con un elevato utilizzo di risorse per ultimi tre giorni:

SELECT
  ANY_VALUE(query) AS query,
  MAX(query_info.resource_warning) AS resource_warning
FROM
  <your_project_id>.`region-us`.INFORMATION_SCHEMA.JOBS
WHERE
  creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 3 DAY)
  AND query_info.resource_warning IS NOT NULL
GROUP BY
  query_info.query_hashes.normalized_literals
LIMIT
  1000

Per ulteriori informazioni su come risolvere questi problemi, consulta l'articolo sulla risoluzione dei problemi dei problemi relativi al superamento della soglia.

Risolvere i problemi relativi al superamento della soglia di risorse

Per i job di query:

Per ottimizzare le query, prova a seguire questi passaggi:

  • Prova a rimuovere una clausola ORDER BY.
  • Se la query utilizza JOIN, assicurati che la tabella più grande si trovi a sinistra della clausola.
  • Se la query utilizza FLATTEN, determina se è necessario per il tuo caso d'uso. Per ulteriori informazioni, consulta l'articolo Dati nidificati e ripetuti.
  • Se la tua query utilizza EXACT_COUNT_DISTINCT, valuta la possibilità di usare COUNT(DISTINCT).
  • Se la query utilizza COUNT(DISTINCT <value>, <n>) con un valore <n> elevato, valuta la possibilità di utilizzare GROUP BY . Per ulteriori informazioni, vedi COUNT(DISTINCT).
  • Se la query utilizza UNIQUE, valuta la possibilità di usare GROUP BY, oppure una funzione finestra all'interno di una sottoseleziona.
  • Se la query materializza molte righe utilizzando una clausola LIMIT, valuta la possibilità di applicare un filtro in base a un'altra colonna, ad esempio ROW_NUMBER(), o rimuovendo completamente la clausola LIMIT per consentire il caricamento in contemporanea in scrittura.
  • Se per la query sono state utilizzate viste molto nidificate e una clausola WITH, ciò può causare una crescita esponenziale della complessità, raggiungendo così i limiti.
  • Non sostituire le tabelle temporanee con le clausole WITH. La clausola potrebbe dover essere ricalcolato più volte, il che può rendere la query complessa e di conseguenza lenta. I risultati intermedi persistenti in tabelle temporanee aiutano invece con complessità
  • Evita di utilizzare query UNION ALL.

Per maggiori informazioni, consulta le seguenti risorse:

Per i job di caricamento:

Se stai caricando file Avro o Parquet, riduci le dimensioni delle righe nei file. Controllo per conoscere le limitazioni di dimensioni specifiche per il formato di file che stai caricando:

Se ricevi questo errore durante il caricamento dei file ORC, contatta l'assistenza.

Per l'API Storage:

Stringa di errore: Stream memory usage exceeded

Durante una chiamata ReadRows all'API Storage Read, alcuni flussi di dati l'utilizzo della memoria potrebbe ricevere un errore RESOURCE_EXHAUSTED con questo messaggio. Questo può accadere quando si leggono da tabelle larghe o da tabelle con uno schema complesso. Per risolvere il problema, Riduci la dimensione della riga dei risultati selezionando meno colonne per leggere (utilizzando parametro selected_fields), o semplificando lo schema della tabella.

Passaggi successivi