Transferências orientadas por eventos
Pode usar o Serviço de transferência de dados do BigQuery para criar transferências orientadas por eventos que carregam automaticamente dados com base em notificações de eventos. Recomendamos a utilização de transferências orientadas por eventos se precisar de carregamento de dados incremental que otimize a rentabilidade.
Quando configura transferências baseadas em eventos, pode haver um atraso de alguns minutos entre cada transferência de dados. Se precisar de disponibilidade imediata dos dados, recomendamos que use a API Storage Write, que faz stream de dados diretamente para o BigQuery com a latência mais baixa possível. A API Storage Write oferece atualizações em tempo real para os exemplos de utilização mais exigentes.
Ao escolher entre as duas opções, pondere se precisa de dar prioridade ao carregamento incremental de lotes rentável com transferências acionadas por eventos ou se prefere a flexibilidade da API Google Cloud Storage Write.
Origens de dados com suporte de transferências orientadas por eventos
O Serviço de transferência de dados do BigQuery pode usar transferências baseadas em eventos com as seguintes origens de dados:
Limitações
As transferências baseadas em eventos para o BigQuery estão sujeitas às seguintes limitações:
- Depois de uma transferência baseada em eventos ser acionada, o Serviço de transferência de dados do BigQuery aguarda até 10 minutos antes de acionar a execução da transferência seguinte, independentemente de um evento chegar nesse período.
- As transferências orientadas por eventos não suportam parâmetros de tempo de execução para o URI de origem ou o caminho de dados.
- Não é possível reutilizar a mesma subscrição do Pub/Sub por várias configurações de transferência orientadas por eventos.
Configure uma transferência baseada em eventos do Cloud Storage
As transferências baseadas em eventos do Cloud Storage usam notificações do Pub/Sub para saber quando os objetos no contentor de origem foram modificados ou adicionados. Quando usa o modo de transferência incremental, a eliminação de um objeto no contentor de origem não elimina os dados associados na tabela do BigQuery de destino.
Antes de começar
Antes de configurar uma transferência baseada em eventos do Cloud Storage, tem de realizar os seguintes passos:
Ative a API Pub/Sub para o projeto que recebe notificações.
Se for o administrador do Cloud Storage (
roles/storage.admin
) e o administrador do Pub/Sub (roles/pubsub.admin
), pode avançar para criar uma configuração de transferência orientada por eventos.Se não for o administrador do Cloud Storage (
roles/storage.admin
) nem o administrador do Pub/Sub (roles/pubsub.admin
), peça ao seu administrador para lhe conceder as funçõesroles/storage.admin
eroles/pubsub.admin
ou para concluir a configuração do Pub/Sub e configurar as autorizações do agente de serviço nas secções seguintes e usar a subscrição do Pub/Sub pré-configurada para criar uma configuração de transferência orientada por eventos.Autorizações detalhadas necessárias para configurar notificações de configuração de transferência baseadas em eventos:
Se planeia criar tópicos e subscrições para publicar notificações, tem de ter as autorizações
pubsub.topics.create
epubsub.subscriptions.create
.Quer planeie usar tópicos e subscrições novos ou existentes, tem de ter as seguintes autorizações. Se já criou tópicos e subscrições no Pub/Sub, é provável que já tenha estas autorizações.
Tem de ter as seguintes autorizações no contentor do Cloud Storage no qual quer configurar as notificações do Pub/Sub.
storage.buckets.get
storage.buckets.update
A função de IAM predefinida
pubsub.admin
estorage.admin
tem todas as autorizações necessárias para configurar uma transferência baseada em eventos do Cloud Storage. Para mais informações, consulte o artigo Controlo de acesso do Pub/Sub.
Configure notificações do Pub/Sub no Cloud Storage
Certifique-se de que cumpre os pré-requisitos para usar o Pub/Sub com o Cloud Storage.
Aplique uma configuração de notificação ao seu contentor do Cloud Storage:
gcloud storage buckets notifications create gs://BUCKET_NAME --topic=TOPIC_NAME --event-types=OBJECT_FINALIZE
Substitua o seguinte:
BUCKET_NAME
: o nome do contentor do Cloud Storage para o qual quer acionar eventos de notificação de ficheirosTOPIC_NAME
: o nome do tópico do Pub/Sub no qual quer receber os eventos de notificação de ficheiros
Também pode adicionar uma configuração de notificação através de outros métodos além da CLI gcloud. Para mais informações, consulte o artigo Aplique uma configuração de notificação.
Verifique se a notificação do Pub/Sub está configurada corretamente para o Cloud Storage. Use o comando
gcloud storage buckets notifications list
:gcloud storage buckets notifications list gs://BUCKET_NAME
Se for bem-sucedido, a resposta é semelhante à seguinte:
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
Crie uma subscrição de obtenção para o tópico:
gcloud pubsub subscriptions create SUBSCRIPTION_ID --topic=TOPIC_NAME
Substitua
SUBSCRIPTION_ID
pelo nome ou ID da sua nova subscrição de obtenção do Pub/Sub.Pode criar uma subscrição de obtenção através de outros métodos.
Configure as autorizações do agente de serviço
Encontre o nome do agente do Serviço de transferência de dados do BigQuery para o seu projeto:
Aceda à página IAM e administrador.
Selecione a caixa de verificação Incluir concessões de funções fornecidas pela Google.
O agente do Serviço de transferência de dados do BigQuery é apresentado com o nome
service-<project_number>@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com
e tem a função de agente do Serviço de transferência de dados do BigQuery atribuída.
Para mais informações sobre os agentes de serviços, consulte o artigo Agentes de serviços.
Conceda a função
pubsub.subscriber
ao agente do Serviço de transferência de dados do BigQuery.Cloud Console
Siga as instruções em Controlar o acesso através da Google Cloud consola para conceder a função
Pub/Sub Subscriber
ao agente do Serviço de transferência de dados do BigQuery. A função pode ser concedida ao nível do tópico, da subscrição ou do projeto.gcloud
CLISiga as instruções em Definir uma política para adicionar a seguinte associação:
{ "role": "roles/pubsub.subscriber", "members": [ "serviceAccount:project-PROJECT_NUMBER@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com" }
Substitua
PROJECT_NUMBER
pelo ID do projeto onde os recursos de transferência são criados e faturados.Atribuição da utilização de quotas: quando o agente do Serviço de transferência de dados do BigQuery acede à subscrição do Pub/Sub, a utilização de quotas é cobrada ao projeto do utilizador.
Confirme que ao agente do Serviço de transferência de dados do BigQuery é concedida a função
pubsub.subscriber
:Na Google Cloud consola, aceda à página Pub/Sub.
Selecione a subscrição do Pub/Sub que usou na transferência orientada por eventos.
Se o painel de informações estiver oculto, clique em Mostrar painel de informações no canto superior direito.
No separador Autorizações, verifique se o agente de serviço do Serviço de transferência de dados do BigQuery tem a função
pubsub.subscriber
Comandos resumidos para configurar notificações e autorizações
Os seguintes comandos da Google Cloud CLI incluem todos os comandos necessários para configurar as notificações e as autorizações, conforme detalhado nas secções 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
Substitua o seguinte:
PROJECT_ID
: o ID do seu projeto.CONFIG_NAME
: um nome para identificar esta configuração de transferência.
Crie uma configuração de transferência
Pode criar uma transferência do Cloud Storage orientada por eventos criando uma transferência do Cloud Storage e selecionando Orientada por eventos como o Tipo de agendamento. Como administrador do Cloud Storage (roles/storage.admin
) e administrador do Pub/Sub (roles/pubsub.admin
), tem autorizações suficientes para que o Serviço de transferência de dados do BigQuery configure automaticamente o Cloud Storage para enviar notificações.
Se não for o administrador do Cloud Storage (roles/storage.admin
) nem o administrador do Pub/Sub (roles/pubsub.admin
), tem de pedir ao seu administrador que lhe conceda as funções ou que conclua as configurações de notificações do Pub/Sub nas configurações do Cloud Storage e as configurações de autorizações do agente de serviço necessárias antes de poder criar a transferência orientada por eventos.