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 les transferts basés sur des événements si vous avez besoin d'ingérer des données de manière incrémentielle pour optimiser 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 que les données soient disponibles immédiatement, 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, demandez-vous si vous devez privilégier l'ingestion incrémentielle par lot économique 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 événementiels vers BigQuery sont soumis aux limitations 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 cette période.
- Les transferts basés sur des événements ne sont pas compatibles avec les paramètres d'exécution pour l'URI source ou 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 axées sur les événements.
Configurer un transfert Cloud Storage basé sur les événements
Les transferts déclenchés par 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 n'entraîne pas la suppression des données associées dans la table BigQuery de destination.
Avant de commencer
Avant de configurer un transfert Cloud Storage basé sur les événements, vous devez effectuer les étapes suivantes :
Activez l'API Pub/Sub pour le projet qui reçoit les notifications.
Si vous êtes l'administrateur Cloud Storage (
roles/storage.admin
) et l'administrateur Pub/Sub (roles/pubsub.admin
), vous pouvez passer à Créer une configuration de transfert basée sur les événements.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ôlesroles/storage.admin
etroles/pubsub.admin
, ou de configurer Pub/Sub et les autorisations de l'agent de service dans les sections suivantes. Utilisez ensuite l'abonnement Pub/Sub préconfiguré pour créer une configuration de transfert basée sur les événements.Autorisations détaillées requises pour configurer les notifications de configuration de transfert en fonction 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
etpubsub.subscriptions.create
.Si vous prévoyez 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
Les rôles IAM prédéfinis
pubsub.admin
etstorage.admin
disposent de toutes les autorisations requises pour configurer un transfert Cloud Storage basé sur les événements. Pour en savoir plus, consultez la page Contrôle des accès Pub/Sub.
Configurer les notifications Pub/Sub dans Cloud Storage
Assurez-vous de remplir les conditions préalables pour utiliser Pub/Sub avec Cloud Storage.
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 Appliquer une configuration de notification.
Vérifiez que la notification Pub/Sub est correctement configurée pour Cloud Storage. Exécutez 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
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 Pub/Sub.Vous pouvez créer un abonnement par extraction à l'aide d'autres méthodes.
Configurer les autorisations de l'agent de service
Recherchez le nom de l'agent de service de transfert de données BigQuery pour votre projet :
Accédez à la page IAM et administration.
Cochez la case Inclure les attributions de rôles fournies par Google.
L'agent de service de transfert de données BigQuery est listé sous le nom
service-<project_number>@gcp-sa-bigquerydatatransfer.s3ns-system.iam.gserviceaccount.com
et dispose du rôle d'agent de service de transfert de données BigQuery.
Pour en savoir plus sur les agents de service, consultez Agents de service.
Attribuez le rôle
pubsub.subscriber
à l'agent du service de transfert de données BigQuery.Cloud Console
Suivez les instructions de la section Contrôler l'accès via la console Trusted Cloud pour attribuer le rôle
Pub/Sub Subscriber
à l'agent du service de transfert de données BigQuery. Ce rôle peut être attribué au niveau du thème, de l'abonnement ou du projet.CLI
gcloud
Suivez les instructions de la section Définir une règle pour ajouter la liaison suivante :
{ "role": "roles/pubsub.subscriber", "members": [ "serviceAccount:project-PROJECT_NUMBER@gcp-sa-bigquerydatatransfer.s3ns-system.iam.gserviceaccount.com" }
Remplacez
PROJECT_NUMBER
par l'ID du projet qui héberge le transfert, et où les ressources sont créées et facturées.Attribution de l'utilisation du quota : lorsque l'agent du service de transfert de données BigQuery accède à l'abonnement Pub/Sub, l'utilisation du quota est facturée au projet utilisateur.
Vérifiez que l'agent du service de transfert de données BigQuery dispose du rôle
pubsub.subscriber
:Dans la console Trusted Cloud , accédez à la page Pub/Sub.
Sélectionnez l'abonnement Pub/Sub que vous avez utilisé dans le transfert basé sur des événements.
Si le panneau d'informations est masqué, cliquez sur Afficher le panneau d'informations en haut à droite.
Dans l'onglet Autorisations, vérifiez que l'agent de service du service de transfert de données BigQuery dispose du rôle
pubsub.subscriber
.
Commandes résumées 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 indiqué 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.s3ns-system.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 les événements en créant un transfert Cloud Storage et en sélectionnant Basé sur les événements comme Type de programmation. 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 compléter les configurations requises pour les notifications Pub/Sub dans Cloud Storage et les configurations des autorisations de l'agent de service avant de pouvoir créer le transfert basé sur les événements.