Messaggi di errore
Questo documento descrive i messaggi di errore che potresti riscontrare quando utilizzi BigQuery, inclusi i codici di errore HTTP e i passaggi consigliati per la risoluzione dei problemi.
Per saperne di più sugli errori delle query, consulta Risolvi gli errori delle query.
Per saperne di più sugli errori di inserimento di flussi di dati, consulta Risolvi i problemi relativi agli inserimenti di flussi di dati.
Tabella degli errori
Le risposte dell'API BigQuery includono un codice di errore HTTP e un oggetto di errore nel corpo della risposta. Un oggetto di errore è in genere uno dei seguenti:
- Un oggetto
errors, che contiene un array di oggettiErrorProto. - Un oggetto
errorResults, che contiene un singolo oggettoErrorProto.
La colonna Messaggio di errore nella tabella seguente corrisponde alla proprietà reason in un oggetto ErrorProto.
La tabella non include tutti i possibili errori HTTP o altri errori di rete. Pertanto, non dare per scontato che un oggetto di errore sia presente in ogni risposta di errore di BigQuery. Inoltre, potresti ricevere errori o oggetti di errore diversi se utilizzi le librerie client di Cloud per l'API BigQuery. Per saperne di più, consulta Librerie client dell'API BigQuery.
Se ricevi un codice di risposta HTTP che non compare nella tabella seguente, il codice di risposta indica un problema o un risultato previsto con la richiesta HTTP. I codici di risposta nell'intervallo 5xx indicano un errore lato server. Se ricevi un codice di risposta 5xx, riprova a inviare la richiesta in un secondo momento. In alcuni casi, un codice di risposta 5xx potrebbe essere restituito da un server intermedio, ad esempio un proxy. Esamina il corpo e le intestazioni della risposta per i dettagli sull'errore. Per un elenco completo dei codici di risposta HTTP, consulta Codici di risposta HTTP.
Se utilizzi lo strumento a riga di comando bq per controllare lo stato del job, l'oggetto di errore non viene restituito per impostazione predefinita. Per visualizzare l'oggetto di errore e la proprietà reason corrispondente che mappa alla tabella seguente, utilizza il flag --format=prettyjson. Ad esempio: bq --format=prettyjson show -j
*<job id>*. Per visualizzare il logging dettagliato per lo strumento bq, utilizza --apilog=stdout. Per scoprire di più sulla risoluzione dei problemi relativi allo strumento bq, consulta Debug.
| Messaggio di errore | Codice HTTP | Descrizione | Risoluzione dei problemi |
|---|---|---|---|
| accessDenied | 403 |
Questo errore viene restituito quando provi ad accedere a una risorsa come un set di dati, tabella, vista o job a cui non hai accesso. Questo errore viene restituito anche quando provi a modificare un oggetto di sola lettura. |
Contatta il proprietario della risorsa e
richiedi l'accesso alla risorsa per
l'utente identificato dal valore |
| attributeError | 400 |
Questo errore viene restituito quando si verifica un problema con il codice utente in cui viene chiamato un determinato attributo dell'oggetto, ma non esiste. |
Assicurati che l'oggetto con cui stai lavorando abbia l'attributo a cui stai tentando di accedere. Per saperne di più su questo errore, consulta AttributeError. |
| backendError | 500, 502, 503 o 504 |
Questo errore indica che il servizio non è al momento disponibile. Ciò può accadere a causa di una serie di problemi temporanei, tra cui:
|
Gli errori 5xx sono problemi lato servizio e il client non ha modo di correggerli o controllarli. Dal lato client, per mitigare l'impatto degli errori 5xx, devi riprovare le richieste utilizzando i backoff esponenziali troncati. Per saperne di più sui backoff esponenziali, consulta Backoff esponenziale. Tuttavia, esistono due casi speciali per la risoluzione di questo errore: chiamate
Chiamate Se i nuovi tentativi non sono efficaci e i problemi persistono, puoi calcolare la percentuale di richieste non riuscite e contattare l'assistenza. |
| badRequest | 400 |
L'errore |
Attendi qualche minuto e riprova oppure filtra l'istruzione in modo che operi solo su dati meno recenti che non si trovano nel buffer di flussi di dati. Per verificare se i dati sono disponibili per le operazioni DML della tabella, controlla la risposta In alternativa, valuta la possibilità di inserire flussi di dati con l'API BigQuery Storage Write (gRPC), che non presenta questa limitazione. |
| billingNotEnabled | 403 |
Questo errore viene restituito quando la fatturazione non è abilitata per il progetto. |
Abilita la fatturazione per il progetto nella consoleGoogle Cloud . |
| billingTierLimitExceeded | 400 |
Questo errore viene restituito quando il valore di |
Questo errore è spesso dovuto all'esecuzione di cross join inefficienti, in modo esplicito o implicito, ad esempio a causa di una condizione di join imprecisa. Questi tipi di query non sono adatti ai prezzi on demand a causa dell'elevato consumo di risorse e, in generale, potrebbero non scalare bene. Per risolvere questo errore, puoi ottimizzare la query o passare al modello di prezzi basato sulla capacità (slot). Per informazioni sull'ottimizzazione delle query, consulta Evita gli anti-pattern SQL. |
| blocked | 403 |
Questo errore viene restituito quando BigQuery ha inserito temporaneamente nella lista bloccata l'operazione che hai tentato di eseguire, di solito per evitare un'interruzione del servizio. |
Contatta l'assistenza per ulteriori informazioni. |
| duplicare | 409 |
Questo errore viene restituito quando si tenta di creare un job, un set di dati o una tabella che esiste già. L'errore viene restituito anche quando la proprietà |
Rinomina la risorsa che stai tentando di creare o modifica il valore |
| internalError | 500 |
Questo errore viene restituito quando si verifica un errore interno in BigQuery. |
Attendi in base ai requisiti di backoff descritti nell'accordo sul livello del servizio di BigQuery, quindi riprova a eseguire l'operazione. Se l'errore persiste, contatta l'assistenza o segnala un bug utilizzando Issue Tracker di BigQuery. Puoi anche ridurre la frequenza di questo errore utilizzando le prenotazioni. |
| non valido | 400 |
Questo errore viene restituito quando è presente un tipo di input non valido diverso da una query non valida, ad esempio campi obbligatori mancanti o uno schema di tabella non valido.
Le query non valide restituiscono un errore |
|
| invalidQuery | 400 |
Questo errore viene restituito quando tenti di eseguire una query non valida. |
Controlla la query per verificare la presenza di errori di sintassi. Il riferimento per le query contiene descrizioni ed esempi di come creare query valide. |
| invalidUser | 400 |
Questo errore viene restituito quando tenti di pianificare una query con credenziali utente non valide. |
Aggiorna le credenziali utente, come spiegato in Pianificazione delle query. |
| jobBackendError | 400 |
Questo errore viene restituito quando il job è stato creato correttamente, ma non è riuscito a causa di un errore interno. Potresti visualizzare questo errore in |
Riprova a eseguire il job con un nuovo |
| jobInternalError | 400 |
Questo errore viene restituito quando il job è stato creato correttamente, ma non è riuscito a causa di un errore interno. Potresti visualizzare questo errore in |
Riprova a eseguire il job con un nuovo |
| jobRateLimitExceeded | 400 |
Questo errore viene restituito quando il job è stato creato correttamente, ma non è riuscito con un errore rateLimitExceeded. Potresti visualizzare questo errore in |
Utilizza il
backoff
esponenziale per ridurre il tasso di richieste, quindi riprova a eseguire il job con un nuovo
|
| notFound | 404 |
Questo errore viene restituito quando fai riferimento a una risorsa (un set di dati, una tabella o un job) che non esiste o quando la località nella richiesta non corrisponde a quella della risorsa (ad esempio, la località in cui è in esecuzione un job). Questo può accadere anche quando utilizzi i decoratori di tabelle per fare riferimento a tabelle eliminate che sono state recentemente trasmesse in streaming. |
Correggi i nomi delle risorse, specifica correttamente la località o attendi almeno 6 ore dopo lo streaming prima di eseguire query su una tabella eliminata. |
| notImplemented | 501 |
Questo errore del job viene restituito quando provi ad accedere a una funzionalità non implementata. |
Contatta l'assistenza per ulteriori informazioni. |
| proxyAuthenticationRequired | 407 |
Questo errore viene restituito tra l'ambiente client e il server proxy quando la richiesta non contiene credenziali di autenticazione valide per il server proxy. Per saperne di più, consulta 407 Proxy Authentication Required. |
La risoluzione dei problemi è specifica per il tuo ambiente. Se ricevi questo errore mentre lavori in Java, assicurati di aver impostato entrambe le proprietà |
| quotaExceeded | 403 |
Questo errore viene restituito quando il progetto supera una quota BigQuery, una quota personalizzata o quando non hai configurato la fatturazione e hai superato il livello senza costi per le query. |
Visualizza la proprietà |
| rateLimitExceeded | 403, 429 |
Questo errore viene restituito se il progetto supera un limite di frequenza a breve termine inviando troppe richieste troppo rapidamente. Ad esempio, consulta i limiti di frequenza per i job di query e i limiti di frequenza per le richieste API. |
Riduci il tasso di richieste. |
| resourceInUse | 400 |
Questo errore viene restituito quando provi a eliminare un set di dati che contiene tabelle o quando provi a eliminare un job attualmente in esecuzione. |
Svuota il set di dati prima di tentare di eliminarlo o attendi il completamento di un job prima di eliminarlo. |
| resourcesExceeded | 400 |
Questo errore viene restituito quando il job utilizza troppe risorse. |
Questo errore viene restituito quando il job utilizza troppe risorse. Per informazioni sulla risoluzione dei problemi, consulta Risolvi gli errori di superamento delle risorse. |
| responseTooLarge | 403 |
Questo errore viene restituito quando i risultati della query sono superiori alle
dimensioni massime della risposta. Alcune query vengono eseguite in più fasi e questo errore viene restituito quando una fase restituisce una dimensione della risposta troppo grande, anche se il risultato finale è inferiore al massimo. Questo errore viene restituito comunemente quando le query utilizzano una clausola |
A volte può essere utile aggiungere una clausola |
| operazione interrotta | 200 |
Questo codice di stato viene restituito quando un job viene annullato. |
|
| tableUnavailable | 400 |
Alcune tabelle BigQuery sono supportate da dati gestiti da altri team di prodotto Google. Questo errore indica che una di queste tabelle non è disponibile. |
Quando visualizzi questo messaggio di errore, puoi riprovare a inviare la richiesta (consulta i suggerimenti per la risoluzione dei problemi relativi a internalError) o contattare il team di prodotto Google che ti ha concesso l'accesso ai suoi dati. |
| timeout | 400 |
Timeout del job. |
Valuta la possibilità di ridurre la quantità di lavoro eseguito dall'operazione in modo che possa essere completata entro il limite impostato. Per saperne di più, consulta Risolvi gli errori relativi a quote e limiti. |
Esempio di risposta di errore
GET https://bigquery.googleapis.com/bigquery/v2/projects/12345/datasets/foo
Response:
[404]
{
"error": {
"errors": [
{
"domain": "global",
"reason": "notFound",
"message": "Not Found: Dataset myproject:foo"
}],
"code": 404,
"message": "Not Found: Dataset myproject:foo"
}
}
Calcola la percentuale di richieste non riuscite e l'uptime
La maggior parte degli errori 500 e 503 può essere risolta eseguendo un nuovo tentativo con backoff esponenziale. Se gli errori 500 e 503 persistono, puoi calcolare la percentuale complessiva di richieste non riuscite e il tempo di attività corrispondente per confrontarlo con l'accordo sul livello del servizio (SLA) di BigQuery per determinare se il servizio funziona come previsto.
Per calcolare la percentuale complessiva di richieste non riuscite negli ultimi 30 giorni, prendi il numero di richieste non riuscite per una chiamata o un metodo API specifico negli ultimi 30 giorni e dividilo per il numero totale di richieste per quella chiamata o quel metodo API negli ultimi 30 giorni. Moltiplica questo valore per 100 per ottenere la percentuale media di richieste non riuscite in 30 giorni.
Ad esempio, puoi eseguire query sui dati di Cloud Logging per ottenere il numero di richieste jobs.insert totali e il numero di richieste jobs.insert non riuscite ed eseguire il calcolo. Puoi anche ottenere i valori della percentuale di errori dalla dashboard dell'API o utilizzando Metrics Explorer in Cloud Monitoring. Queste opzioni non includono i dati sui problemi di networking o routing riscontrati tra il client e BigQuery, pertanto consigliamo anche di utilizzare un sistema di logging e generazione di report lato client per calcoli più precisi della percentuale di errori.
Innanzitutto, sottrai dal 100% la percentuale complessiva di richieste non riuscite. Se questo valore è maggiore o uguale al valore descritto nello SLA di BigQuery, anche l'uptime soddisfa lo SLA di BigQuery. Tuttavia, se questo valore è inferiore a quello descritto nello SLA, calcola l'uptime manualmente.
Per calcolare l'uptime, devi conoscere il numero di minuti considerati come tempo di inattività del servizio. Il tempo di inattività del servizio indica un periodo di un minuto con una percentuale di errori superiore al 10% calcolata in base alle definizioni dello SLA. Per calcolare l'uptime, prendi i minuti totali degli ultimi 30 giorni e sottrai i minuti totali di inattività del servizio. Dividi il tempo rimanente per i minuti totali degli ultimi 30 giorni e moltiplica questo valore per 100 per ottenere la percentuale di uptime in 30 giorni. Per saperne di più sulle definizioni e sui calcoli relativi allo SLA , consulta l'accordo sul livello del servizio (SLA) di BigQuery.
Se la percentuale di uptime mensile è maggiore o uguale al valore descritto nello SLA di BigQuery, è molto probabile che l'errore sia stato causato da un problema temporaneo, quindi puoi continuare a riprovare utilizzando il backoff esponenziale.
Se l'uptime è inferiore al valore presentato nello SLA, contatta l'assistenza per ricevere aiuto e condividi il tasso di errore complessivo osservato e i calcoli dell'uptime.
Errori di autenticazione
Gli errori generati dal sistema di generazione dei token OAuth restituiscono il seguente oggetto JSON, come definito dalla specifica OAuth2.
{"error" : "_description_string_"}
L'errore è accompagnato da un errore HTTP 400 Bad Request o da un errore HTTP 401 Unauthorized. _description_string_ è uno dei codici di errore definiti dalla specifica OAuth 2.0. Ad esempio:
{"error":"invalid_client"}
Esamina errori
Puoi utilizzare Esplora log per visualizzare gli errori di autenticazione per job, utenti o altri ambiti specifici. Di seguito sono riportati esempi di filtri di Esplora log che puoi utilizzare per esaminare gli errori di autenticazione:
Cerca i job non riusciti con problemi di autorizzazione negli audit log di policy negata:
resource.type="bigquery_resource" protoPayload.status.message=~"Access Denied" logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access"Sostituisci
PROJECT_IDcon l'ID del progetto contenente la risorsa.Cerca un utente o un account di servizio specifico utilizzato per l'autenticazione:
resource.type="bigquery_resource" protoPayload.authenticationInfo.principalEmail="EMAIL"Sostituisci
EMAILcon l'indirizzo email dell'utente o del account di servizio.Cerca le modifiche alle policy di Identity and Access Management negli audit log delle attività di amministrazione:
protoPayload.methodName=~"SetIamPolicy" logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity"Cerca le modifiche a un set di dati BigQuery specifico nei log di controllo dell'accesso ai dati:
resource.type="bigquery_resource" protoPayload.resourceName="projects/PROJECT_ID/datasets/DATASET_ID" logName=projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_accessSostituisci
DATASET_IDcon l'ID del set di dati contenente la risorsa.
Messaggi di errore di connettività
La tabella seguente elenca i messaggi di errore che potresti visualizzare a causa di problemi di connettività intermittenti quando utilizzi le librerie client o chiami l'API BigQuery dal tuo codice:
| Messaggio di errore | Libreria client o API | Risoluzione dei problemi |
|---|---|---|
| com.google.cloud.bigquery.BigQueryException: Read timed out | Java | Imposta un valore di timeout più alto. |
| Connection has been shutdown: javax.net.ssl.SSLException: java.net.SocketException: Connection reset at com.google.cloud.bigquery.spi.v2.HttpBigQueryRpc.translate(HttpBigQueryRpc.java:115) | Java | Implementa un meccanismo di ripetizione e imposta un valore di timeout più elevato. |
| javax.net.ssl.SSLHandshakeException: Remote host terminated the handshake | Java | Implementa un meccanismo di ripetizione e imposta un valore di timeout più elevato. |
| BrokenPipeError: [Errno 32] Broken pipe | Python | Implementa un meccanismo di ripetizione. Per saperne di più su questo errore, consulta BrokenPipeError. |
| Connessione interrotta. RemoteDisconnected('Remote end closed connection without response' | Python | Imposta un valore di timeout più alto. |
| SSLEOFError (EOF occurred in violation of protocol) | Python | Questo errore viene restituito al posto di un errore HTTP 413 (ENTITY_TOO_LARGE). Riduci le dimensioni della richiesta. |
| TaskCanceledException: un'attività è stata annullata | Libreria .NET | Aumenta il valore di timeout sul lato client. |
| google.api_core.exceptions.PreconditionFailed: 412 PATCH | Python | Questo errore viene restituito durante il tentativo di aggiornare una risorsa tabella utilizzando una richiesta HTTP. Assicurati che l'ETag nell'intestazione HTTP non sia obsoleto. Per le operazioni a livello di tabella o set di dati, assicurati che la risorsa non sia cambiata dall'ultima volta che è stata creata un'istanza e ricrea l'oggetto, se necessario. |
| Failed to establish a new connection: [Errno 110] Connection timed out | Librerie client | Questo errore viene restituito quando la richiesta ha raggiunto la fine del file (EOF) durante lo streaming o la lettura dei dati da BigQuery. Implementa un meccanismo di ripetizione e imposta un valore di timeout più elevato. |
| socks.ProxyConnectionError: Error connecting to HTTP proxy
|
Librerie client | Risolvi i problemi relativi allo stato e alle impostazioni del proxy. Implementa un meccanismo di ripetizione e imposta un valore di timeout più elevato. |
| Ricevuto un EOF imprevisto o 0 byte dal flusso di trasporto | Librerie client | Implementa un meccanismo di ripetizione e imposta un valore di timeout più elevato. |
Messaggi di errore della consoleGoogle Cloud
La tabella seguente elenca i messaggi di errore che potresti visualizzare mentre lavori nella consoleGoogle Cloud .
| Messaggio di errore | Descrizione | Risoluzione dei problemi |
|---|---|---|
| Risposta di errore sconosciuta dal server. | Questo errore viene visualizzato quando la console Google Cloud riceve un errore sconosciuto dal server, ad esempio quando fai clic su un set di dati o su un altro tipo di link e la pagina non può essere visualizzata. | Passa alla modalità di navigazione in incognito o privata del browser e ripeti l'azione che ha generato l'errore. Se non si verifica alcun errore in modalità Incognito, allora l'errore potrebbe essere dovuto a un'estensione del browser, ad esempio un blocco degli annunci. Disattiva le estensioni del browser quando non sei in modalità Incognito e verifica se il problema si risolve. |