Resolução de problemas de subscrições do BigQuery

Esta página fornece algumas sugestões comuns de resolução de problemas para subscrições do BigQuery.

Verifique o estado de uma subscrição do BigQuery

Para verificar o estado de uma subscrição, siga estes passos:

  1. Na Trusted Cloud consola, aceda à página de subscrição do Pub/Sub.

    Aceder a Subscrições

  2. Verifique o ícone de Estado da sua subscrição do BigQuery.

    Se o ícone for uma marca de verificação verde, a subscrição está em bom estado.

    Se o ícone for um ponto de exclamação vermelho, a subscrição está num estado de erro.

  3. Clique na subscrição do BigQuery.

    É apresentada a página de detalhes da subscrição.

  4. Verifique o Estado da subscrição para ver a mensagem de erro.

  5. Consoante a mensagem de erro, aceda à secção relevante desta página para resolver o problema.

Após a resolução do problema, a subscrição volta a ficar num estado normal.

Não é possível criar nem atualizar a subscrição

Seguem-se alguns dos problemas comuns que pode enfrentar se tiver dificuldades em criar ou atualizar uma subscrição do BigQuery.

Erro de tabela não encontrada

Se a tabela que especificar no fluxo de trabalho de criação ou atualização da subscrição não existir, o fluxo de trabalho devolve um erro de tabela não encontrada. Na consola Trusted Cloud , a mensagem é semelhante à seguinte:

The BigQuery table or dataset specified cannot be found.

Para resolver o problema, crie a tabela e certifique-se de que pode verificar o respetivo estado antes de a usar com uma subscrição do BigQuery.

Erro de esquema sem correspondência

Se os esquemas da tabela e do tópico não forem compatíveis, o fluxo de trabalho de criação ou atualização da subscrição devolve um erro de incompatibilidade de esquemas. Na consola Trusted Cloud , a mensagem é semelhante à seguinte:

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

A mensagem de erro especificada destina-se a uma incompatibilidade de esquema para um campo denominado project_ids. Consoante o tipo de incompatibilidade do esquema que tiver, pode ver uma variação diferente da mensagem de erro.

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

Erro da conta de serviço

Se não tiver configurado a conta de serviço do Pub/Sub com as autorizações corretas, o fluxo de trabalho de criação ou atualização da subscrição devolve um erro. Na consola Trusted Cloud , a mensagem é semelhante à seguinte:

Service account service-1234234234@gcp-sa-pubsub.s3ns-system.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 tem as autorizações corretas.

O estado da subscrição mostra uma exclamação vermelha

Se editar a tabela depois de criar uma subscrição, pode afetar a forma como o Pub/Sub escreve mensagens na tabela. Se uma alteração resultar num problema, o campo de estado da subscrição é definido como um estado de erro.

Na página de detalhes da subscrição, verifique o estado do campo Subscription state. O campo Subscription state fornece um erro mais específico, que pode ser um dos seguintes:

  • table not found: a tabela foi eliminada. Criar uma tabela e verificar o estado da tabela. Consulte o artigo Obtenha informações da tabela.

  • Autorização da tabela recusada: a conta de serviço do Pub/Sub já não tem autorização para escrever na tabela. Verifique se a conta de serviço tem as autorizações corretas.

  • Esquema da tabela em conflito: o esquema da tabela já não é compatível com as definições de subscrição do BigQuery. Verifique se os mapeamentos de esquemas são compatíveis.

Enquanto uma subscrição do Pub/Sub estiver no estado de erro, as mensagens não são escritas na tabela do BigQuery e permanecem na fila de mensagens pendentes da subscrição. Tenha em atenção que as mensagens não são entregues num tópico de mensagens rejeitadas anexado, se estiver configurado. As mensagens não reconhecidas são retidas durante o período definido em message_retention_duration(7 dias, por predefinição).

Está a acumular-se um atraso

Se vir um atraso de mensagens a acumular-se na subscrição ou mensagens a serem enviadas para o tópico de mensagens não entregues de uma subscrição, reveja as seguintes possíveis causas.

Mensagem de erro INVALID_ARGUMENT

Este erro ocorre quando a mensagem fornecida está num formato que o Pub/Sub considera válido, mas o esquema da tabela de destino do BigQuery não. Isto significa que um ou mais campos na mensagem têm valores que não são permitidos pelo esquema da tabela do BigQuery. Reveja a compatibilidade do esquema para verificar se os tipos e os formatos de dados estão corretos. Alguns dos erros mais comuns incluem:

  • Uma string vazia ("") não é um JSON válido. Quando enviar dados para uma coluna de tabela do BigQuery JSON anulável, forneça um objeto JSON vazio ({})null ou uma string JSON vazia ("\"\"") para representar valores em falta. O envio de uma string vazia resulta num erro.

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

Para resolver problemas de erros INVALID_ARGUMENT, adicione um tópico de mensagens não entregues à subscrição de interesse. O tópico de mensagens rejeitadas capta mensagens que não puderam ser escritas no BigQuery, juntamente com um atributo denominado CloudPubSubDeadLetterSourceDeliveryErrorMessage que explica o motivo da falha.

Também pode ver estas falhas de entrega no Explorador de métricas. Selecione a métrica pubsub.googleapis.com/subscription/push_request_count e filtre por response_code=invalid_argument.

Mensagem de erro RESOURCE_EXHAUSTED

Se as mensagens estiverem a ser escritas no BigQuery lentamente, pode ter de aumentar a quota de envio do Pub/Sub do seu projeto ou a quota de débito de escrita do armazenamento do BigQuery. Para verificar se está a deparar-se com limitações de quota, examine a métrica de pedidos push (subscription/push_request_count) para detetar erros resource_exhausted.

Outra forma de diagnosticar problemas de quota é verificar a quota do projeto. Navegue até IAM e administrador > Quotas no projeto que contém o recurso do Pub/Sub ou a instância do BigQuery. Pesquise a quota relevante, pubsub.googleapis.com/regionalpushsubscriber ou bigquerystorage.googleapis.com/write/append_bytes. Se precisar de um aumento de qualquer uma das quotas, pode solicitar um ajuste da quota.

Tabela particionada por hora que mostra __UNPARTITIONED__ na coluna ID da partição

Quando uma tabela de destino do BigQuery é particionada por hora, as linhas são inicialmente colocadas numa partição especial etiquetada como __UNPARTITIONED__ na vista INFORMATION_SCHEMA.PARTITIONS. Este comportamento é esperado para tabelas que usam particionamento por tempo de ingestão.

O BigQuery usa um buffer de streaming para otimizar o processo de escrita. Os dados podem residir na partição __UNPARTITIONED__ até se acumular volume suficiente ou ter decorrido, pelo menos, uma hora. Depois de estas condições serem cumpridas, o BigQuery volta a particionar os dados na respetiva partição horária adequada.

Pode monitorizar os dados na partição __UNPARTITIONED__ através da vista INFORMATION_SCHEMA.PARTITIONS.

O que se segue?