Transferencias basadas en eventos
Puede usar BigQuery Data Transfer Service para crear transferencias basadas en eventos que carguen datos automáticamente en función de las notificaciones de eventos. Te recomendamos que uses transferencias basadas en eventos si necesitas una ingesta de datos incremental que optimice la eficiencia de los costes.
Cuando configura transferencias basadas en eventos, puede haber un retraso de unos minutos entre cada transferencia de datos. Si necesitas que los datos estén disponibles de inmediato, te recomendamos que uses la API Storage Write, que transmite datos directamente a BigQuery con la latencia más baja posible. La API Storage Write ofrece actualizaciones en tiempo real para los casos prácticos más exigentes.
Cuando tengas que elegir entre las dos, piensa si necesitas priorizar la ingestión incremental de lotes rentable con transferencias basadas en eventos o si prefieres la flexibilidad de la API Storage Write.
Fuentes de datos con compatibilidad con transferencias basadas en eventos
BigQuery Data Transfer Service puede usar transferencias basadas en eventos con las siguientes fuentes de datos:
Limitaciones
Las transferencias basadas en eventos a BigQuery están sujetas a las siguientes limitaciones:
- Una vez que se activa una transferencia basada en eventos, BigQuery Data Transfer Service espera hasta 10 minutos antes de activar la siguiente ejecución de la transferencia, independientemente de si llega un evento en ese tiempo.
- Las transferencias basadas en eventos no admiten parámetros de tiempo de ejecución para el URI de origen o la ruta de datos.
- Varias configuraciones de transferencia basadas en eventos no pueden reutilizar la misma suscripción de Pub/Sub.
Configurar una transferencia basada en eventos de Cloud Storage
Las transferencias basadas en eventos de Cloud Storage usan notificaciones de Pub/Sub para saber cuándo se han modificado o añadido objetos en el segmento de origen. Cuando se usa el modo de transferencia incremental, si se elimina un objeto del segmento de origen, no se eliminan los datos asociados de la tabla de BigQuery de destino.
Antes de empezar
Antes de configurar una transferencia basada en eventos de Cloud Storage, debes seguir estos pasos:
Habilita la API Pub/Sub en el proyecto que recibe las notificaciones.
Si tienes el rol Administrador de Cloud Storage (
roles/storage.admin
) y el rol Administrador de Pub/Sub (roles/pubsub.admin
), puedes ir a Crear una configuración de transferencia basada en eventos.Si no tienes los roles Administrador de Cloud Storage (
roles/storage.admin
) y Administrador de Pub/Sub (roles/pubsub.admin
), pide a tu administrador que te los asigne o que complete la configuración de Pub/Sub y los permisos del agente de servicio en las siguientes secciones, y que use la suscripción de Pub/Sub preconfigurada para crear una configuración de transferencia basada en eventos.roles/storage.admin
roles/pubsub.admin
Permisos detallados necesarios para configurar las notificaciones de configuración de transferencia basada en eventos:
Si tienes previsto crear temas y suscripciones para publicar notificaciones, debes tener los permisos
pubsub.topics.create
ypubsub.subscriptions.create
.Tanto si tienes previsto usar temas y suscripciones nuevos como si ya tienes, debes tener los siguientes permisos. Si ya has creado temas y suscripciones en Pub/Sub, es probable que ya tengas estos permisos.
Debes tener los siguientes permisos en el bucket de Cloud Storage en el que quieras configurar las notificaciones de Pub/Sub.
storage.buckets.get
storage.buckets.update
El rol de gestión de identidades y accesos predefinido
pubsub.admin
ystorage.admin
tiene todos los permisos necesarios para configurar una transferencia basada en eventos de Cloud Storage. Para obtener más información, consulta Control de acceso de Pub/Sub.
Configurar notificaciones de Pub/Sub en Cloud Storage
Asegúrate de que cumples los requisitos previos para usar Pub/Sub con Cloud Storage.
Aplica una configuración de notificaciones a tu segmento de Cloud Storage:
gcloud storage buckets notifications create gs://BUCKET_NAME --topic=TOPIC_NAME --event-types=OBJECT_FINALIZE
Haz los cambios siguientes:
BUCKET_NAME
: nombre del segmento de Cloud Storage que quieres que active eventos de notificación de archivos.TOPIC_NAME
: el nombre del tema de Pub/Sub del que quieres recibir los eventos de notificación de archivos.
También puedes añadir una configuración de notificaciones con otros métodos además de la CLI de gcloud. Para obtener más información, consulta Aplicar una configuración de notificaciones.
Verifica que la notificación de Pub/Sub esté configurada correctamente para Cloud Storage. Usa el comando
gcloud storage buckets notifications list
:gcloud storage buckets notifications list gs://BUCKET_NAME
Si la solicitud se completa correctamente, la respuesta será similar a la siguiente:
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
Crea una suscripción de extracción para el tema:
gcloud pubsub subscriptions create SUBSCRIPTION_ID --topic=TOPIC_NAME
Sustituye
SUBSCRIPTION_ID
por el nombre o el ID de tu nueva suscripción pull de Pub/Sub.Puedes crear una suscripción de extracción con otros métodos.
Configurar los permisos del agente de servicio
Para encontrar el nombre del agente de BigQuery Data Transfer Service de tu proyecto, sigue estos pasos:
Ve a la página IAM y administración.
Selecciona la casilla Incluir concesiones de roles proporcionadas por Google.
El agente de BigQuery Data Transfer Service se muestra con el nombre
service-<project_number>@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com
y se le asigna el rol Agente de BigQuery Data Transfer Service.
Para obtener más información sobre los agentes de servicio, consulta Agentes de servicio.
Asigna el rol
pubsub.subscriber
al agente de BigQuery Data Transfer Service.consola de Cloud
Sigue las instrucciones de Controlar el acceso a través de la consola Google Cloud para asignar el rol
Pub/Sub Subscriber
al agente de BigQuery Data Transfer Service. El rol se puede conceder a nivel de tema, suscripción o proyecto.gcloud
CLISigue las instrucciones de la sección Definir una política para añadir el siguiente enlace:
{ "role": "roles/pubsub.subscriber", "members": [ "serviceAccount:project-PROJECT_NUMBER@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com" }
Sustituye
PROJECT_NUMBER
por el ID del proyecto en el que se crean y se facturan los recursos de transferencia.Atribución del uso de la cuota: cuando el agente de BigQuery Data Transfer Service accede a la suscripción de Pub/Sub, el uso de la cuota se carga en el proyecto del usuario.
Verifique que el agente de BigQuery Data Transfer Service tenga asignado el rol
pubsub.subscriber
:En la Google Cloud consola, ve a la página Pub/Sub.
Selecciona la suscripción de Pub/Sub que has usado en la transferencia basada en eventos.
Si el panel de información está oculto, haz clic en Mostrar panel de información en la esquina superior derecha.
En la pestaña Permisos, comprueba que el agente de servicio de BigQuery Data Transfer Service tenga el rol
pubsub.subscriber
.
Resumen de los comandos para configurar notificaciones y permisos
Los siguientes comandos de la CLI de Google Cloud incluyen todos los comandos necesarios para configurar las notificaciones y los permisos, tal como se detalla en las secciones anteriores.
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
Haz los cambios siguientes:
PROJECT_ID
: el ID de tu proyecto.CONFIG_NAME
: nombre para identificar esta configuración de transferencia.
Crear una configuración de transferencia
Para crear una transferencia de Cloud Storage basada en eventos, cree una transferencia de Cloud Storage y seleccione Basada en eventos como Tipo de programación. Como administrador de Cloud Storage (roles/storage.admin
) y administrador de Pub/Sub (roles/pubsub.admin
), tienes permisos suficientes para que BigQuery Data Transfer Service configure automáticamente Cloud Storage para enviar notificaciones.
Si no tienes los roles Administrador de Cloud Storage (roles/storage.admin
) y Administrador de Pub/Sub (roles/pubsub.admin
), debes pedirle a tu administrador que te conceda los roles o que complete las configuraciones de notificaciones de Pub/Sub en Cloud Storage y las configuraciones de permisos de agente de servicio necesarias para poder crear la transferencia basada en eventos.