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.
Veja a seguir uma breve descrição do fluxo de trabalho que faz referência à Figura 1:
- O Pub/Sub usa a gravação de armazenamento do BigQuery API para enviar dados ao BigQuery. tabela.
- As mensagens são enviadas em lotes para a tabela do BigQuery.
- Após a conclusão de uma operação de gravação, a API retorna uma mensagem OK resposta.
- 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
eBYTEINT
são aliases deINTEGER
;DECIMAL
é um alias deNUMERIC
; eBIGDECIMAL
é um alias deBIGNUMERIC
.Quando o tipo no esquema do tópico é um
string
e o tipo no A tabela do BigQuery éJSON
,TIMESTAMP
,DATETIME
,DATE
,TIME
,NUMERIC
ouBIGNUMERIC
, 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 union s |
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 campostring
definido comoUPSERT
ouDELETE
.Se uma mensagem do Pub/Sub gravada A tabela do BigQuery tem
_CHANGE_TYPE
definido comoUPSERT
, 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 comoDELETE
, 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
Crie uma assinatura, como um BigQuery assinatura.
Solucionar problemas de um BigQuery assinatura.
Leia sobre o BigQuery.
Revise os preços do Pub/Sub, incluindo assinaturas do BigQuery.
Criar ou modificar uma assinatura com a CLI
gcloud
comandos.Crie ou modifique uma assinatura com a API REST APIs do Google.