Crie subscrições do BigQuery

Este documento descreve como criar uma subscrição do BigQuery. Pode usar a Trusted Cloud consola, a CLI Google Cloud, a biblioteca cliente ou a API Pub/Sub para criar uma subscrição do BigQuery.

Antes de começar

Antes de ler este documento, certifique-se de que conhece o seguinte:

Além de conhecer o Pub/Sub e o BigQuery, certifique-se de que cumpre os seguintes pré-requisitos antes de criar uma subscrição do BigQuery:

  • Existe uma tabela do BigQuery. Em alternativa, pode criar uma quando criar a subscrição do BigQuery, conforme descrito nas secções posteriores deste documento.

  • Compatibilidade entre o esquema do tópico do Pub/Sub e a tabela do BigQuery. Se adicionar uma tabela do BigQuery não compatível, recebe uma mensagem de erro relacionada com a compatibilidade. Para mais informações, consulte a secção Compatibilidade do esquema.

Funções e autorizações necessárias

Segue-se uma lista de diretrizes relativas a funções e autorizações:

  • Para criar uma subscrição, tem de configurar o controlo de acesso ao nível do projeto.

  • Também precisa de autorizações ao nível do recurso se as suas subscrições e tópicos estiverem em projetos diferentes, conforme abordado mais adiante nesta secção.

  • Para criar uma subscrição do BigQuery, o agente do serviço Pub/Sub ou uma conta de serviço personalizada tem de ter autorização para escrever na tabela específica do BigQuery. Para mais informações sobre como conceder estas autorizações, consulte a secção seguinte deste documento.

  • Pode configurar uma subscrição do BigQuery num projeto para escrever numa tabela do BigQuery num projeto diferente.

Para receber as autorizações de que precisa para criar subscrições do BigQuery, peça ao seu administrador para lhe conceder a função de IAM de Editor do Pub/Sub (roles/pubsub.editor) no projeto. Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Esta função predefinida contém as autorizações necessárias para criar subscrições do BigQuery. Para ver as autorizações exatas que são necessárias, expanda a secção Autorizações necessárias:

Autorizações necessárias

São necessárias as seguintes autorizações para criar subscrições do BigQuery:

  • Extrair de uma subscrição: pubsub.subscriptions.consume
  • Crie uma subscrição: pubsub.subscriptions.create
  • Elimine uma subscrição: pubsub.subscriptions.delete
  • Obtenha uma subscrição: pubsub.subscriptions.get
  • Anuncie uma subscrição: pubsub.subscriptions.list
  • Atualize uma subscrição: pubsub.subscriptions.update
  • Anexe uma subscrição a um tópico: pubsub.topics.attachSubscription
  • Obtenha a Política IAM para uma subscrição: pubsub.subscriptions.getIamPolicy
  • Configure a política IAM para uma subscrição: pubsub.subscriptions.setIamPolicy

Também pode conseguir estas autorizações com funções personalizadas ou outras funções predefinidas.

Para permitir que um principal num projeto crie uma subscrição do BigQuery noutro projeto, tem de conceder a esse principal a função de editor do Pub/Sub (roles/pubsub.editor) em ambos os projetos. Isto fornece as autorizações necessárias para criar a nova subscrição do BigQuery e anexá-la ao tópico original. A função de editor do Pub/Sub (roles/pubsub.editor) no tópico também ajuda a anexar subscrições do BigQuery num projeto diferente ao tópico.

Atribua funções a contas de serviço

Alguns Trusted Cloud by S3NS serviços têm Trusted Cloudcontas de serviço geridas que permitem que os serviços acedam aos seus recursos. Estas contas de serviço são conhecidas como agentes de serviço. O Pub/Sub cria e mantém um agente de serviço para cada projeto no formato service-project-number@gcp-sa-pubsub.s3ns-system.iam.gserviceaccount.com.

Pode escolher entre permitir que o agente do serviço Pub/Sub ou uma conta de serviço personalizada escreva na tabela do BigQuery.

Conceder autorização ao agente de serviço do Pub/Sub significa que qualquer utilizador que tenha autorização para criar uma subscrição no seu projeto pode escrever na tabela do BigQuery. Se quiser conceder autorização mais detalhada para escrever na tabela do BigQuery, configure uma conta de serviço personalizada.

Para mais informações sobre o IAM do BigQuery, consulte Funções e autorizações do BigQuery.

Atribua funções do BigQuery ao agente do serviço Pub/Sub

Se quiser criar uma subscrição do BigQuery através do agente do serviço Pub/Sub, este tem de ter autorização para escrever na tabela específica do BigQuery e ler os metadados da tabela.

Conceda a função de editor de dados do BigQuery (roles/bigquery.dataEditor) ao agente de serviço do Pub/Sub. Pode conceder a autorização numa tabela individual ou no projeto como um todo.

Tabela

  1. Na Trusted Cloud consola, aceda ao BigQuery Studio.

    Aceda ao BigQuery Studio

  2. Na caixa de pesquisa do painel Explorador com a etiqueta Filtrar por nome e etiquetas, introduza o nome da tabela e prima Enter.

  3. Clique na tabela à qual quer conceder autorização.

  4. Para a tabela, selecione Mais ações > Partilhar > Autorizações.

    Em alternativa, clique na tabela e, na página principal, clique em Partilha > Autorizações.

    É apresentada a janela Autorizações de partilha.

  5. Clique em Adicionar principal.

  6. Em Adicionar responsáveis, introduza o nome do agente do serviço do Pub/Sub para o projeto que contém a subscrição. O formato do agente do serviço é service-project-number@gcp-sa-pubsub.s3ns.iam.gserviceaccount.com. Por exemplo, para um projeto com project-number=112233445566, o agente do serviço tem o formato service-112233445566@gcp-sa-pubsub.s3ns.iam.gserviceaccount.com.

  7. No menu pendente Selecionar uma função, introduza BigQuery, e selecione a função Editor de dados do BigQuery.

  8. Clique em Guardar.

Projeto

  1. Na Trusted Cloud consola, aceda à página IAM.

    Aceda ao IAM

  2. Clique em Conceder acesso.

  3. Na secção Adicionar responsáveis, introduza o nome do agente do serviço Pub/Sub. O formato do agente do serviço é service-project-number@gcp-sa-pubsub.s3ns.iam.gserviceaccount.com. Por exemplo, para um projeto com project-number=112233445566, o agente do serviço tem o formato service-112233445566@gcp-sa-pubsub.s3ns.iam.gserviceaccount.com.

  4. Na secção Atribuir funções, clique em Adicionar outra função.

  5. No menu pendente Selecionar uma função, introduza BigQuery, e selecione a função Editor de dados do BigQuery.

  6. Clique em Guardar.

Atribua funções do BigQuery a uma conta de serviço personalizada

Se quiser usar uma conta de serviço personalizada para escrever numa tabela do BigQuery, tem de definir as seguintes autorizações:

  • A conta de serviço personalizada tem de ter autorização para escrever na tabela do BigQuery específica e para ler os metadados da tabela.
  • O agente do serviço Pub/Sub tem de ter a autorização iam.serviceAccounts.getAccessToken na conta de serviço personalizada.
  • O utilizador que cria a subscrição tem de ter a autorização iam.serviceAccounts.actAs na conta de serviço personalizada.

Crie a conta de serviço e conceda autorizações com os seguintes passos:

  1. Crie a conta de serviço personalizada. A conta de serviço tem de estar no mesmo projeto que a subscrição.

  2. Conceda a função de editor de dados do BigQuery (roles/bigquery.dataEditor) à conta de serviço personalizada.

    Pode conceder autorização à conta de serviço numa única tabela no projeto ou em todas as tabelas do projeto. Para o fazer, consulte a secção adequada em Atribua funções do BigQuery ao agente de serviço do Pub/Sub. No procedimento, substitua o endereço de email do agente de serviço do Pub/Sub pelo endereço de email da conta de serviço personalizada.

  3. Conceda ao agente do serviço Pub/Sub a autorização iam.serviceAccounts.getAccessToken na conta de serviço personalizada ou em todas as contas de serviço no projeto. Pode conceder esta autorização atribuindo a função roles/iam.serviceAccountTokenCreator ao agente de serviço do Pub/Sub.

    Escolha o método adequado com base nos seus requisitos.

Conta de serviço

  1. Na Trusted Cloud consola, aceda à página Contas de serviço.

    Aceda a Contas de serviço

  2. Introduza o nome da conta de serviço personalizada no Filtro.

  3. Selecione a conta de serviço na lista.

  4. Clique em Principais com acesso.

  5. Clique em Conceder acesso.

  6. Na secção Adicionar responsáveis, introduza o nome do agente do serviço Pub/Sub para o projeto que contém a subscrição. O formato do agente de serviço é service-project-number@gcp-sa-pubsub.s3ns.iam.gserviceaccount.com. Por exemplo, para um projeto com project-number=112233445566, o agente do serviço tem o formato service-112233445566@gcp-sa-pubsub.s3ns.iam.gserviceaccount.com.

  7. No menu pendente Selecionar uma função, introduza Service Account, e selecione a função Criador de tokens de contas de serviços.

  8. Clique em Guardar.

Projeto

  1. Na Trusted Cloud consola, aceda à página IAM.

    Aceda ao IAM

  2. Clique em Conceder acesso.

  3. Na secção Adicionar membros, introduza o nome da sua conta de serviço personalizada.

  4. Na secção Atribuir funções, clique em Adicionar outra função.

  5. No menu pendente Selecionar uma função, introduza Service Account, e selecione a função Criador de tokens de contas de serviços.

  6. Clique em Guardar.

Se criou a conta de serviço personalizada, já deve ter a autorização iam.serviceAccounts.actAs necessária. Se precisar de conceder a outra pessoa a autorização na conta de serviço:

  1. Na Trusted Cloud consola, aceda à página Contas de serviço.

    Aceda a Contas de serviço

  2. Introduza o nome da conta de serviço personalizada no Filtro.

  3. Selecione a conta de serviço na lista.

  4. Clique em Principais com acesso.

  5. Clique em Conceder acesso.

  6. Na secção Adicionar responsáveis, introduza o nome da conta à qual quer conceder acesso.

  7. No menu pendente Selecionar uma função, introduza Service Account e selecione a função Utilizador da conta de serviço.

  8. Além disso, se a sua tabela do BigQuery for uma tabela do Apache Iceberg, conceda à conta de serviço do Pub/Sub a função Administrador de armazenamento (roles/storage.admin) para aceder ao contentor do Cloud Storage.

  9. Clique em Guardar.

Propriedades de subscrição do BigQuery

Quando configura uma subscrição do BigQuery, pode especificar as seguintes propriedades.

Propriedades comuns

Saiba mais sobre as propriedades de subscrição comuns que pode definir em todas as subscrições.

Use o esquema de tópicos

Esta opção permite que o Pub/Sub use o esquema do tópico Pub/Sub ao qual a subscrição está anexada. Além disso, o Pub/Sub escreve os campos nas mensagens nas colunas correspondentes na tabela do BigQuery.

Quando usar esta opção, lembre-se de verificar os seguintes requisitos adicionais:

  • Os campos no esquema do tópico e no esquema do BigQuery têm de ter os mesmos nomes e os respetivos tipos têm de ser compatíveis entre si.

  • Qualquer campo opcional no esquema do tópico também tem de ser opcional no esquema do BigQuery.

  • Os campos obrigatórios no esquema do tópico não têm de ser obrigatórios no esquema do BigQuery.

  • Se existirem campos do BigQuery que não estejam presentes no esquema do tópico, estes campos do BigQuery têm de estar no modo NULLABLE.

  • Se o esquema do tópico tiver campos adicionais que não estão presentes no esquema do BigQuery e estes campos puderem ser ignorados, selecione a opção Ignorar campos desconhecidos.

  • Só pode selecionar uma das propriedades de subscrição, Usar esquema de tópicos ou Usar esquema de tabelas.

Se não selecionar a opção Usar esquema do tópico ou Usar esquema da tabela, certifique-se de que a tabela do BigQuery tem uma coluna denominada data do tipo BYTES, STRING ou JSON. O Pub/Sub escreve a mensagem nesta coluna do BigQuery.

Pode não ver as alterações ao esquema dos tópicos do Pub/Sub ou ao esquema da tabela do BigQuery entrarem em vigor imediatamente com as mensagens escritas na tabela do BigQuery. Por exemplo, se a opção Ignorar campos desconhecidos estiver ativada e um campo estiver presente no esquema do Pub/Sub, mas não no esquema do BigQuery, as mensagens escritas na tabela do BigQuery podem continuar a não conter o campo depois de o adicionar ao esquema do BigQuery. Eventualmente, os esquemas são sincronizados e as mensagens subsequentes incluem o campo.

Quando usa a opção Usar esquema de tópicos para a sua subscrição do BigQuery, também pode tirar partido da captura de dados de alterações (CDC) do BigQuery. A CDC atualiza as tabelas do BigQuery ao processar e aplicar alterações às linhas existentes.

Para saber mais acerca desta funcionalidade, consulte o artigo Atualize a tabela de streams com a captura de dados de alterações.

Para saber como usar esta funcionalidade com subscrições do BigQuery, consulte o artigo Captura de dados de alterações do BigQuery.

Use o esquema da tabela

Esta opção permite que o Pub/Sub use o esquema da tabela do BigQuery para escrever os campos de uma mensagem JSON nas colunas correspondentes. Quando usar esta opção, lembre-se de verificar os seguintes requisitos adicionais:

  • Os nomes de cada coluna na tabela do BigQuery só podem conter letras (a-z, A-Z), números (0-9) ou carateres de sublinhado (_).

  • As mensagens publicadas têm de estar no formato JSON.

    Se uma coluna da tabela do BigQuery tiver o tipo de dados JSON, o campo correspondente na sua mensagem do Pub/Sub tem de ser JSON válido numa string com carateres de escape. Por exemplo, para uma coluna com o nome myData, o campo de mensagem tem de ser "myData": "{\"key\":\"value\"}". O BigQuery rejeita mensagens que não contêm JSON válido.

  • As seguintes conversões JSON são suportadas:

    Tipo JSON Tipo de dados do BigQuery
    string NUMERIC, BIGNUMERIC, DATE, TIME, DATETIME ou TIMESTAMP
    number NUMERIC, BIGNUMERIC, DATE, TIME, DATETIME ou TIMESTAMP
    • Quando usar conversões de number para DATE, DATETIME, TIME ou TIMESTAMP, o número tem de cumprir as representações suportadas.
    • Quando usar number para NUMERIC ou BIGNUMERIC conversão, a precisão e o intervalo de valores estão limitados aos aceites pela norma IEEE 754 para aritmética de vírgula flutuante. Se precisar de uma elevada precisão ou de um intervalo mais amplo de valores, use, em alternativa, conversões string para NUMERIC ou BIGNUMERIC.
    • Quando usa string para NUMERIC ou conversões BIGNUMERIC, o Pub/Sub assume que a string é um número legível por humanos (por exemplo, "123.124"). Se o processamento da string como um número legível por humanos falhar, o Pub/Sub trata a string como bytes codificados com o BigDecimalByteStringEncoder.
  • Se o tópico da subscrição tiver um esquema associado, a propriedade de codificação de mensagens tem de ser definida como JSON.

  • Se existirem campos do BigQuery que não estejam presentes nas mensagens, estes campos do BigQuery têm de estar no modo NULLABLE.

  • Se as mensagens tiverem campos adicionais que não estão presentes no esquema do BigQuery e estes campos puderem ser ignorados, selecione a opção Ignorar campos desconhecidos.

  • Só pode selecionar uma das propriedades de subscrição, Usar esquema de tópicos ou Usar esquema de tabelas.

Se não selecionar a opção Usar esquema do tópico ou Usar esquema da tabela, certifique-se de que a tabela do BigQuery tem uma coluna denominada data do tipo BYTES, STRING ou JSON. O Pub/Sub escreve a mensagem nesta coluna do BigQuery.

Pode não ver as alterações ao esquema da tabela do BigQuery a produzirem efeito imediato com as mensagens escritas na tabela do BigQuery. Por exemplo, se a opção Ignorar campos desconhecidos estiver ativada e um campo estiver presente nas mensagens, mas não no esquema do BigQuery, as mensagens escritas na tabela do BigQuery podem continuar a não conter o campo depois de o adicionar ao esquema do BigQuery. Eventualmente, o esquema é sincronizado e as mensagens subsequentes incluem o campo.

Quando usa a opção Usar esquema de tabela para a sua subscrição do BigQuery, também pode tirar partido da captura de dados de alterações (CDC) do BigQuery. A CDC atualiza as tabelas do BigQuery processando e aplicando alterações às linhas existentes.

Para saber mais acerca desta funcionalidade, consulte o artigo Atualize a tabela de streams com a captura de dados de alterações.

Para saber como usar esta funcionalidade com subscrições do BigQuery, consulte o artigo Captura de dados de alterações do BigQuery.

Ignorar campos desconhecidos

Esta opção é usada com a opção Usar esquema de tópicos ou Usar esquema de tabelas. Quando ativada, esta opção permite que o Pub/Sub ignore qualquer campo presente no esquema do tópico ou na mensagem, mas não no esquema do BigQuery. Os campos que não fazem parte do esquema do BigQuery são ignorados quando a mensagem é escrita na tabela do BigQuery.

Sem a opção Eliminar campos desconhecidos definida, as mensagens com campos adicionais não são escritas no BigQuery e permanecem na fila de mensagens pendentes da subscrição, a menos que configure um tópico de mensagens não entregues.

A definição Ignorar campos desconhecidos não afeta os campos que não estão definidos no esquema do tópico do Pub/Sub nem no esquema da tabela do BigQuery. Neste caso, é entregue uma mensagem do Pub/Sub válida à subscrição. No entanto, como o BigQuery não tem colunas definidas para estes campos adicionais, estes campos são ignorados durante o processo de escrita do BigQuery. Para evitar este comportamento, certifique-se de que qualquer campo contido na mensagem do Pub/Sub também está contido no esquema da tabela do BigQuery.

O comportamento relativamente a campos adicionais também pode depender do tipo de esquema específico (Avro, buffer de protocolo) e da codificação (JSON, binário) usados. Para informações sobre como estes fatores afetam o processamento de campos adicionais, consulte a documentação do seu tipo de esquema e codificação específicos.

Escreva metadados

Esta opção permite que o Pub/Sub escreva os metadados de cada mensagem em colunas adicionais na tabela do BigQuery. Caso contrário, os metadados não são escritos na tabela do BigQuery.

Se selecionar a opção Escrever metadados, certifique-se de que a tabela do BigQuery tem os campos descritos na tabela seguinte.

Se não selecionar a opção Escrever metadados, a tabela do BigQuery de destino só requer o campo data, a menos que use_topic_schema seja verdadeiro. Se selecionar as opções Escrever metadados e Usar esquema de tópicos, o esquema do tópico não pode conter campos com nomes que correspondam aos dos parâmetros de metadados. Esta limitação inclui versões em camel case destes parâmetros em snake case.

Parâmetros
subscription_name

STRING

Nome de uma subscrição.

message_id

STRING

ID de uma mensagem

publish_time

TIMESTAMP

A hora de publicação de uma mensagem.

data

BYTES, STRING ou JSON

O corpo da mensagem.

O campo data é obrigatório para todas as tabelas do BigQuery de destino que não selecionam Usar esquema de tópicos ou Usar esquema de tabelas. Se o campo for do tipo JSON, o corpo da mensagem tem de ser JSON válido.

attributes

STRING ou JSON

Um objeto JSON que contém todos os atributos da mensagem. Também contém campos adicionais que fazem parte da mensagem do Pub/Sub, incluindo a chave de ordenação, se estiver presente.

Crie uma subscrição do BigQuery

Os exemplos seguintes demonstram como criar uma subscrição com a entrega do BigQuery.

Consola

  1. Na Trusted Cloud consola, aceda à página Subscrições.

    Aceder a Subscrições

  2. Clique em Criar subscrição.

  3. No campo ID da subscrição, introduza um nome. Para obter informações sobre como atribuir um nome a uma subscrição, consulte as diretrizes para atribuir um nome a um tópico ou a uma subscrição.

  4. Escolha ou crie um tópico no menu pendente. A subscrição recebe mensagens do tópico.

  5. Selecione Tipo de fornecimento como Escrever no BigQuery.

  6. Selecione o projeto da tabela do BigQuery.

  7. Selecione um conjunto de dados existente ou crie um novo. Para obter informações sobre como criar um conjunto de dados, consulte o artigo Criar conjuntos de dados.

  8. Selecione uma tabela existente ou crie uma nova. Para obter informações sobre como criar uma tabela, consulte o artigo Criar tabelas.

  9. Recomendamos vivamente que ative a Dead lettering para processar falhas de mensagens. Para mais informações, consulte o artigo Tópico de mensagens não entregues.

  10. Clique em Criar.

Também pode criar uma subscrição na página Tópicos. Este atalho é útil para associar tópicos a subscrições.

  1. Na Trusted Cloud consola, aceda à página Tópicos.

    Aceda a Tópicos

  2. Clique em junto ao tópico para o qual quer criar uma subscrição.

  3. No menu de contexto, selecione Criar subscrição.

  4. Selecione Tipo de fornecimento como Escrever no BigQuery.

  5. Selecione o projeto da tabela do BigQuery.

  6. Selecione um conjunto de dados existente ou crie um novo. Para obter informações sobre como criar um conjunto de dados, consulte o artigo Criar conjuntos de dados.

  7. Selecione uma tabela existente ou crie uma nova. Para ver informações sobre como criar um conjunto de dados, consulte o artigo Criar tabelas.

  8. Recomendamos vivamente que ative a Dead lettering para processar falhas de mensagens. Para mais informações, consulte o artigo Tópico de mensagens não entregues.

  9. Clique em Criar.

gcloud

  1. In the Trusted Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    1. Para criar uma subscrição do Pub/Sub, use o comando gcloud pubsub subscriptions create:

      gcloud pubsub subscriptions create SUBSCRIPTION_ID \
          --topic=TOPIC_ID \
          --bigquery-table=PROJECT_ID.DATASET_ID.TABLE_ID
      

      Se quiser usar uma conta de serviço personalizada, forneça-a como um argumento adicional:

      gcloud pubsub subscriptions create SUBSCRIPTION_ID \
          --topic=TOPIC_ID \
          --bigquery-table=PROJECT_ID.DATASET_ID.TABLE_ID 
          --bigquery-service-account-email=SERVICE_ACCOUNT_NAME
      

      Substitua o seguinte:

      • SUBSCRIPTION_ID: especifica o ID da subscrição.
      • TOPIC_ID: especifica o ID do tópico. O tópico requer um esquema.
      • PROJECT_ID: especifica o ID do projeto.
      • DATASET_ID: especifica o ID de um conjunto de dados existente. Para criar um conjunto de dados, consulte o artigo Crie conjuntos de dados.
      • TABLE_ID: especifica o ID de uma tabela existente. A tabela requer um campo data se o seu tópico não tiver um esquema. Para criar uma tabela, consulte o artigo Crie uma tabela vazia com uma definição de esquema.
      • SERVICE_ACCOUNT_NAME: especifica o nome da conta de serviço a usar para escrever no BigQuery.

    C++

    Antes de experimentar este exemplo, siga as instruções de configuração do C++ no artigo Início rápido: usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API C++ do Pub/Sub.

    namespace pubsub = ::google::cloud::pubsub;
    namespace pubsub_admin = ::google::cloud::pubsub_admin;
    [](pubsub_admin::SubscriptionAdminClient client,
       std::string const& project_id, std::string const& topic_id,
       std::string const& subscription_id, std::string const& table_id) {
      google::pubsub::v1::Subscription request;
      request.set_name(
          pubsub::Subscription(project_id, subscription_id).FullName());
      request.set_topic(pubsub::Topic(project_id, topic_id).FullName());
      request.mutable_bigquery_config()->set_table(table_id);
      auto sub = client.CreateSubscription(request);
      if (!sub) {
        if (sub.status().code() == google::cloud::StatusCode::kAlreadyExists) {
          std::cout << "The subscription already exists\n";
          return;
        }
        throw std::move(sub).status();
      }
    
      std::cout << "The subscription was successfully created: "
                << sub->DebugString() << "\n";
    }

    C#

    Antes de experimentar este exemplo, siga as instruções de configuração do C# em Início rápido: usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API C# do Pub/Sub.

    
    using Google.Cloud.PubSub.V1;
    
    public class CreateBigQuerySubscriptionSample
    {
        public Subscription CreateBigQuerySubscription(string projectId, string topicId, string subscriptionId, string bigqueryTableId)
        {
            SubscriberServiceApiClient subscriber = SubscriberServiceApiClient.Create();
            TopicName topicName = TopicName.FromProjectTopic(projectId, topicId);
            SubscriptionName subscriptionName = SubscriptionName.FromProjectSubscription(projectId, subscriptionId);
    
            var subscriptionRequest = new Subscription
            {
                SubscriptionName = subscriptionName,
                TopicAsTopicName = topicName,
                BigqueryConfig = new BigQueryConfig
                {
                    Table = bigqueryTableId
                }
            };
            var subscription = subscriber.CreateSubscription(subscriptionRequest);
            return subscription;
        }
    }

    Ir

    O exemplo seguinte usa a versão principal da biblioteca de cliente Go Pub/Sub (v2). Se ainda estiver a usar a biblioteca v1, consulte o guia de migração para a v2. Para ver uma lista de exemplos de código da v1, consulte os exemplos de código descontinuados.

    Antes de experimentar este exemplo, siga as instruções de configuração do Go em Início rápido: usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Go do Pub/Sub.

    import (
    	"context"
    	"fmt"
    	"io"
    
    	"cloud.google.com/go/pubsub/v2"
    	"cloud.google.com/go/pubsub/v2/apiv1/pubsubpb"
    )
    
    // createBigQuerySubscription creates a Pub/Sub subscription that exports messages to BigQuery.
    func createBigQuerySubscription(w io.Writer, projectID, topic, subscription, table string) error {
    	// projectID := "my-project"
    	// topic := "projects/my-project-id/topics/my-topic"
    	// subscription := "projects/my-project/subscriptions/my-sub"
    	// table := "my-project-id.dataset_id.table_id"
    	ctx := context.Background()
    	client, err := pubsub.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("pubsub.NewClient: %w", err)
    	}
    	defer client.Close()
    
    	sub, err := client.SubscriptionAdminClient.CreateSubscription(ctx, &pubsubpb.Subscription{
    		Name:  subscription,
    		Topic: topic,
    		BigqueryConfig: &pubsubpb.BigQueryConfig{
    			Table:         table,
    			WriteMetadata: true,
    		},
    	})
    	if err != nil {
    		return fmt.Errorf("failed to create subscription: %w", err)
    	}
    	fmt.Fprintf(w, "Created BigQuery subscription: %v\n", sub)
    
    	return nil
    }
    

    Java

    Antes de experimentar este exemplo, siga as instruções de configuração do Java no artigo Início rápido: usar bibliotecas cliente. Para mais informações, consulte a documentação de referência da API Java do Pub/Sub.

    import com.google.cloud.pubsub.v1.SubscriptionAdminClient;
    import com.google.pubsub.v1.BigQueryConfig;
    import com.google.pubsub.v1.ProjectSubscriptionName;
    import com.google.pubsub.v1.ProjectTopicName;
    import com.google.pubsub.v1.Subscription;
    import java.io.IOException;
    
    public class CreateBigQuerySubscriptionExample {
      public static void main(String... args) throws Exception {
        // TODO(developer): Replace these variables before running the sample.
        String projectId = "your-project-id";
        String topicId = "your-topic-id";
        String subscriptionId = "your-subscription-id";
        String bigqueryTableId = "your-project.your-dataset.your-table";
    
        createBigQuerySubscription(projectId, topicId, subscriptionId, bigqueryTableId);
      }
    
      public static void createBigQuerySubscription(
          String projectId, String topicId, String subscriptionId, String bigqueryTableId)
          throws IOException {
        try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
    
          ProjectTopicName topicName = ProjectTopicName.of(projectId, topicId);
          ProjectSubscriptionName subscriptionName =
              ProjectSubscriptionName.of(projectId, subscriptionId);
    
          BigQueryConfig bigqueryConfig =
              BigQueryConfig.newBuilder().setTable(bigqueryTableId).setWriteMetadata(true).build();
    
          Subscription subscription =
              subscriptionAdminClient.createSubscription(
                  Subscription.newBuilder()
                      .setName(subscriptionName.toString())
                      .setTopic(topicName.toString())
                      .setBigqueryConfig(bigqueryConfig)
                      .build());
    
          System.out.println("Created a BigQuery subscription: " + subscription.getAllFields());
        }
      }
    }

    Node.js

    Antes de experimentar este exemplo, siga as instruções de configuração do Node.js em Início rápido: usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Node.js do Pub/Sub.

    /**
     * TODO(developer): Uncomment these variables before running the sample.
     */
    // const topicNameOrId = 'YOUR_TOPIC_NAME_OR_ID';
    // const subscriptionNameOrId = 'YOUR_SUBSCRIPTION_NAME_OR_ID';
    // const bigqueryTableId = 'YOUR_TABLE_ID';
    
    // Imports the Google Cloud client library
    const {PubSub} = require('@google-cloud/pubsub');
    
    // Creates a client; cache this for further use
    const pubSubClient = new PubSub();
    
    async function createBigQuerySubscription(
      topicNameOrId,
      subscriptionNameOrId,
      bigqueryTableId,
    ) {
      const options = {
        bigqueryConfig: {
          table: bigqueryTableId,
          writeMetadata: true,
        },
      };
    
      await pubSubClient
        .topic(topicNameOrId)
        .createSubscription(subscriptionNameOrId, options);
    
      console.log(`Subscription ${subscriptionNameOrId} created.`);
    }

    Node.ts

    Antes de experimentar este exemplo, siga as instruções de configuração do Node.js em Início rápido: usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Node.js do Pub/Sub.

    /**
     * TODO(developer): Uncomment these variables before running the sample.
     */
    // const topicNameOrId = 'YOUR_TOPIC_NAME_OR_ID';
    // const subscriptionNameOrId = 'YOUR_SUBSCRIPTION_NAME_OR_ID';
    // const bigqueryTableId = 'YOUR_TABLE_ID';
    
    // Imports the Google Cloud client library
    import {PubSub, CreateSubscriptionOptions} from '@google-cloud/pubsub';
    
    // Creates a client; cache this for further use
    const pubSubClient = new PubSub();
    
    async function createBigQuerySubscription(
      topicNameOrId: string,
      subscriptionNameOrId: string,
      bigqueryTableId: string,
    ) {
      const options: CreateSubscriptionOptions = {
        bigqueryConfig: {
          table: bigqueryTableId,
          writeMetadata: true,
        },
      };
    
      await pubSubClient
        .topic(topicNameOrId)
        .createSubscription(subscriptionNameOrId, options);
    
      console.log(`Subscription ${subscriptionNameOrId} created.`);
    }

    PHP

    Antes de experimentar este exemplo, siga as instruções de configuração do PHP no artigo Início rápido: usar bibliotecas cliente. Para mais informações, consulte a documentação de referência da API PHP Pub/Sub.

    use Google\Cloud\PubSub\PubSubClient;
    use Google\Cloud\PubSub\V1\BigQueryConfig;
    
    /**
     * Creates a Pub/Sub BigQuery subscription.
     *
     * @param string $projectId  The Google project ID.
     * @param string $topicName  The Pub/Sub topic name.
     * @param string $subscriptionName  The Pub/Sub subscription name.
     * @param string $table      The BigQuery table to which to write.
     */
    function create_bigquery_subscription($projectId, $topicName, $subscriptionName, $table)
    {
        $pubsub = new PubSubClient([
            'projectId' => $projectId,
        ]);
        $topic = $pubsub->topic($topicName);
        $subscription = $topic->subscription($subscriptionName);
        $config = new BigQueryConfig(['table' => $table]);
        $subscription->create([
            'bigqueryConfig' => $config
        ]);
    
        printf('Subscription created: %s' . PHP_EOL, $subscription->name());
    }

    Python

    Antes de experimentar este exemplo, siga as instruções de configuração do Python em Início rápido: usar bibliotecas cliente. Para mais informações, consulte a documentação de referência da API Python Pub/Sub.

    from google.cloud import pubsub_v1
    
    # TODO(developer)
    # project_id = "your-project-id"
    # topic_id = "your-topic-id"
    # subscription_id = "your-subscription-id"
    # bigquery_table_id = "your-project.your-dataset.your-table"
    
    publisher = pubsub_v1.PublisherClient()
    subscriber = pubsub_v1.SubscriberClient()
    topic_path = publisher.topic_path(project_id, topic_id)
    subscription_path = subscriber.subscription_path(project_id, subscription_id)
    
    bigquery_config = pubsub_v1.types.BigQueryConfig(
        table=bigquery_table_id, write_metadata=True
    )
    
    # Wrap the subscriber in a 'with' block to automatically call close() to
    # close the underlying gRPC channel when done.
    with subscriber:
        subscription = subscriber.create_subscription(
            request={
                "name": subscription_path,
                "topic": topic_path,
                "bigquery_config": bigquery_config,
            }
        )
    
    print(f"BigQuery subscription created: {subscription}.")
    print(f"Table for subscription is: {bigquery_table_id}")

    Ruby

    O exemplo seguinte usa a biblioteca cliente Ruby Pub/Sub v3. Se ainda estiver a usar a biblioteca v2, consulte o guia de migração para a v3. Para ver uma lista de exemplos de código do Ruby v2, consulte os exemplos de código descontinuados.

    Antes de experimentar este exemplo, siga as instruções de configuração do Ruby em Início rápido: usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Ruby Pub/Sub.

    # project_id = "your-project-id"
    # topic_id = "your-topic-id"
    # subscription_id = "your-subscription-id"
    # bigquery_table_id = "my-project:dataset-id.table-id"
    
    pubsub = Google::Cloud::PubSub.new project_id: project_id
    subscription_admin = pubsub.subscription_admin
    
    subscription = subscription_admin.create_subscription \
      name: pubsub.subscription_path(subscription_id),
      topic: pubsub.topic_path(topic_id),
      bigquery_config: {
        table: bigquery_table_id,
        write_metadata: true
      }
    
    puts "BigQuery subscription created: #{subscription_id}."
    puts "Table for subscription is: #{bigquery_table_id}"

Monitorize uma subscrição do BigQuery

O Cloud Monitoring fornece várias métricas para monitorizar subscrições.

Para ver uma lista de todas as métricas disponíveis relacionadas com o Pub/Sub e as respetivas descrições, consulte a documentação de monitorização do Pub/Sub.

Também pode monitorizar as subscrições no Pub/Sub.

O que se segue?