Assinaturas do BigQuery

Neste documento, você terá uma visão geral da assinatura do BigQuery, o fluxo de trabalho e as propriedades associadas.

A assinatura do BigQuery é um tipo de assinatura de exportação que grava mensagens em uma tabela do BigQuery em que eles são recebidos. Você não precisa configurar um cliente assinante separado. Use o console do Google Cloud, a Google Cloud CLI, as bibliotecas de cliente ou a API Pub/Sub para criar, atualizar, listar, remover ou excluir um Assinatura do BigQuery.

Sem o tipo de assinatura do BigQuery, você precisa de uma assinatura pull ou push e um assinante (como o Dataflow), que lê mensagens e as grava uma tabela do BigQuery. O overhead da execução O job do Dataflow não é necessário quando as mensagens não exigem processamento adicional antes de armazená-los em uma tabela do BigQuery; use uma assinatura do BigQuery.

No entanto, um pipeline do Dataflow ainda é recomendado para Sistemas Pub/Sub em que alguma transformação de dados é necessária antes os dados são armazenados em uma tabela do BigQuery. Para aprender a transmitir dados do Pub/Sub para o BigQuery com transformação usando o Dataflow, consulte "Transmitir do Pub/Sub para no BigQuery.

A assinatura do Pub/Sub para o modelo do BigQuery no Dataflow aplica a entrega exatamente uma vez pelo padrão. Isso é geralmente conseguido por meio de mecanismos de eliminação de duplicação pipeline do Dataflow. No entanto, o BigQuery a assinatura só permite a entrega pelo menos uma vez. Se a eliminação de duplicação exata for essenciais para seu caso de uso, considere os processos downstream o BigQuery para lidar com possíveis duplicatas.

Antes de começar

Antes de ler este documento, você precisa conhecer bem:

  • Como o Pub/Sub funciona e as diferentes Termos do Pub/Sub.

  • Os diferentes tipos de assinatura com suporte do Pub/Sub e por que usar uma Assinatura do BigQuery.

  • Como o BigQuery funciona e como configurar e gerenciar tabelas do BigQuery.

Fluxo de trabalho de assinatura do BigQuery

A imagem a seguir mostra o fluxo de trabalho entre uma e o BigQuery.

Fluxo de mensagens para uma assinatura do BigQuery
Figura 1. fluxo de trabalho para uma assinatura do BigQuery

Veja a seguir uma breve descrição do fluxo de trabalho que faz referência à Figura 1:

  1. O Pub/Sub usa a gravação de armazenamento do BigQuery API para enviar dados ao BigQuery. tabela.
  2. As mensagens são enviadas em lotes para a tabela do BigQuery.
  3. Após a conclusão de uma operação de gravação, a API retorna uma mensagem OK resposta.
  4. Se houver falhas na operação de gravação, o A mensagem do Pub/Sub é confirmada de maneira negativa. O é reenviada. Se a mensagem falhar muitas vezes e houver um de mensagens inativas configurado na assinatura, a mensagem é movida ao tópico de mensagens mortas.

Propriedades de uma assinatura do BigQuery

As propriedades configuradas para uma assinatura do BigQuery determinar a tabela do BigQuery em que o Pub/Sub escreve mensagens e o tipo de esquema dessa tabela.

Para mais informações, consulte BigQuery do Terraform.

Compatibilidade do esquema

O Pub/Sub e o BigQuery usam maneiras diferentes definir os esquemas dele. Os esquemas do Pub/Sub são definidos em Apache Avro, ou buffer de protocolo, enquanto Os esquemas do BigQuery são definidos com uma vários formatos. Confira a seguir uma lista de informações importantes sobre a compatibilidade de esquema entre uma um tópico do Pub/Sub e uma tabela do BigQuery.

  • Mensagens que contenham um campo formatado incorretamente não serão gravadas no no BigQuery.

  • No esquema do BigQuery, INT, SMALLINT, INTEGER BIGINT, TINYINT e BYTEINT são aliases de INTEGER; DECIMAL é um alias de NUMERIC; e BIGDECIMAL é um alias de BIGNUMERIC.

  • Quando o tipo no esquema do tópico é um string e o tipo no A tabela do BigQuery é JSON, TIMESTAMP, DATETIME, DATE, TIME, NUMERIC ou BIGNUMERIC, depois qualquer valor para este campo em uma A mensagem do Pub/Sub precisa aderir ao formato especificado para Dados do BigQuery tipo.

  • Alguns tipos lógicos Avro são compatíveis, conforme especificado na tabela a seguir. Quaisquer tipos lógicos não listados correspondem apenas ao tipo Avro equivalente que faça anotações, conforme detalhado na especificação Avro.

Veja a seguir uma coleção de mapeamentos de diferentes formatos de esquema para Tipos de dados do BigQuery.

Tipos Avro

Tipo de Avro Tipo de dados do BigQuery
null Any NULLABLE
boolean BOOLEAN
int INTEGER, NUMERIC ou BIGNUMERIC
long INTEGER, NUMERIC ou BIGNUMERIC
float FLOAT64, NUMERIC ou BIGNUMERIC
double FLOAT64, NUMERIC ou BIGNUMERIC
bytes BYTES, NUMERIC ou BIGNUMERIC
string STRING, JSON. TIMESTAMP, DATETIME, DATE, TIME, NUMERIC ou BIGNUMERIC
record RECORD/STRUCT
array de Type REPEATED Type
map com o tipo de valor ValueType REPEATED STRUCT <key STRING, value ValueType>
union com dois tipos, um que é null e o outro Type NULLABLE Type
outros unions Não mapeável
fixed BYTES, NUMERIC ou BIGNUMERIC
enum INTEGER

Tipos lógicos Avro

Tipo lógico Avro Tipo de dados do BigQuery
timestamp-micros TIMESTAMP
date DATE
time-micros TIME
duration INTERVAL
decimal NUMERIC ou BIGNUMERIC

Tipos de buffer de protocolo

Tipo de buffer de protocolo Tipo de dados do BigQuery
double FLOAT64, NUMERIC ou BIGNUMERIC
float FLOAT64, NUMERIC ou BIGNUMERIC
int32 INTEGER, NUMERIC. BIGNUMERIC ou DATE
int64 INTEGER, NUMERIC. BIGNUMERIC, DATE, DATETIME ou TIMESTAMP
uint32 INTEGER, NUMERIC. BIGNUMERIC ou DATE
uint64 NUMERIC ou BIGNUMERIC
sint32 INTEGER, NUMERIC ou BIGNUMERIC
sint64 INTEGER, NUMERIC. BIGNUMERIC, DATE, DATETIME ou TIMESTAMP
fixed32 INTEGER, NUMERIC. BIGNUMERIC ou DATE
fixed64 NUMERIC ou BIGNUMERIC
sfixed32 INTEGER, NUMERIC. BIGNUMERIC ou DATE
sfixed64 INTEGER, NUMERIC. BIGNUMERIC, DATE, DATETIME ou TIMESTAMP
bool BOOLEAN
string STRING, JSON. TIMESTAMP, DATETIME, DATE, TIME, NUMERIC ou BIGNUMERIC
bytes BYTES, NUMERIC ou BIGNUMERIC
enum INTEGER
message RECORD/STRUCT
oneof Não mapeável
map<KeyType, ValueType> REPEATED RECORD<key KeyType, value ValueType>
enum INTEGER
repeated/array of Type REPEATED Type

Representação de números inteiros de data e hora

Ao mapear de um número inteiro para um dos tipos de data ou hora, o número precisa representam o valor correto. Confira a seguir o mapeamento dos dados do BigQuery pelo número inteiro que os representa.

Tipo de dados do BigQuery Representação de números inteiros
DATE O número de dias desde a época Unix, 1o de janeiro de 1970
DATETIME A data e a hora em microssegundos expressas como hora civil usando a função CivilTimeEncoder
TIME O tempo em microssegundos expresso como hora civil usando a função CivilTimeEncoder
TIMESTAMP O número de microssegundos desde a época Unix, 1o de janeiro de 1970 00:00:00 UTC

Captura de dados alterados do BigQuery

As assinaturas do BigQuery são compatíveis com a captura de dados alterados (CDC) atualizações quando use_topic_schema ou use_table_schema está definido como true nas propriedades da assinatura. Para usar o recurso com use_topic_schema, defina o esquema do tópico com o seguinte campo:

  • _CHANGE_TYPE (obrigatório): um campo string definido como UPSERT ou DELETE.

    • Se uma mensagem do Pub/Sub gravada A tabela do BigQuery tem _CHANGE_TYPE definido como UPSERT, o BigQuery vai atualizar a linha com a mesma chave se ela existe ou insere uma nova linha, caso não exista.

    • Se uma mensagem do Pub/Sub gravada A tabela do BigQuery tem _CHANGE_TYPE definido como DELETE, o BigQuery exclui a linha na tabela com o mesma chave, se houver.

Para usar o recurso com use_table_schema, inclua o campo anterior em a mensagem JSON.

Permissões da conta de serviço do Pub/Sub

Para criar uma assinatura do BigQuery, conta de serviço precisa ter permissão para gravar no tabela do BigQuery e para ler os metadados dela. Para mais informações, consulte Atribuir papéis do BigQuery Serviço do Pub/Sub padrão.

Lidar com falhas de mensagens

Quando uma mensagem do Pub/Sub não pode ser gravada BigQuery, a mensagem não pode ser confirmada. Para encaminhar tais mensagens não entregues, configure uma mensagem inativa tópico no Assinatura do BigQuery. A mensagem do Pub/Sub encaminhados para o tópico de mensagens inativas contém um atributo CloudPubSubDeadLetterSourceDeliveryErrorMessage que tenha o motivo Não foi possível gravar a mensagem do Pub/Sub no BigQuery.

Se o Pub/Sub não puder gravar mensagens no BigQuery, o Pub/Sub recua a entrega de mensagens de maneira semelhante comportamento de espera por push. No entanto, se o tem um tópico de mensagens inativas anexado o Pub/Sub não recua a entrega quando a mensagem falha devido a erros de compatibilidade de esquema.

Cotas e limites

Há limitações de cota no assinante do BigQuery por região. Para mais informações, consulte Cotas do Pub/Sub e limites.

As assinaturas do BigQuery gravam dados usando o API BigQuery Storage Write. Para informações sobre cotas e limites para a API Storage Write, consulte API BigQuery Storage Write solicitações. Google BigQuery as assinaturas consomem apenas a cota de capacidade de processamento da API Storage Write. Você ignore as outras considerações de cota da API Storage Write nesta instância.

Preços

Para obter os preços das assinaturas do BigQuery, consulte a Página de preços do Pub/Sub

A seguir