Transferts basés sur des événements

Vous pouvez utiliser le service de transfert de données BigQuery pour créer des transferts basés sur des événements qui chargent automatiquement les données en fonction des notifications d'événements. Nous vous recommandons d'utiliser des transferts basés sur des événements si vous avez besoin d'une ingestion de données incrémentielle qui optimise l'efficacité des coûts.

Lorsque vous configurez des transferts basés sur des événements, un délai de quelques minutes peut s'écouler entre chaque transfert de données. Si vous avez besoin d'une disponibilité immédiate des données, nous vous recommandons d'utiliser l'API Storage Write, qui diffuse les données directement dans BigQuery avec la latence la plus faible possible. L'API Storage Write fournit des mises à jour en temps réel pour les cas d'utilisation les plus exigeants.

Lorsque vous choisissez entre les deux, déterminez si vous devez donner la priorité à l'ingestion par lot incrémentielle rentable avec des transferts basés sur des événements ou si vous préférez la flexibilité de l'API Storage Write.

Sources de données compatibles avec les transferts basés sur des événements

Le service de transfert de données BigQuery peut utiliser des transferts basés sur des événements avec les sources de données suivantes :

Limites

Les transferts basés sur des événements vers BigQuery sont soumis aux limites suivantes :

  • Une fois qu'un transfert basé sur des événements est déclenché, le service de transfert de données BigQuery attend jusqu'à 10 minutes avant de déclencher la prochaine exécution du transfert, qu'un événement arrive ou non pendant ce délai.
  • Les transferts basés sur des événements ne sont pas compatibles avec les paramètres d'exécution pour l'URI source ni le chemin d'accès aux données.
  • Le même abonnement Pub/Sub ne peut pas être réutilisé par plusieurs configurations de transfert basées sur des événements.

Configurer un transfert Cloud Storage basé sur des événements

Les transferts basés sur des événements depuis Cloud Storage utilisent des notifications Pub/Sub pour savoir quand des objets du bucket source ont été modifiés ou ajoutés. Lorsque vous utilisez le mode de transfert incrémentiel, la suppression d'un objet dans le bucket source ne supprime pas les données associées dans la table BigQuery de destination.

Avant de commencer

Avant de configurer un transfert Cloud Storage basé sur des événements, vous devez procéder comme suit :

  1. Activez l'API Pub/Sub pour le projet qui reçoit les notifications.

    Activer l'API

  2. Si vous êtes administrateur Cloud Storage (roles/storage.admin) et administrateur Pub/Sub (roles/pubsub.admin), vous pouvez passer à la section Créer une configuration de transfert basée sur des événements.

  3. Si vous n'êtes pas administrateur Cloud Storage (roles/storage.admin) ni administrateur Pub/Sub (roles/pubsub.admin), demandez à votre administrateur de vous attribuer les rôles roles/storage.admin et roles/pubsub.admin, ou de configurer Pub/Sub et configurer les autorisations de l'agent de service dans les sections suivantes, puis utilisez l'abonnement Pub/Sub préconfiguré pour créer une configuration de transfert basée sur les événements.

  4. Autorisations détaillées requises pour configurer les notifications de configuration de transfert basées sur des événements :

    • Si vous prévoyez de créer des sujets et des abonnements pour publier des notifications, vous devez disposer des autorisations pubsub.topics.create et pubsub.subscriptions.create.

    • Que vous prévoyiez d'utiliser des sujets et des abonnements nouveaux ou existants, vous devez disposer des autorisations suivantes. Si vous avez déjà créé des sujets et des abonnements dans Pub/Sub, vous disposez probablement déjà de ces autorisations.

    • Vous devez disposer des autorisations suivantes sur le bucket Cloud Storage pour lequel vous souhaitez configurer des notifications Pub/Sub.

      • storage.buckets.get
      • storage.buckets.update
    • Le rôle IAM prédéfini pubsub.admin et storage.admin dispose de toutes les autorisations requises pour configurer un transfert Cloud Storage basé sur des événements. Pour en savoir plus, consultez la page Contrôle des accès Pub/Sub.

Configurer des notifications Pub/Sub dans Cloud Storage

  1. Assurez-vous de respecter les prérequis pour utiliser Pub/Sub avec Cloud Storage.

  2. Appliquez une configuration de notification à votre bucket Cloud Storage :

    gcloud storage buckets notifications create gs://BUCKET_NAME --topic=TOPIC_NAME --event-types=OBJECT_FINALIZE

    Remplacez les éléments suivants :

    • BUCKET_NAME : nom du bucket Cloud Storage pour lequel vous souhaitez déclencher des événements de notification de fichier
    • TOPIC_NAME : nom du sujet Pub/Sub pour lequel vous souhaitez recevoir les événements de notification de fichier

    Vous pouvez également ajouter une configuration de notification à l'aide d'autres méthodes que gcloud CLI. Pour en savoir plus, consultez la section Appliquer une configuration de notification.

  3. Vérifiez que la notification Pub/Sub est correctement configurée pour Cloud Storage. Utilisez la commande gcloud storage buckets notifications list :

    gcloud storage buckets notifications list gs://BUCKET_NAME

    Si l'opération réussit, la réponse se présente comme suit :

    etag: '132'
    id: '132'
    kind: storage#notification
    payload_format: JSON_API_V1
    selfLink: https://www.googleapis.com/storage/v1/b/my-bucket/notificationConfigs/132
    topic: //pubsub.googleapis.com/projects/my-project/topics/my-bucket
  4. Créez un abonnement pull pour le sujet :

    gcloud pubsub subscriptions create SUBSCRIPTION_ID --topic=TOPIC_NAME

    Remplacez SUBSCRIPTION_ID par le nom ou l'ID de votre nouvel abonnement pull Pub/Sub.

    Vous pouvez créer un abonnement pull à l'aide d'autres méthodes.

Configurer les autorisations de l'agent de service

  1. Recherchez le nom de l'agent de service de transfert de données BigQuery pour votre projet :

    1. Accédez à la page IAM et administration.

      Accéder à IAM et administration

    2. Cochez la case Inclure les attributions de rôles fournies par Google.

    3. L'agent de service de transfert de données BigQuery est listé avec le nom service-<project_number>@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com et dispose du rôle d'agent de service de transfert de données BigQuery (roles/bigquerydatatransfer.serviceAgent).

      Vérifiez si le compte de service dispose du rôle d&#39;agent de service.

    Pour en savoir plus sur les agents de service, consultez la page Agents de service.

  2. Attribuez le rôle d'abonné Pub/Sub (pubsub.subscriber) à l'agent de service de transfert de données BigQuery.

    Cloud Console

    Suivez les instructions de la section Contrôler l'accès via la Google Cloud console pour attribuer le rôle Pub/Sub Subscriber à l'agent de service de transfert de données BigQuery. Le rôle peut être attribué au niveau du sujet, de l'abonnement ou du projet.

    CLI gcloud

    Suivez les instructions de la section Définir une stratégie pour ajouter la liaison suivante :

    {
      "role": "roles/pubsub.subscriber",
      "members": [
        "serviceAccount:project-PROJECT_NUMBER@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com"
    }

    Remplacez PROJECT_NUMBER par l'ID du projet dans lequel les ressources de transfert sont créées et facturées.

    Attribution de l'utilisation du quota : lorsque l'agent de service de transfert de données BigQuery accède à l'abonnement Pub/Sub, l'utilisation du quota est facturée au projet utilisateur.

  3. Vérifiez que l'agent de service de transfert de données BigQuery dispose du rôle d'abonné Pub/Sub (pubsub.subscriber).

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

      Accéder à Pub/Sub

    2. Sélectionnez l'abonnement Pub/Sub que vous avez utilisé dans le transfert basé sur des événements.

    3. Si le panneau d'informations est masqué, cliquez sur Afficher le panneau d'informations en haut à droite.

    4. Dans l'onglet Autorisations, vérifiez que l'agent de service de transfert de données BigQuery agent de service dispose du rôle d'abonné Pub/Sub (pubsub.subscriber).

    Vérifiez si l&#39;agent de service dispose de pubsub.subscriber sur l&#39;abonnement.

Commandes récapitulatives pour configurer les notifications et les autorisations

Les commandes Google Cloud CLI suivantes incluent toutes les commandes nécessaires pour configurer les notifications et les autorisations, comme décrit dans les sections précédentes.

gcloud

PROJECT_ID=project_id
CONFIG_NAME=config_name
RESOURCE_NAME="bqdts-event-driven-${CONFIG_NAME}"
# Create a Pub/Sub topic.
gcloud pubsub topics create "${RESOURCE_NAME}" --project="${PROJECT_ID}"
# Create a Pub/Sub subscription.
gcloud pubsub subscriptions create "${RESOURCE_NAME}" --project="${PROJECT_ID}" --topic="projects/${PROJECT_ID}/topics/${RESOURCE_NAME}"
# Create a Pub/Sub notification.
gcloud storage buckets notifications create gs://"${RESOURCE_NAME}" --topic="projects/${PROJECT_ID}/topics/${RESOURCE_NAME}" --event-types=OBJECT_FINALIZE
# Grant roles/pubsub.subscriber permission to the DTS service agent.
PROJECT_NUMBER=$(gcloud projects describe "${PROJECT_ID}" --format='value(projectNumber)')
gcloud pubsub subscriptions add-iam-policy-binding "${RESOURCE_NAME}"  --project="${PROJECT_ID}"  --member=serviceAccount:service-"${PROJECT_NUMBER}"@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com  --role=roles/pubsub.subscriber

Remplacez les éléments suivants :

  • PROJECT_ID : ID de votre projet.
  • CONFIG_NAME : nom permettant d'identifier cette configuration de transfert.

Créer une configuration de transfert

Vous pouvez créer un transfert Cloud Storage basé sur des événements en créant un transfert Cloud Storage et en sélectionnant Basé sur des événements comme Type de planification. En tant qu'administrateur Cloud Storage (roles/storage.admin) et administrateur Pub/Sub (roles/pubsub.admin), vous disposez des autorisations suffisantes pour que le service de transfert de données BigQuery configure automatiquement Cloud Storage afin d'envoyer des notifications.

Si vous n'êtes pas administrateur Cloud Storage (roles/storage.admin) ni administrateur Pub/Sub (roles/pubsub.admin), vous devez demander à votre administrateur de vous attribuer les rôles ou de configurer les notifications Pub/Sub requises dans les configurations Cloud Storage et les configurations d'autorisation de l'agent de service avant de pouvoir créer le transfert basé sur des événements.