Neste documento, descrevemos como criar uma assinatura do BigQuery. É possível usar o console Google Cloud , a Google Cloud CLI, a biblioteca de cliente ou a API Pub/Sub para criar uma assinatura do BigQuery.
Antes de começar
Antes de ler este documento, confira se você conhece os seguintes conceitos:
Como as assinaturas funcionam.
O fluxo de trabalho para assinaturas do BigQuery.
Como configurar um tópico de mensagens inativas para lidar com falhas de mensagens.
Além de ter familiaridade com o Pub/Sub e o BigQuery, verifique se você atende aos seguintes pré-requisitos antes de criar uma assinatura do BigQuery:
Uma tabela do BigQuery existe. Ou crie uma ao criar a assinatura do BigQuery, conforme descrito nas seções posteriores deste documento.
Compatibilidade entre o esquema do tópico do Pub/Sub e a tabela do BigQuery. Se você adicionar uma tabela do BigQuery incompatível, vai receber uma mensagem de erro relacionada à compatibilidade. Para mais informações, consulte Compatibilidade de esquema.
Papéis e permissões necessárias
Para receber as permissões necessárias
para criar uma assinatura do BigQuery,
peça ao administrador para conceder a você o
papel do IAM de Editor do Pub/Sub (roles/pubsub.editor)
no projeto.
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Esse papel predefinido contém as permissões necessárias para criar uma assinatura do BigQuery. Para acessar as permissões exatas necessárias, expanda a seção Permissões necessárias:
Permissões necessárias
As seguintes permissões são necessárias para criar uma assinatura do BigQuery:
-
no projetopubsub.subscriptions.create -
no tópicopubsub.topics.attachSubscription
Essas permissões também podem ser concedidas com funções personalizadas ou outros papéis predefinidos.
Assinaturas entre projetos
Se você criar uma assinatura em um projeto para um tópico em outro, será necessário ter a permissão pubsub.subscriptions.create no projeto em que você está criando a assinatura e a permissão pubsub.topics.attachSubscription no tópico.
Conceder papéis do IAM à conta de serviço
O Pub/Sub usa uma conta de serviço do Identity and Access Management (IAM) para
acessar recursos do Google Cloud . Por padrão, ele usa o
agente de serviço do Pub/Sub
(service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com).
Para permitir que o Pub/Sub grave em uma tabela do BigQuery,
a conta de serviço precisa da função Editor de dados do BigQuery
(roles/bigquery.dataEditor). É possível conceder permissões à conta de serviço para o projeto ou a tabela, da seguinte forma:
Projeto
No console do Google Cloud , acesse a página IAM.
Selecione Incluir concessões de papel fornecidas pelo Google.
Localize a linha da conta de serviço do Cloud Pub/Sub e clique em Editar principal.
Clique em Adicionar outro papel e selecione o papel Editor de dados do BigQuery.
Para mais informações, consulte Conceder um papel do IAM usando o console.
Tabela
No Google Cloud console, acesse o BigQuery Studio.
Na caixa de pesquisa do painel "Explorador" chamada Filtrar por nome e rótulos, digite o nome da tabela e pressione Enter.
Nos resultados da pesquisa, clique no nome da tabela a que você quer conceder permissão.
Na guia Detalhes, clique em Compartilhar > Gerenciar permissões.
Clique em Adicionar principal e insira o identificador da conta de serviço no seguinte formato:
service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com.Na lista Atribuir papéis, selecione Editor de dados do BigQuery.
Clique em Salvar. O principal recebe o papel no recurso.
Usar uma conta de serviço personalizada
Ao conceder o papel de Editor de dados do BigQuery à conta de serviço do Cloud Pub/Sub, qualquer usuário com permissão para criar uma assinatura no seu projeto pode gravar na tabela do BigQuery. Se você quiser fornecer permissões mais granulares, configure uma conta serviço gerenciado pelo usuário.
As seguintes permissões são necessárias para configurar uma conta de serviço gerenciado pelo usuário para gravar no BigQuery:
A conta de serviço gerenciado pelo usuário precisa ter o papel de Editor de dados do BigQuery.
A conta de serviço do Cloud Pub/Sub precisa ter a permissão
iam.serviceAccounts.getAccessTokenna conta de serviço gerenciado pelo usuário.O usuário que cria a assinatura precisa ter a permissão
iam.serviceAccounts.actAsna conta de serviço gerenciado pelo usuário.
Ao criar a assinatura, especifique a conta de serviço gerenciado pelo usuário como a conta de serviço da assinatura.
Propriedades da assinatura do BigQuery
As assinaturas do BigQuery são compatíveis com todas as propriedades comuns de assinatura. As seções a seguir descrevem propriedades específicas das assinaturas do BigQuery.
Usar esquema de tópicos
Com essa opção, o Pub/Sub usa o esquema do tópico do Pub/Sub a que a assinatura está anexada. Além disso, o Pub/Sub grava os campos nas mensagens nas colunas correspondentes da tabela do BigQuery.
Ao usar essa opção, verifique os seguintes requisitos adicionais:
Os campos no esquema de tópicos e no esquema do BigQuery precisam ter os mesmos nomes e tipos compatíveis entre si.
Qualquer campo opcional no esquema de tópicos também precisa ser opcional no esquema do BigQuery.
Os campos obrigatórios no esquema de tópicos não precisam ser obrigatórios no esquema do BigQuery.
Se houver campos do BigQuery que não estão presentes no esquema de tópicos, eles precisam estar no modo
NULLABLE.Se o esquema de tópico tiver campos extras que não estão presentes no esquema do BigQuery e puderem ser descartados, selecione a opção Descartar campos desconhecidos.
Você pode selecionar apenas uma das propriedades de assinatura: Usar esquema de tópico ou Usar esquema de tabela.
Se você não selecionar a opção Usar esquema de tópicos ou Usar esquema de tabela,
verifique se a tabela do BigQuery tem uma coluna chamada data do
tipo BYTES, STRING ou JSON. O Pub/Sub grava a mensagem nessa coluna do BigQuery.
Talvez as mudanças no esquema de tópicos do Pub/Sub ou no esquema de tabelas do BigQuery não entrem em vigor imediatamente com as mensagens gravadas na tabela do BigQuery. Por exemplo, se a opção Descartar campos desconhecidos estiver ativada e um campo estiver presente no esquema do Pub/Sub, mas não no do BigQuery, as mensagens gravadas na tabela do BigQuery ainda poderão não conter o campo depois de adicioná-lo ao esquema do BigQuery. Com o tempo, os esquemas vão se sincronizar, e as mensagens subsequentes vão incluir o campo.
Ao usar a opção Usar esquema de tópico para sua assinatura do BigQuery, você também pode aproveitar a captura de dados alterados (CDC) do BigQuery. A CDC atualiza as tabelas do BigQuery processando e aplicando mudanças às linhas atuais.
Para saber mais sobre esse recurso, consulte Fazer streaming de atualizações da tabela com captura de dados alterados.
Para saber como usar esse recurso com assinaturas do BigQuery, consulte Captura de dados alterados do BigQuery.
Usar esquema de tabela
Com essa opção, o Pub/Sub usa o esquema da tabela do BigQuery para gravar os campos de uma mensagem JSON nas colunas correspondentes. Ao usar essa opção, verifique os seguintes requisitos adicionais:
Os nomes de cada coluna na tabela do BigQuery precisam conter apenas letras (a-z, A-Z), números (0-9) ou sublinhados (_).
As mensagens publicadas precisam estar no formato JSON.
Se uma coluna da tabela do BigQuery tiver o tipo de dados
JSON, o campo correspondente na mensagem do Pub/Sub precisará ser um JSON válido em uma string de escape. Por exemplo, para uma coluna chamadamyData, o campo de mensagem precisa ser"myData": "{\"key\":\"value\"}". O BigQuery rejeita mensagens que não contêm JSON válido.As seguintes conversões JSON são compatíveis:
Tipo JSON Tipo de dados do BigQuery stringNUMERIC,BIGNUMERIC,DATE,TIME,DATETIMEouTIMESTAMPnumberNUMERIC,BIGNUMERIC,DATE,TIME,DATETIMEouTIMESTAMP- Ao usar
numberparaDATE,DATETIME,TIMEouTIMESTAMPconversões, o número precisa obedecer às representações aceitas. - Ao usar
numberpara conversão deNUMERICouBIGNUMERIC, a precisão e o intervalo de valores são limitados aos aceitos pelo padrão IEEE 754 para aritmética de ponto flutuante. Se você precisar de alta precisão ou um intervalo maior de valores, use conversões destringparaNUMERICouBIGNUMERIC. - Ao usar
stringpara conversõesNUMERICouBIGNUMERIC, o Pub/Sub pressupõe que a string é um número legível (por exemplo,"123.124"). Se o processamento da string como um número legível falhar, o Pub/Sub vai tratar a string como bytes codificados com o BigDecimalByteStringEncoder.
- Ao usar
Se o tópico da assinatura tiver um esquema associado a ele, a propriedade de codificação da mensagem precisará ser definida como
JSON.Se houver campos do BigQuery que não estão presentes nas mensagens, eles precisam estar no modo
NULLABLE.Se as mensagens tiverem campos adicionais que não estão no esquema do BigQuery e esses campos puderem ser descartados, selecione a opção Descartar campos desconhecidos.
Você pode selecionar apenas uma das propriedades de assinatura: Usar esquema de tópico ou Usar esquema de tabela.
Se você não selecionar a opção Usar esquema de tópicos ou Usar esquema de tabela,
verifique se a tabela do BigQuery tem uma coluna chamada data do
tipo BYTES, STRING ou JSON. O Pub/Sub grava a mensagem nessa coluna do BigQuery.
As mudanças no esquema da tabela do BigQuery podem não entrar em vigor imediatamente com as mensagens gravadas na tabela. Por exemplo, se a opção Descartar campos desconhecidos estiver ativada e um campo estiver presente nas mensagens, mas não no esquema do BigQuery, as mensagens gravadas na tabela do BigQuery ainda poderão não conter o campo depois de adicioná-lo ao esquema do BigQuery. Com o tempo, o esquema é sincronizado e as mensagens subsequentes incluem o campo.
Ao usar a opção Usar esquema de tabela na sua assinatura do BigQuery, você também pode aproveitar a captura de dados alterados (CDC) do BigQuery. A CDC atualiza as tabelas do BigQuery processando e aplicando mudanças às linhas existentes.
Para saber mais sobre esse recurso, consulte Fazer streaming de atualizações da tabela com captura de dados alterados.
Para saber como usar esse recurso com assinaturas do BigQuery, consulte Captura de dados de alterações do BigQuery.
Remover campos desconhecidos
Essa opção é usada com as opções Usar esquema de tópicos ou Usar esquema de tabela. Quando ativada, essa opção permite que o Pub/Sub descarte qualquer campo presente no esquema ou na mensagem do tópico, mas não no esquema do BigQuery. Os campos que não fazem parte do esquema do BigQuery são descartados ao gravar a mensagem na tabela do BigQuery.
Sem a opção Descartar campos desconhecidos definida, as mensagens com campos extras não são gravadas no BigQuery e permanecem no backlog da assinatura, a menos que você configure um tópico de mensagens mortas.
A configuração Descartar campos desconhecidos não afeta campos que não estão definidos no esquema de tópico do Pub/Sub ou no esquema de tabela do BigQuery. Nesse caso, uma mensagem válida do Pub/Sub é entregue à assinatura. No entanto, como o BigQuery não tem colunas definidas para esses campos extras, eles são descartados durante o processo de gravação do BigQuery. Para evitar esse comportamento, verifique se todos os campos contidos na mensagem do Pub/Sub também estão no esquema da tabela do BigQuery.
O comportamento em relação a campos extras 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 esses fatores afetam o processamento de campos extras, consulte a documentação do tipo de esquema e da codificação específicos.
Gravar metadados
Essa opção permite que o Pub/Sub grave os metadados de cada mensagem em colunas adicionais na tabela do BigQuery. Caso contrário, os metadados não serão gravados na tabela do BigQuery.
Se você selecionar a opção Gravar metadados, verifique se a tabela do BigQuery tem os campos descritos na tabela a seguir.
Se você não selecionar a opção Gravar metadados, a tabela do BigQuery de destino só vai exigir o campo data, a menos que use_topic_schema seja verdadeiro. Se você selecionar as opções Gravar metadados e Usar esquema de tópico, o esquema do tópico não poderá conter campos com nomes iguais aos dos parâmetros de metadados.
Essa limitação inclui versões camelcase desses parâmetros snake case.
| Parâmetros | |
|---|---|
subscription_name |
STRING Nome de uma assinatura. |
message_id |
STRING ID de uma mensagem |
publish_time |
TIMESTAMP O horário de publicação de uma mensagem. |
data |
BYTES, STRING ou JSON O corpo da mensagem. O campo |
attributes |
STRING ou JSON Um objeto JSON que contém todos os atributos da mensagem. Ele também contém outros campos que fazem parte da mensagem do Pub/Sub, incluindo a chave de ordenação, se presente. |
Conta de serviço
Confira as opções para gravar mensagens em uma tabela do BigQuery:
Configure uma conta de serviço personalizada para que apenas usuários com a permissão
iam.serviceAccounts.actAsna conta de serviço possam criar uma assinatura que grava na tabela. Um exemplo de papel que inclui a permissãoiam.serviceAccounts.actAsé o papel Usuário da conta de serviço (roles/iam.serviceAccountUser).Use o agente de serviço padrão do Pub/Sub, que permite que qualquer usuário com a capacidade de criar assinaturas no projeto crie uma assinatura que grave na tabela. O agente de serviço do Pub/Sub é a configuração padrão quando você não especifica uma conta de serviço personalizada.
Criar uma assinatura do BigQuery
Para criar uma assinatura com entrega do BigQuery, siga estas etapas:
Console
No console do Google Cloud , acesse a página Criar assinatura.
No campo ID da assinatura, insira um nome. Para informações sobre como nomear uma assinatura, consulte Diretrizes para nomear um tópico ou uma assinatura.
Na caixa Selecionar um tópico do Cloud Pub/Sub, digite ou selecione o tópico para receber mensagens.
Em Tipo de envio, selecione Gravar no BigQuery.
Selecione a tabela do BigQuery:
Em Projeto, selecione o projeto Google Cloud que contém a tabela do BigQuery.
Em Conjunto de dados, selecione um conjunto de dados existente ou clique em Criar novo conjunto de dados. Para informações sobre como criar um conjunto de dados, consulte Criar conjuntos de dados.
No campo Tabela, insira o nome da tabela. Para criar uma tabela, clique no link que leva à página Criar tabela do BigQuery. A página é aberta em uma guia separada. Para mais informações sobre como criar uma tabela, consulte Criar e usar tabelas.
Em Configuração do esquema, selecione uma das seguintes opções:
Não usar um esquema. O Pub/Sub grava os bytes da mensagem em uma coluna chamada
data.Usar esquema de tópicos. O Pub/Sub usa o esquema associado ao tópico. Para mais informações, consulte Usar o esquema de tópicos.
Usar esquema de tabela. O Pub/Sub usa o esquema da tabela do BigQuery. Para mais informações, consulte Usar esquema de tabela.
Opcional. Para gravar metadados da mensagem na tabela do BigQuery, selecione Gravar metadados. Para mais informações, consulte Gravar metadados.
Opcional. Para descartar campos que não estão presentes no esquema da tabela do BigQuery, selecione Descartar campos desconhecidos. Para mais informações, consulte Descartar campos desconhecidos.
Configure as propriedades comuns da assinatura conforme necessário. Recomendamos ativar o envio para fila de mensagens inativas para processar falhas de mensagens. Para mais informações, consulte Tópico de mensagens inativas.
Clique em Criar.
gcloud
-
No console do Google Cloud , ative o Cloud Shell.
Na parte de baixo do console Google Cloud , uma sessão do Cloud Shell é iniciada e exibe um prompt de linha de comando. O Cloud Shell é um ambiente shell com a CLI do Google Cloud já instalada e com valores já definidos para o projeto atual. A inicialização da sessão pode levar alguns segundos.
Para criar uma assinatura 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_IDSe você 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_NAMESubstitua:
SUBSCRIPTION_ID: especifica o ID da assinatura.TOPIC_ID: especifica o ID do tema. O tópico exige 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 Criar conjuntos de dados.TABLE_ID: especifica o ID de uma tabela atual. A tabela precisa de um campodatase o tópico não tiver um esquema. Para criar uma tabela, consulte Criar uma tabela vazia com uma definição de esquema.SERVICE_ACCOUNT_NAME: especifica o nome da conta de serviço a ser usada para gravar no BigQuery.
C++
Antes de tentar esse exemplo, siga as instruções de configuração do C++ em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub C++.
C#
Antes de tentar esse exemplo, siga as instruções de configuração do C# em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub C#.
Go
O exemplo a seguir usa a versão principal da biblioteca de cliente do Go Pub/Sub (v2). Se você ainda estiver usando a biblioteca v1, consulte o guia de migração para a v2. Para conferir uma lista de exemplos de código da v1, consulte os exemplos de código descontinuados.
Antes de tentar esse exemplo, siga as instruções de configuração do Go em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Go.
Java
Antes de tentar essa amostra, siga as instruções de configuração do Java em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Java.
Node.js
Antes de tentar essa amostra, siga as instruções de configuração do Node.js em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Node.js.
Node.ts
Antes de tentar essa amostra, siga as instruções de configuração do Node.js em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Node.js.
PHP
Antes de tentar esse exemplo, siga as instruções de configuração do PHP em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub PHP.
Python
Antes de tentar esse exemplo, siga as instruções de configuração do Python em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Python.
Ruby
O exemplo a seguir usa a biblioteca de cliente do Ruby Pub/Sub v3. Se você ainda estiver usando a biblioteca v2, consulte o guia de migração para a v3. Para conferir uma lista de exemplos de código do Ruby v2, consulte os exemplos de código descontinuados.
Antes de tentar esse exemplo, siga as instruções de configuração do Ruby em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Ruby.
Monitorar uma assinatura do BigQuery
O Cloud Monitoring oferece várias métricas para monitorar assinaturas.
Para conferir uma lista de todas as métricas disponíveis relacionadas ao Pub/Sub e as descrições delas, consulte a documentação do Monitoring para o Pub/Sub.
Você também pode monitorar as assinaturas no Pub/Sub.
A seguir
- Crie ou modifique uma assinatura com comandos
gcloud. - Crie ou modifique uma assinatura com APIs REST.
- Resolver problemas de uma assinatura do BigQuery.