Como solucionar problemas de assinaturas do BigQuery

Esta página fornece algumas dicas comuns para solução de problemas para assinaturas do BigQuery.

Verificar o estado de uma assinatura do BigQuery

Para verificar o estado de uma assinatura, siga estas etapas:

  1. No console do Google Cloud, acesse o Pub/Sub página de assinatura.

    Acessar "Assinaturas"

  2. Verifique o ícone Estado da sua assinatura do BigQuery.

    Se o ícone for uma marca de seleção verde, a assinatura está íntegra.

    Se o ícone for um ponto de exclamação vermelho, significa que a assinatura está em estado de erro.

  3. Clique na assinatura do BigQuery.

    A página de detalhes da assinatura é aberta.

  4. Verifique a mensagem de erro no Estado da assinatura.

  5. Dependendo da mensagem de erro, vá para a seção relevante nesta para solucionar o problema.

Depois que o problema é resolvido, a assinatura finalmente retorna a um o estado íntegro.

Não é possível criar ou atualizar a assinatura

Estes são alguns dos problemas comuns que você pode enfrentar criar ou atualizar uma assinatura do BigQuery.

Erro de tabela não encontrada

Se a tabela especificada no fluxo de trabalho de criação ou atualização de assinaturas não existir, o fluxo de trabalho retornará um erro de tabela não encontrada. No console do Google Cloud, a mensagem será semelhante a esta:

The BigQuery table or dataset specified cannot be found.

Para resolver o problema, crie a tabela e verifique se é possível seu state antes de usá-lo com uma assinatura do BigQuery.

Erro de incompatibilidade de esquema

Se os esquemas da tabela e do tópico não forem compatíveis, o fluxo de trabalho de criação ou atualização de assinaturas retorna um erro de incompatibilidade de esquema. No console do Google Cloud, a mensagem será semelhante a esta:

Incompatible schema type for field project_ids: expected INT64, got STRING

A mensagem de erro especificada é de incompatibilidade de esquema em um campo chamado project_ids. Dependendo do tipo de incompatibilidade de esquema, é possível ver uma variação diferente da mensagem de erro.

Para resolver o problema, verifique se os mapeamentos de esquema são compatíveis.

Erro na conta de serviço

Se você não tiver configurado a conta de serviço do Pub/Sub com o as permissões corretas, o fluxo de trabalho de criação ou atualização de assinaturas retornará um erro. No console do Google Cloud, a mensagem será semelhante a esta:

Service account service-1234234234@gcp-sa-pubsub.iam.gserviceaccount.com
is missing permissions required to write to the BigQuery table:
bigquery.tables.get, bigquery.tables.updateData.

Para resolver o problema, verifique se a conta de serviço as permissões corretas.

O estado da assinatura mostra uma exclamação vermelha

Se você editar a tabela depois de criar uma assinatura, isso poderá afetar como o Pub/Sub grava mensagens na tabela. Se uma mudança resultar em um problema, o campo de estado da assinatura será definidos como um estado de erro.

Na página de detalhes da assinatura, verifique o estado do campo Subscription state. O campo Subscription state mostra um erro mais específico, que pode ser uma das seguintes:

  • table not found: a tabela foi excluída. Criar de uma tabela e verificar o estado dela. Consulte Receber informações da tabela.

  • permissão de tabela negada: o número da conta de serviço do Pub/Sub tem permissão para gravar na tabela. Verifique se a conta de serviço tem as permissões corretas.

  • incompatibilidade de esquema de tabela: o esquema da tabela não é mais compatível com o Configurações de assinatura do BigQuery. Verifique se o esquema são compatíveis.

Enquanto uma assinatura do Pub/Sub estiver em estado de erro, as mensagens não são gravadas na tabela do BigQuery e permanecem o backlog de assinaturas. As mensagens não são entregues a um tópico de mensagens inativas anexado, se configurado. As mensagens não confirmadas são retidas para o período definido em message_retention_duration(7 dias, por padrão).

A lista de pendências está se acumulando

Se você notar um backlog de mensagens acumulando na assinatura ou nas mensagens acessar o tópico de mensagens mortas de uma assinatura, analise as seguintes causas.

Mensagem de erro INVALID_MCC

Esse erro acontece quando a mensagem fornecida está em um formato que o Pub/Sub considera válida, mas o esquema da tabela de destino do BigQuery não. Isso significa que um ou mais campos da mensagem têm valores que não são permitido pelo esquema da tabela do BigQuery. Analise o a compatibilidade do esquema para verificar se os tipos e formatos de dados estão corretos. Alguns dos erros mais comuns incluem:

  • Uma string vazia ("") não é um JSON válido. Ao enviar dados para um elemento anulável Coluna da tabela do BigQuery em JSON, forneça um objeto JSON vazio ({}), null ou uma string JSON vazia ("\"\"") para representar os valores ausentes. Enviando uma string vazia resulta em erro.

  • Se o valor de um campo de mensagem exceder o tamanho máximo do campo do BigQuery, a mensagem falha devido a limitações de tamanho.

Para resolver erros do INVALID_ARGUMENT, adicione um tópico de mensagens inativas para o inscrição de interesse. O tópico de mensagens mortas captura mensagens que não puderam ser gravados no BigQuery, junto com um atributo chamado CloudPubSubDeadLetterSourceDeliveryErrorMessage que explique o motivo da falha.

Essas falhas de entrega também podem ser vistas no Metrics Explorer. Selecione a métrica pubsub.googleapis.com/subscription/push_request_count e filtrar por response_code=invalid_argument.

Mensagem de erro RESOURCE_EXHAUSTED

Se as mensagens estiverem sendo gravadas no BigQuery lentamente, pode ser necessário aumente a cota de push do Pub/Sub do seu projeto ou o armazenamento do BigQuery a cota de capacidade de processamento de gravação. Para verificar se você está encontrando limitações de cota, examine a métrica de solicitações de push (subscription/push_request_count) para qualquer erro resource_exhausted.

Outra maneira de diagnosticar problemas de cota é verificar a cota do projeto. Navegação IAM e Administrador > Cotas no projeto que contém seu Pub/Sub ou instância do BigQuery. Pesquise a cota relevante pubsub.googleapis.com/regionalpushsubscriber ou bigquerystorage.googleapis.com/write/append_bytes. Se uma das cotas precisar aumentar, solicite uma cota maior.

Tabela particionada por hora mostrando __UNPARTITIONED__ na coluna de ID de partição.

Quando uma tabela de destino do BigQuery é particionada por hora, as linhas inicialmente são colocadas em uma partição especial chamada __UNPARTITIONED__ dentro do INFORMATION_SCHEMA.PARTITIONS visualização. Esse é o comportamento esperado para tabelas que usam particionamento por tempo de ingestão.

O BigQuery usa um buffer de streaming para otimizar o processo de gravação. Os dados podem ficar na partição __UNPARTITIONED__ até que haja volume suficiente se acumula ou pelo menos uma hora tenha passado. Depois que essas condições forem atendidas, O BigQuery particiona novamente os dados na partição por hora apropriada.

É possível monitorar os dados na partição __UNPARTITIONED__ usando a INFORMATION_SCHEMA.PARTITIONS visualização.

A seguir