Résoudre les problèmes liés aux abonnements BigQuery

Cette page fournit des conseils de dépannage courants pour les abonnements BigQuery.

Vérifier l'état d'un abonnement BigQuery

Pour vérifier l'état d'un abonnement, procédez comme suit:

  1. Dans la console Google Cloud, accédez à la page d'abonnement Pub/Sub.

    Accéder aux abonnements

  2. Vérifiez l'icône État de votre abonnement BigQuery.

    Si l'icône est une coche verte, cela signifie que l'abonnement est opérationnel.

    Si l'icône est un point d'exclamation rouge, l'abonnement est en état d'erreur.

  3. Cliquez sur l'abonnement BigQuery.

    La page des détails de l'abonnement s'ouvre.

  4. Vérifiez si le message d'erreur s'affiche sous État de l'abonnement.

  5. En fonction du message d'erreur, accédez à la section appropriée de cette page pour résoudre le problème.

Une fois le problème résolu, l'abonnement finit par revenir à un état opérationnel.

Impossible de créer ou de mettre à jour l'abonnement

Voici quelques-uns des problèmes courants que vous pouvez rencontrer si vous rencontrez des difficultés pour créer ou mettre à jour un abonnement BigQuery.

Erreur "Table introuvable"

Si la table que vous spécifiez dans le workflow de création ou de mise à jour d'abonnement n'existe pas, le workflow renvoie une erreur "Table introuvable". Dans la console Google Cloud, ce message se présente comme suit:

The BigQuery table or dataset specified cannot be found.

Pour résoudre le problème, créez la table et assurez-vous de pouvoir vérifier son state avant de l'utiliser avec un abonnement BigQuery.

Erreur de correspondance du schéma

Si les schémas de la table et du sujet ne sont pas compatibles, le workflow de création ou de mise à jour de l'abonnement renvoie une erreur d'incompatibilité de schéma. Dans la console Google Cloud, ce message se présente comme suit:

Incompatible schema type for field project_ids: expected INT64, got STRING

Le message d'erreur spécifié concerne une non-concordance du schéma pour un champ appelé project_ids. Selon le type d'incompatibilité de schéma que vous rencontrez, une variante du message d'erreur peut s'afficher différemment.

Pour résoudre le problème, vérifiez si les mappages de schéma sont compatibles.

Erreur de compte de service

Si vous n'avez pas configuré le compte de service Pub/Sub avec les autorisations appropriées, le workflow de création ou de mise à jour d'un abonnement renvoie une erreur. Dans la console Google Cloud, ce message se présente comme suit:

Service account service-1234234234@gcp-sa-pubsub.iam.gserviceaccount.com
is missing permissions required to write to the BigQuery table:
bigquery.tables.get, bigquery.tables.updateData.

Pour résoudre le problème, vérifiez que le compte de service dispose des autorisations appropriées.

État de l'abonnement : point d'exclamation rouge

Si vous modifiez la table après avoir créé un abonnement, cela peut affecter la façon dont Pub/Sub écrit les messages dans la table. Si une modification entraîne un problème, le champ d'état de l'abonnement est défini sur un état d'erreur.

Sur la page d'informations de l'abonnement, vérifiez l'état du champ Subscription state. Le champ Subscription state fournit une erreur plus spécifique, qui peut être l'une des suivantes:

  • table introuvable: la table est supprimée. Créez une table et vérifiez son état. Consultez Obtenir des informations sur la table.

  • Autorisation de table refusée: le compte de service Pub/Sub n'est plus autorisé à écrire dans la table. Vérifiez si le compte de service dispose des autorisations appropriées.

  • Non-concordance du schéma de table: le schéma de la table n'est plus compatible avec les paramètres d'abonnement de BigQuery. Vérifiez si les mappages de schéma sont compatibles.

Lorsqu'un abonnement Pub/Sub est en état d'erreur, les messages ne sont pas écrits dans la table BigQuery et restent en attente dans les tâches d'abonnement. Notez que les messages ne sont pas distribués dans un sujet de lettre morte joint, s'il est configuré. Les messages non confirmés sont conservés pendant la période définie dans message_retention_duration(7 jours par défaut).

Un backlog s'accumule

Si vous constatez que des messages en attente s'accumulent dans l'abonnement ou que des messages arrivent dans le sujet de lettres mortes d'un abonnement, consultez les causes possibles suivantes.

Message d'erreur "INVALID_ARGUMENT"

Cette erreur se produit lorsque le format du message fourni est considéré comme valide par Pub/Sub, mais pas le schéma de la table de destination BigQuery. Cela signifie qu'un ou plusieurs champs du message comportent des valeurs non autorisées par le schéma de la table BigQuery. Consultez la compatibilité des schémas pour vérifier que les types et formats de données sont corrects. Voici quelques-unes des erreurs les plus courantes:

  • Une chaîne vide ("") n'est pas un fichier JSON valide. Lorsque vous envoyez des données à une colonne de table BigQuery JSON pouvant avoir une valeur nulle, fournissez un objet JSON vide ({}), null ou une chaîne JSON vide ("\"\"") pour représenter les valeurs manquantes. L'envoi d'une chaîne vide entraîne une erreur.

  • Si la valeur d'un champ de message dépasse la longueur maximale du champ BigQuery, le message échoue en raison des limites de taille.

Pour résoudre les erreurs INVALID_ARGUMENT, ajoutez un sujet de lettres mortes à l'abonnement qui vous intéresse. Le sujet des lettres mortes capture les messages qui n'ont pas pu être écrits dans BigQuery, ainsi qu'un attribut appelé CloudPubSubDeadLetterSourceDeliveryErrorMessage qui explique la raison de l'échec.

Ces échecs de diffusion sont également visibles dans l'Explorateur de métriques. Sélectionnez la métrique pubsub.googleapis.com/subscription/push_request_count et filtrez par response_code=invalid_argument.

Message d'erreur "RESOURCE_EXHAUSTED"

Si l'écriture des messages dans BigQuery prend du temps, vous devrez peut-être augmenter le quota de distribution Pub/Sub ou le quota de débit en écriture de l'espace de stockage BigQuery de votre projet. Pour vérifier si vous faites face à des limites de quota, examinez la métrique de requêtes push (subscription/push_request_count) pour détecter toute erreur resource_exhausted.

Une autre façon de diagnostiquer les problèmes de quota consiste à vérifier le quota du projet. Accédez à IAM et administration > Quotas dans le projet contenant votre ressource Pub/Sub ou votre instance BigQuery. Recherchez le quota concerné, pubsub.googleapis.com/regionalpushsubscriber ou bigquerystorage.googleapis.com/write/append_bytes. Si l'un des quotas nécessite une augmentation, vous pouvez demander une augmentation de quota.

Table partitionnée par heure affichant __UNPARTITIONED__ dans la colonne "ID de partition"

Lorsqu'une table de destination BigQuery est partitionnée par heure, les lignes arrivent initialement dans une partition spéciale nommée __UNPARTITIONED__ dans la vue INFORMATION_SCHEMA.PARTITIONS. Ce comportement est normal pour les tables utilisant le partitionnement par date d'ingestion.

BigQuery utilise un tampon de flux de données pour optimiser le processus d'écriture. Les données peuvent résider dans la partition __UNPARTITIONED__ jusqu'à ce qu'il y ait suffisamment de volume ou qu'au moins une heure se soit écoulée. Une fois ces conditions remplies, BigQuery repartitionne les données dans la partition horaire appropriée.

Vous pouvez surveiller les données de la partition __UNPARTITIONED__ à l'aide de la vue INFORMATION_SCHEMA.PARTITIONS.

Étapes suivantes

  • Si vous rencontrez toujours des problèmes avec votre abonnement BigQuery, consultez la page Obtenir de l'aide.