Transferências baseadas em eventos

As transferências orientadas por eventos no serviço de transferência de dados do BigQuery permitem carregar dados automaticamente no BigQuery em resposta a notificações de eventos. Use essa abordagem para ingestão em lote incremental e econômica quando sua carga de trabalho puder tolerar um atraso de alguns minutos entre as execuções de transferência. Se você precisar de disponibilidade de dados em tempo real com menor latência, use a API Storage Write para transmitir dados diretamente para o BigQuery.

Fontes de dados compatíveis com 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 a eventos para o BigQuery estão sujeitas às seguintes limitações:

  • Depois que uma transferência orientada por eventos é acionada, o serviço de transferência de dados do BigQuery aguarda até 10 minutos antes de acionar a próxima execução de transferência, independentemente de um evento chegar nesse período.
  • As transferências orientadas por eventos não são compatíveis com parâmetros de ambiente 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 orientada a 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, excluir um objeto no bucket de origem não exclui os dados associados na tabela do BigQuery de destino.

Antes de começar

Antes de configurar uma transferência orientada a eventos do Cloud Storage, siga estas etapas:

  1. Ative a API Pub/Sub para o projeto que recebe notificações.

    Ativar a API

  2. Se você for o 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.

  3. 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 a você os papéis roles/storage.admin e roles/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 usar a assinatura pré-configurada do Pub/Sub para criar uma configuração de transferência orientada a eventos.

  4. Permissões detalhadas necessárias para configurar notificações de configuração de transferência orientada por eventos:

Configurar notificações do Pub/Sub no Cloud Storage

  1. Verifique se você atende aos Pré-requisitos para usar o Pub/Sub com o Cloud Storage.

  2. 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 arquivos.
    • TOPIC_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.

  3. 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
  4. Criar uma assinatura por pull no tópico:

    gcloud pubsub subscriptions create SUBSCRIPTION_ID --topic=TOPIC_NAME

    Substitua SUBSCRIPTION_ID pelo nome ou ID da nova assinatura por pull do Pub/Sub.

    É possível criar uma assinatura por pull usando outros métodos.

Configurar permissões do agente de serviço

  1. Encontre o nome do agente do serviço de transferência de dados do BigQuery para seu projeto:

    1. Acesse a página IAM e administrador.

      Acessar IAM e administrador

    2. Marque a caixa de seleção Incluir concessões de papel fornecidas pelo Google.

    3. 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 (roles/bigquerydatatransfer.serviceAgent).

      Verifique se a conta de serviço tem o papel de agente de serviço.

    Para mais informações sobre agentes de serviço, consulte Agentes de serviço.

  2. Conceda o papel de assinante do Pub/Sub (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.

  3. Verifique se o agente do serviço de transferência de dados do BigQuery recebeu o papel de assinante do Pub/Sub (pubsub.subscriber).

    1. No console Google Cloud , acesse a página Pub/Sub.

      Ir para o Pub/Sub

    2. Selecione a assinatura do Pub/Sub que você usou na transferência orientada por eventos.

    3. Se o painel de informações estiver oculto, clique em Mostrar painel de informações no canto superior direito.

    4. Na guia Permissões, verifique se o agente de serviço do serviço de transferência de dados do BigQuery tem o papel de assinante do Pub/Sub (pubsub.subscriber).

    Verifique se o agente de serviço tem pubsub.subscriber na assinatura.

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 baseada em eventos do Cloud Storage, crie uma transferência do Cloud Storage e selecione Baseada em eventos como o 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 os papéis ou concluir as notificações do Pub/Sub necessárias nas configurações do Cloud Storage e as configurações de permissão do agente de serviço antes de criar a transferência orientada a eventos.