Transferências baseadas em eventos
É possível usar o serviço de transferência de dados do BigQuery para criar transferências orientadas a eventos que carregam dados automaticamente com base em notificações de eventos. Recomendamos o uso de transferências com base em eventos se você precisar de ingestão de dados incrementais que otimize a eficiência dos custos.
Quando você configura transferências com base em eventos, pode haver um atraso de alguns minutos entre cada transferência de dados. Se você precisar de disponibilidade imediata dos dados, recomendamos usar a API Storage Write, que transmite dados diretamente para o BigQuery com a menor latência possível. A API Storage Write oferece atualizações em tempo real para os casos de uso mais exigentes.
Ao escolher entre as duas, considere se você precisa priorizar a ingestão incremental de lotes com bom custo-benefício com transferências orientadas a eventos ou se prefere a flexibilidade da API Storage Write.
Origens de dados com suporte a transferências baseadas em eventos
O serviço de transferência de dados do BigQuery pode usar transferências orientadas a eventos com as seguintes fontes de dados:
Limitações
As transferências orientadas por eventos para o BigQuery estão sujeitas às seguintes limitações:
- Depois que uma transferência orientada a eventos é acionada, o serviço de transferência de dados do BigQuery espera até 10 minutos antes de acionar a próxima execução de transferência, mesmo que um evento chegue nesse período.
- As transferências orientadas por eventos não têm suporte a parâmetros de execução para o URI de origem ou o caminho de dados.
- A mesma assinatura do Pub/Sub não pode ser reutilizada por várias configurações de transferência baseadas em eventos.
Configurar 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 bucket de origem foram modificados ou adicionados. Ao usar o modo de transferência incremental, a exclusão de um objeto no bucket de origem não exclui os dados associados na tabela de destino do BigQuery.
Antes de começar
Antes de configurar uma transferência orientada a eventos do Cloud Storage, siga estas etapas:
Ative a API Pub/Sub para o projeto que recebe notificações.
Se você for administrador do Cloud Storage (
roles/storage.admin
) e do Pub/Sub (roles/pubsub.admin
), prossiga para Criar uma configuração de transferência orientada a eventos.Se você não for o administrador do Cloud Storage (
roles/storage.admin
) e do Pub/Sub (roles/pubsub.admin
), peça ao administrador para conceder os papéisroles/storage.admin
eroles/pubsub.admin
ou para concluir as etapas configurar o Pub/Sub e configurar as permissões do agente de serviço nas seções a seguir e use a assinatura pré-configurada do Pub/Sub para criar uma configuração de transferência orientada por eventos.Permissões detalhadas necessárias para configurar notificações de configuração de transferências orientadas por eventos:
Se você planeja criar tópicos e assinaturas para publicar notificações, é necessário ter as permissões
pubsub.topics.create
epubsub.subscriptions.create
.Se você planeja usar tópicos e assinaturas novos ou atuais, é necessário ter as seguintes permissões. Se você já criou tópicos e assinaturas no Pub/Sub, provavelmente já tem essas permissões.
Você precisa ter as seguintes permissões no bucket do Cloud Storage em que quer configurar as notificações do Pub/Sub.
storage.buckets.get
storage.buckets.update
O papel predefinido do IAM
pubsub.admin
estorage.admin
tem todas as permissões necessárias para configurar uma transferência orientada por eventos do Cloud Storage. Para mais informações, consulte Controle de acesso do Pub/Sub.
Configurar notificações do Pub/Sub no Cloud Storage
Verifique se você atende aos Pré-requisitos para usar o Pub/Sub com o Cloud Storage.
Aplique uma configuração de notificação ao bucket do Cloud Storage:
gcloud storage buckets notifications create gs://BUCKET_NAME --topic=TOPIC_NAME --event-types=OBJECT_FINALIZE
Substitua:
BUCKET_NAME
: o nome do bucket do Cloud Storage em que você quer acionar eventos de notificação de arquivoTOPIC_NAME
: o nome do tópico do Pub/Sub em que você quer receber os eventos de notificação de arquivo
Também é possível adicionar uma configuração de notificação usando outros métodos além da CLI gcloud. Para mais informações, consulte Aplicar 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 a operação for bem-sucedida, a resposta será semelhante a esta:
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
Criar uma assinatura de pull no tópico:
gcloud pubsub subscriptions create SUBSCRIPTION_ID --topic=TOPIC_NAME
Substitua
SUBSCRIPTION_ID
pelo nome ou ID da sua nova assinatura de pull do Pub/Sub.É possível criar uma assinatura de pull usando outros métodos.
Configurar permissões do agente de serviço
Encontre o nome do agente do serviço de transferência de dados do BigQuery para seu projeto:
Acessar a página AM e administrador
Marque a caixa de seleção Incluir concessões de papel fornecidas pelo Google.
O agente do serviço de transferência de dados do BigQuery é listado com o nome
service-<project_number>@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com
e recebe o papel de agente do serviço de transferência de dados do BigQuery.
Para mais informações sobre os agentes de serviço, consulte Agentes de serviço.
Conceda o papel
pubsub.subscriber
ao agente do serviço de transferência de dados do BigQuery.Console do Cloud
Siga as instruções em Como controlar o acesso usando o console do Google Cloud para conceder o papel
Pub/Sub Subscriber
ao agente do serviço de transferência de dados do BigQuery. O papel pode ser concedido no nível do tópico, da assinatura ou do projeto.CLI
gcloud
Siga as instruções em Como definir uma política para adicionar a seguinte vinculação:
{ "role": "roles/pubsub.subscriber", "members": [ "serviceAccount:project-PROJECT_NUMBER@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com" }
Substitua
PROJECT_NUMBER
pelo ID do projeto que hospeda os recursos de transferência criados e faturados.Atribuição de uso da cota:quando o agente do serviço de transferência de dados do BigQuery acessa a assinatura do Pub/Sub, o uso da cota é cobrado do projeto do usuário.
Verifique se o agente do serviço de transferência de dados do BigQuery recebeu o papel
pubsub.subscriber
:No console Google Cloud , acesse a página Pub/Sub.
Selecione a assinatura do Pub/Sub que você 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.
Na guia Permissões, verifique se o agente de serviço do serviço de transferência de dados do BigQuery tem o papel
pubsub.subscriber
.
Comandos resumidos para configurar notificações e permissões
Os comandos da Google Cloud CLI a seguir incluem todos os comandos necessários para configurar notificações e permissões, conforme detalhado nas seçõ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:
PROJECT_ID
: o ID do seu projeto.CONFIG_NAME
: um nome para identificar essa configuração de transferência.
Criar uma configuração de transferência
Para criar uma transferência do Cloud Storage baseada em eventos, crie uma transferência do Cloud Storage e selecione Baseada em eventos como Tipo de programação. Como administrador do Cloud Storage (roles/storage.admin
) e do Pub/Sub (roles/pubsub.admin
), você tem permissões suficientes para que o serviço de transferência de dados do BigQuery configure automaticamente o Cloud Storage para enviar notificações.
Se você não for o administrador do Cloud Storage (roles/storage.admin
) e do Pub/Sub (roles/pubsub.admin
), peça ao administrador para conceder as funções ou concluir as notificações do Pub/Sub nas configurações do Cloud Storage e as configurações de permissão do agente de serviço necessárias antes de criar a transferência orientada por eventos.