Messages d'erreur
Ce document décrit les messages d'erreur que vous pouvez rencontrer lorsque vous utilisez BigQuery, y compris les codes d'erreur HTTP et les étapes de dépannage suggérées.
Pour en savoir plus sur les erreurs de requête, consultez Résoudre les erreurs de requête.
Pour en savoir plus sur les erreurs d'insertion en flux continu, consultez Résoudre les problèmes liés à l'insertion en flux continu.
Table d'erreurs
Les réponses de l'API BigQuery incluent un code d'erreur HTTP et un objet d'erreur dans le corps de la réponse. Un objet d'erreur est généralement l'un des éléments suivants :
- Un objet
errors
, qui contient un tableau d'objetsErrorProto
. - Un objet
errorResults
, qui contient un seul objetErrorProto
.
La colonne Message d'erreur du tableau suivant correspond à la propriété reason
d'un objet ErrorProto
.
Le tableau n'inclut pas toutes les erreurs HTTP possibles ni les autres erreurs de mise en réseau. Par conséquent, ne partez pas du principe qu'un objet d'erreur est présent dans chaque réponse d'erreur de BigQuery. Vous pouvez également recevoir des erreurs ou des objets d'erreur différents si vous utilisez les bibliothèques clientes Cloud pour l'API BigQuery. Pour en savoir plus, consultez la section Bibliothèques clientes de l'API BigQuery.
Si vous recevez un code de réponse HTTP qui n'apparaît pas dans le tableau ci-dessous, il indique un problème ou un résultat attendu pour la requête HTTP. Les codes de réponse compris dans la plage 5xx
indiquent une erreur côté serveur. Si vous recevez un code de réponse 5xx
, réessayez la requête ultérieurement. Dans certains cas, un code de réponse 5xx
peut être renvoyé par un serveur intermédiaire, tel qu'un proxy. Pour en savoir plus sur l'erreur, examinez le corps de la réponse et les en-têtes de réponse. Pour obtenir la liste complète des codes de réponse HTTP, consultez les codes de réponse HTTP.
Si vous utilisez l'outil de ligne de commande bq pour vérifier l'état d'une tâche, l'objet d'erreur n'est pas renvoyé par défaut. Afin de visualiser l'objet d'erreur et la propriété reason
correspondante dans le tableau ci-dessous, utilisez l'option --format=prettyjson
. Par exemple, bq --format=prettyjson show -j
*<job id>*
. Pour afficher la journalisation détaillée de l'outil bq, utilisez --apilog=stdout
. Pour en savoir plus sur le dépannage de l'outil bq, consultez Débogage.
Message d'erreur | Code HTTP | Description | Dépannage |
---|---|---|---|
accessDenied | 403 |
Cette erreur apparaît lorsque vous essayez d'accéder à une ressource, telle qu'un ensemble de données, une table, une vue ou une tâche, à laquelle vous n'avez pas accès. Cette erreur survient également lorsqu'on tente de modifier un objet en lecture seule. |
Contactez le propriétaire de la ressource et demandez l'accès à la ressource pour l'utilisateur identifié par la valeur |
attributeError | 400 |
Cette erreur se produit lorsqu'un attribut d'objet spécifique est appelé dans le code utilisateur, mais n'existe pas. |
Assurez-vous que l'objet avec lequel vous travaillez possède l'attribut auquel vous essayez d'accéder. Pour en savoir plus sur cette erreur, consultez AttributeError. |
backendError | 500, 503 ou 504 |
Cette erreur indique que le service est actuellement indisponible. Cela peut se produire en raison de plusieurs problèmes temporaires, y compris :
|
Les erreurs 5xx sont des problèmes côté service que le client ne peut pas résoudre ni contrôler. Du côté client, pour atténuer l'impact des erreurs 5xx, vous devez relancer vos requêtes à l'aide d'intervalles exponentiels tronqués entre les tentatives. Pour en savoir plus sur les intervalles exponentiels entre les tentatives, consultez Intervalle exponentiel entre les tentatives. Toutefois, il existe deux cas particuliers pour résoudre cette erreur : les appels Appels
Appels Si les tentatives ne sont pas efficaces et que les problèmes persistent, vous pouvez calculer le taux d'échec des requêtes et contacter l'assistance. |
badRequest | 400 |
L'erreur |
Pour savoir si les données sont disponibles pour les opérations LMD de la table, consultez la réponse |
billingNotEnabled | 403 |
Cette erreur apparaît lorsque la facturation n'est pas activée pour le projet. |
Activez la facturation pour le projet dans la consoleTrusted Cloud . |
billingTierLimitExceeded | 400 |
Cette erreur apparaît lorsque la valeur de |
Cette erreur résulte le plus souvent d'une exécution de jointures croisées inefficaces, explicitement ou implicitement, par exemple en raison d'une condition de jointure inexacte. Ces types de requêtes ne sont pas adaptés aux tarifs à la demande en raison d'une consommation élevée des ressources et, en général, ils peuvent ne pas évoluer correctement. Pour résoudre cette erreur, vous pouvez optimiser la requête ou passer au modèle de tarification basé sur la capacité (emplacements). Pour en savoir plus sur l'optimisation des requêtes, consultez Éviter les antimodèles SQL. |
bloqué | 403 |
Cette erreur apparaît lorsque BigQuery a temporairement mis sur liste de blocage l'opération que vous avez tenté d'exécuter, généralement pour éviter une interruption du service. |
Pour en savoir plus, contactez l'assistance. |
dupliquer | 409 |
Cette erreur apparaît lorsqu'on essaye de créer une tâche, un ensemble de données ou une table qui existe déjà. L'erreur est également renvoyée lorsque la propriété de la tâche |
Renommez la ressource que vous essayez de créer ou modifiez la valeur |
internalError | 500 |
Cette erreur apparaît lorsqu'une erreur interne se produit dans BigQuery. |
Attendez conformément aux exigences d'attente décrites dans le contrat de niveau de service de BigQuery, puis réessayez. Si l'erreur persiste, contactez l'assistance ou signalez un bug à l'aide de l'outil de suivi des problèmes BigQuery. Vous pouvez également réduire la fréquence de cette erreur en utilisant des réservations. |
non valide | 400 |
Cette erreur apparaît en cas de saisie non valide autre qu'une requête non valide, par exemple des champs obligatoires non remplis ou un schéma de table non valide.
Les requêtes non valides renvoient une erreur |
|
invalidQuery | 400 |
Cette erreur apparaît lorsqu'on tente d'exécuter une requête non valide. |
Recherchez les erreurs de syntaxe dans la requête. La documentation de référence sur les requêtes contient des descriptions et des exemples de construction de requêtes valides. |
invalidUser | 400 |
Cette erreur apparaît lorsque vous tentez de planifier une requête avec des identifiants utilisateur non valides. |
Actualisez les identifiants utilisateur, comme expliqué dans la section Planifier des requêtes. |
jobBackendError | 400 |
Cette erreur apparaît lorsque la tâche a été créée avec succès, mais a échoué avec une erreur interne. Cette erreur peut s'afficher dans |
Réessayez d'exécuter la tâche avec un nouveau |
jobInternalError | 400 |
Cette erreur apparaît lorsque la tâche a été créée avec succès, mais a échoué avec une erreur interne. Cette erreur peut s'afficher dans |
Réessayez d'exécuter la tâche avec un nouveau |
jobRateLimitExceeded | 400 |
Cette erreur apparaît lorsque la tâche a été créée avec succès, mais a échoué avec une erreur rateLimitExceeded. Cette erreur peut s'afficher dans |
Utilisez un intervalle exponentiel entre les tentatives pour réduire le taux de requêtes, puis relancez le job avec un nouvel |
notFound | 404 |
Cette erreur apparaît lorsque vous faites référence à une ressource (un ensemble de données, une table ou une tâche) qui n'existe pas, ou lorsque l'emplacement dans la requête ne correspond pas à l'emplacement de la ressource (par exemple, l'emplacement dans lequel une tâche est exécutée). Elle peut également survenir lorsque vous utilisez des décorateurs de table pour faire référence à des tables supprimées ayant récemment reçu des données en streaming. |
Corrigez les noms de ressources, spécifiez correctement l'emplacement ou attendez au moins six heures après l'opération de diffusion en flux continu avant d'interroger une table supprimée. |
notImplemented | 501 |
Cette erreur de tâche apparaît lorsqu'on tente d'accéder à une fonctionnalité qui n'est pas implémentée. |
Pour en savoir plus, contactez l'assistance. |
proxyAuthenticationRequired | 407 |
Cette erreur est renvoyée entre l'environnement client et le serveur proxy lorsque la requête ne contient pas d'identifiants d'authentification valides pour le serveur proxy. Pour en savoir plus, consultez 407 Proxy Authentication Required. |
Le dépannage est spécifique à votre environnement. Si cette erreur s'affiche lorsque vous travaillez dans Java, assurez-vous d'avoir défini les propriétés |
quotaExceeded | 403 |
Cette erreur apparaît lorsque le projet dépasse un quota BigQuery ou un quota personnalisé, ou lorsque la facturation n'est pas configurée et que vous avez dépassé la version gratuite pour les requêtes. |
Affichez la propriété |
rateLimitExceeded | 403 |
Cette erreur apparaît si le projet dépasse une limitation du débit à court terme en envoyant trop de requêtes trop rapidement. Vous pouvez par exemple consulter les limitations du débit pour les tâches de requête et les limitations du débit pour les requêtes d'API. |
Ralentissez la fréquence des demandes. |
resourceInUse | 400 |
Cette erreur apparaît lorsque vous tentez de supprimer un ensemble de données contenant des tables ou de supprimer une tâche en cours d'exécution. |
Videz l'ensemble de données avant d'essayer de le supprimer ou attendez la fin d'une tâche avant de le supprimer. |
resourcesExceeded | 400 |
Cette erreur apparaît lorsque votre tâche utilise trop de ressources. |
Cette erreur apparaît lorsque votre tâche utilise trop de ressources. Pour en savoir plus, consultez Résoudre les erreurs de dépassement de ressources. |
responseTooLarge | 403 |
Cette erreur apparaît lorsque les résultats de la requête dépassent la taille de réponse maximale. Certaines requêtes s'exécutent en plusieurs étapes. Cette erreur survient dès que l'une des étapes renvoie une réponse d'une taille trop élevée, même si le résultat final est inférieur au maximum. Cette erreur survient généralement dans les requêtes qui utilisent une clause |
Il peut parfois être utile d'ajouter une clause |
opération arrêtée | 200 |
Ce code d'état apparaît lorsqu'une tâche est annulée. |
|
tableUnavailable | 400 |
Certaines tables BigQuery s'appuient sur des données gérées par d'autres équipes produit Google. Cette erreur indique que l'une de ces tables est indisponible. |
Lorsque vous rencontrez ce message d'erreur, vous pouvez essayer de relancer la requête (voir les suggestions de dépannage de internalError) ou contacter l'équipe produit Google qui vous a donné accès à ses données. |
délai avant expiration | 400 |
Le job a expiré. |
Pensez à réduire le volume de travail réalisé par votre opération afin qu'elle puisse s'achever dans le délai imparti. Pour en savoir plus, consultez Résoudre les erreurs de quota et de limite. |
Exemple de réponse d'erreur
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"
}
}
Calculer le taux de requêtes en échec et le temps d'activité
La majorité des erreurs 500 et 503 peuvent être résolues en effectuant une nouvelle tentative avec un intervalle exponentiel entre les tentatives. Si les erreurs 500 et 503 persistent, vous pouvez calculer le taux global de requêtes ayant échoué et le temps d'activité correspondant pour le comparer au contrat de niveau de service (SLA) BigQuery et déterminer si le service fonctionne comme prévu.
Pour calculer le taux global de requêtes ayant échoué au cours des 30 derniers jours, divisez le nombre de requêtes ayant échoué pour un appel ou une méthode d'API spécifique au cours des 30 derniers jours par le nombre total de requêtes pour cet appel ou cette méthode d'API au cours des 30 derniers jours. Multipliez cette valeur par 100 pour obtenir le pourcentage moyen de requêtes ayant échoué sur 30 jours.
Par exemple, vous pouvez interroger les données Cloud Logging pour obtenir le nombre total de requêtes jobs.insert
et le nombre de requêtes jobs.insert
ayant échoué, puis effectuer le calcul. Vous pouvez également obtenir les valeurs du taux d'erreur à partir du tableau de bord des API ou à l'aide de l'explorateur de métriques dans Cloud Monitoring. Ces options n'incluent pas les données sur les problèmes de mise en réseau ou de routage rencontrés entre le client et BigQuery. Nous vous recommandons donc également d'utiliser un système de journalisation et de reporting côté client pour calculer plus précisément les taux d'échec.
Commencez par soustraire le taux global de requêtes ayant échoué à 100 %. Si cette valeur est supérieure ou égale à celle décrite dans le contrat de niveau de service BigQuery, le temps d'activité répond également au contrat de niveau de service BigQuery. Toutefois, si cette valeur est inférieure à celle décrite dans le SLA, calculez manuellement le temps d'activité.
Pour calculer le temps d'activité, vous devez connaître le nombre de minutes considérées comme temps d'arrêt du service. Une interruption de service désigne une période d'une minute avec un taux d'erreur supérieur à 10 %, calculé selon les définitions du SLA. Pour calculer la disponibilité, prenez le nombre total de minutes des 30 derniers jours et soustrayez le nombre total de minutes pendant lesquelles le service était indisponible. Divisez le temps restant par le nombre total de minutes des 30 derniers jours, puis multipliez cette valeur par 100 pour obtenir le pourcentage de disponibilité sur 30 jours. Pour en savoir plus sur les définitions et les calculs liés au contrat de niveau de service , consultez Contrat de niveau de service (SLA) BigQuery.
Si votre pourcentage de disponibilité mensuel est supérieur ou égal à la valeur décrite dans le SLA BigQuery, l'erreur est très probablement due à un problème temporaire. Vous pouvez donc continuer à réessayer à l'aide de l'backoff exponentiel.
Si la disponibilité est inférieure à la valeur indiquée dans le SLA, contactez l'assistance pour obtenir de l'aide et partagez les calculs de la disponibilité et du taux d'erreur global observés.
Erreurs d'authentification
Les erreurs émises par le système de génération de jetons OAuth renvoient l'objet JSON suivant, tel que défini par la spécification OAuth2.
{"error" : "_description_string_"}
L'erreur est accompagnée d'une erreur Bad Request 400
HTTP ou d'une erreur Unauthorized 401
HTTP. _description_string_
est l'un des codes d'erreur définis par la spécification OAuth2. Exemple :
{"error":"invalid_client"}
Examiner les erreurs
Vous pouvez utiliser l'explorateur de journaux pour afficher les erreurs d'authentification pour des tâches, des utilisateurs ou d'autres champs d'application spécifiques. Vous trouverez ci-dessous des exemples de filtres de l'explorateur de journaux que vous pouvez utiliser pour examiner les erreurs d'authentification :
Recherchez les tâches ayant échoué en raison de problèmes d'autorisation dans les journaux d'audit des refus de règles :
resource.type="bigquery_resource" protoPayload.status.message=~"Access Denied" logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access"
Remplacez
PROJECT_ID
par l'ID du projet contenant la ressource.Recherchez un utilisateur ou un compte de service spécifique utilisé pour l'authentification :
resource.type="bigquery_resource" protoPayload.authenticationInfo.principalEmail="EMAIL"
Remplacez
EMAIL
par l'adresse e-mail de l'utilisateur ou du compte de service.Recherchez les modifications apportées aux règles de Identity and Access Management dans les journaux d'audit des activités d'administration :
protoPayload.methodName=~"SetIamPolicy" logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity"
Recherchez les modifications apportées à un ensemble de données BigQuery spécifique dans les journaux d'audit de l'accès aux données :
resource.type="bigquery_resource" protoPayload.resourceName="projects/PROJECT_ID/datasets/DATASET_ID" logName=projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access
Remplacez
DATASET_ID
par l'ID de l'ensemble de données contenant la ressource.
Messages d'erreur liés à la connectivité
Le tableau suivant présente les messages d'erreur susceptibles de s'afficher en raison de problèmes de connectivité intermittente lorsque vous utilisez des bibliothèques clientes ou appelez l'API BigQuery à partir de votre code :
Message d'erreur | Bibliothèque cliente ou API | Dépannage |
---|---|---|
com.google.cloud.bigquery.BigQueryException: Read timed out | Java | Définissez un délai avant expiration plus élevé. |
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 | Implémentez un mécanisme de nouvelle tentative et définissez un délai avant expiration plus élevé. |
javax.net.ssl.SSLHandshakeException: Remote host terminated the handshake | Java | Implémentez un mécanisme de nouvelle tentative et définissez un délai avant expiration plus élevé. |
BrokenPipeError : [Errno 32] Broken pipe | Python | Implémentez un mécanisme de nouvelle tentative. Pour en savoir plus sur cette erreur, consultez BrokenPipeError. |
Connection aborted. RemoteDisconnected('Remote end closed connection without response' | Python | Définissez un délai avant expiration plus élevé. |
SSLEOFError (EOF occurred in violation of protocol) | Python | Cette erreur est renvoyée à la place d'une erreur HTTP 413 (ENTITY_TOO_LARGE ). Réduisez la taille de la requête. |
TaskCanceledException: A task was canceled | Bibliothèque .NET | Augmentez la valeur du délai avant expiration côté client. |
google.api_core.exceptions.PreconditionFailed: 412 PATCH | Python | Cette erreur apparaît lorsque vous essayez de mettre à jour une ressource de table à l'aide d'une requête HTTP. Assurez-vous que l'ETag de l'en-tête HTTP n'est pas obsolète. Pour les opérations au niveau de la table ou de l'ensemble de données, assurez-vous que la ressource n'a pas été modifiée depuis la dernière fois qu'elle a été instanciée et recréez l'objet si nécessaire. |
Échec de l'établissement d'une nouvelle connexion : [Errno 110] Délai de connexion dépassé | Bibliothèques clientes | Cette erreur apparaît lorsque cette requête a atteint la fin du fichier (EOF) lors du streaming ou de la lecture de données depuis BigQuery. Implémentez un mécanisme de nouvelle tentative et définissez un délai avant expiration plus élevé. |
socks.ProxyConnectionError: Erreur de connexion au proxy HTTP
|
Bibliothèques clientes | Résolvez les problèmes liés à l'état et aux paramètres du proxy. Implémentez un mécanisme de nouvelle tentative et définissez un délai avant expiration plus élevé. |
Fin de fichier inattendue ou 0 octets reçus du flux de transport | Bibliothèques clientes | Implémentez un mécanisme de nouvelle tentative et définissez un délai avant expiration plus élevé. |
Messages d'erreur de la consoleTrusted Cloud
Le tableau suivant répertorie les messages d'erreur susceptibles de s'afficher lorsque vous travaillez dans la consoleTrusted Cloud .
Message d'erreur | Description | Dépannage |
---|---|---|
Réponse "Erreur inconnue" renvoyée par le serveur. | Ce message s'affiche lorsque la console Trusted Cloud reçoit une alerte d'erreur inconnue de la part du serveur. Par exemple, cela peut se produire lorsque vous cliquez sur un ensemble de données ou un autre type de lien et que la page ne peut pas être affichée. | Passez en navigation privée ou en mode incognito dans votre navigateur, puis répétez l'action qui a provoqué l'erreur. Si aucune erreur ne se produit en mode navigation privée, l'erreur peut être due à une extension du navigateur, un bloqueur de publicités, par exemple. Désactivez les extensions du navigateur en mode de navigation normal (non privé), puis vérifiez si le problème est résolu. |