Resolva problemas de erros de quota e limite
O BigQuery tem várias cotas e limites que limitam a taxa e o volume de diferentes pedidos e operações. Existem para proteger a infraestrutura e ajudar a proteger contra a utilização inesperada por parte dos clientes. Este documento descreve como diagnosticar e mitigar erros específicos resultantes de quotas e limites.
Algumas mensagens de erro especificam quotas ou limites que pode aumentar, enquanto outras mensagens de erro especificam quotas ou limites que não pode aumentar. Atingir um limite rígido significa que tem de implementar soluções alternativas temporárias ou permanentes, ou práticas recomendadas para a sua carga de trabalho. Esta ação é uma prática recomendada, mesmo para quotas ou limites que podem ser aumentados.
Este documento organiza as mensagens de erro e as respetivas soluções de acordo com estas categorias. Além disso, a secção "Vista geral" mais adiante neste documento explica como ler uma mensagem de erro e aplicar a solução correta para o seu problema.
Se a sua mensagem de erro não estiver listada neste documento, consulte a lista de mensagens de erro, que tem mais informações de erro genéricas.
Vista geral
Se uma operação do BigQuery falhar devido à excedência de uma quota, a API devolve o código de estado HTTP 403 Forbidden
. O corpo da resposta contém mais informações sobre a quota atingida. O corpo da resposta é semelhante ao seguinte:
{
"code" : 403,
"errors" : [ {
"domain" : "global",
"message" : "Quota exceeded: ...",
"reason" : "quotaExceeded"
} ],
"message" : "Quota exceeded: ..."
}
O campo message
na carga útil descreve que limite foi excedido. Por exemplo, o campo message
pode indicar Exceeded rate limits: too many table
update operations for this table
.
Em geral, os limites de quota dividem-se em duas categorias, indicadas pelo campo reason
no payload de resposta.
rateLimitExceeded
. Este valor indica um limite de curto prazo. Para resolver estes problemas de limites, tente novamente a operação após alguns segundos. Use a retirada exponencial entre as tentativas de repetição. Ou seja, aumente exponencialmente o intervalo de tempo entre cada nova tentativa.quotaExceeded
. Este valor indica um limite a mais longo prazo. Se atingir um limite de quota de longo prazo, deve aguardar 10 minutos ou mais antes de tentar a operação novamente. Se atingir consistentemente um destes limites de quota a longo prazo, deve analisar a sua carga de trabalho para encontrar formas de mitigar o problema. As mitigações podem incluir a otimização da sua carga de trabalho ou o pedido de um aumento da quota.
Para erros quotaExceeded
, examine a mensagem de erro para compreender que limite de quota foi excedido. Em seguida, analise a sua carga de trabalho para ver se consegue evitar atingir a quota.
Em alguns casos, a quota pode ser aumentada se contactar o apoio técnico do BigQuery ou contactar Google Cloud as vendas, mas recomendamos que experimente primeiro as sugestões neste documento.
Diagnóstico
Para diagnosticar problemas, faça o seguinte:
Use as
INFORMATION_SCHEMA
vistas juntamente com um qualificador de região para analisar o problema subjacente. Estas vistas contêm metadados sobre os seus recursos do BigQuery, incluindo tarefas, reservas e inserções por stream.Por exemplo, a seguinte consulta usa a vista
INFORMATION_SCHEMA.JOBS
para listar todos os erros relacionados com a quota no último dia:SELECT job_id, creation_time, error_result FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS WHERE creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP, INTERVAL 1 DAY) AND error_result.reason IN ('rateLimitExceeded', 'quotaExceeded')
Substitua
REGION_NAME
pela região do projeto. Tem de ser precedido porregion-
. Por exemplo, para aUS
multirregião, useregion-us
.Ver erros nos registos de auditoria do Cloud.
Por exemplo, usando o Explorador de registos, a seguinte consulta devolve erros com
Quota exceeded
oulimit
na string de mensagem:resource.type = ("bigquery_project" OR "bigquery_dataset") protoPayload.status.code ="7" protoPayload.status.message: ("Quota exceeded" OR "limit")
Neste exemplo, o código de estado
7
indicaPERMISSION_DENIED
, que corresponde ao código de estado HTTP403
.Para ver exemplos de consultas adicionais dos registos de auditoria do Google Cloud, consulte o artigo Consultas do BigQuery.
Resolva problemas de quotas ou limites que podem ser aumentados
Pode aumentar as seguintes quotas e limites. No entanto, é melhor experimentar primeiro as soluções alternativas ou as práticas recomendadas sugeridas.
O seu projeto excedeu a quota de bytes de consulta gratuitos analisados
O BigQuery devolve este erro quando executa uma consulta no nível de utilização gratuito e a conta atinge o limite mensal do tamanho dos dados que podem ser consultados. Para mais informações sobre os preços das consultas, consulte o Nível de utilização gratuito.
Mensagem de erro
Your project exceeded quota for free query bytes scanned
Resolução
Para continuar a usar o BigQuery, tem de atualizar a conta para uma conta de faturação do Google Cloud paga.
Erros de quota de inserção de streaming
Esta secção dá algumas sugestões para resolver problemas de erros de quota relacionados com o streaming de dados para o BigQuery.
Em determinadas regiões, as inserções de streaming têm uma quota mais elevada se não preencher o campo insertId
para cada linha. Para mais informações sobre as quotas de inserções de streaming, consulte o artigo Inserções de streaming.
Os erros relacionados com a quota para o streaming do BigQuery dependem da presença ou ausência de insertId
.
Mensagem de erro
Se o campo insertId
estiver vazio, é possível que ocorra o seguinte erro de quota:
Limite de quota | Mensagem de erro |
---|---|
Bytes por segundo por projeto | A sua entidade com gaia_id: GAIA_ID, project: PROJECT_ID na região: REGION excedeu a quota de bytes de inserção por segundo. |
Se o campo insertId
estiver preenchido, são possíveis os seguintes erros de quota:
Limite de quota | Mensagem de erro |
---|---|
Linhas por segundo por projeto | O seu projeto: PROJECT_ID em REGION excedeu a quota de inserção de linhas por segundo de streaming. |
Linhas por segundo por tabela | A sua tabela: TABLE_ID excedeu a quota de linhas de inserção de streaming por segundo. |
Bytes por segundo por tabela | A sua tabela: TABLE_ID excedeu a quota de bytes de inserção de streaming por segundo. |
O objetivo do campo insertId
é remover duplicados das linhas inseridas. Se chegarem várias inserções com o mesmo insertId
num período de alguns minutos, o BigQuery escreve uma única versão do registo. No entanto, esta
deduplicação automática não é garantida. Para maximizar o débito de streaming, recomendamos que não inclua insertId
e, em alternativa, use a desduplicação manual.
Para mais informações, consulte o artigo
Garantir a consistência dos dados.
Quando encontrar este erro, diagnostique o problema e, em seguida, siga os passos recomendados para o resolver.
Diagnóstico
Use as visualizações STREAMING_TIMELINE_BY_*
para analisar o tráfego de streaming. Estas vistas agregam estatísticas de streaming em intervalos de um minuto, agrupadas por código de erro. Os erros de quota aparecem nos resultados com error_code
igual a RATE_LIMIT_EXCEEDED
ou QUOTA_EXCEEDED
.
Consoante o limite de quota específico que foi atingido, consulte total_rows
ou
total_input_bytes
. Se o erro for uma quota ao nível da tabela, filtre por table_id
.
Por exemplo, a consulta seguinte mostra o total de bytes carregados por minuto e o número total de erros de quota:
SELECT start_timestamp, error_code, SUM(total_input_bytes) as sum_input_bytes, SUM(IF(error_code IN ('QUOTA_EXCEEDED', 'RATE_LIMIT_EXCEEDED'), total_requests, 0)) AS quota_error FROM `region-REGION_NAME`.INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_PROJECT WHERE start_timestamp > TIMESTAMP_SUB(CURRENT_TIMESTAMP, INTERVAL 1 DAY) GROUP BY start_timestamp, error_code ORDER BY 1 DESC
Resolução
Para resolver este erro de quota, faça o seguinte:
Se estiver a usar o campo
insertId
para a remoção de duplicados e o seu projeto estiver numa região que suporta a quota de streaming mais elevada, recomendamos que remova o campoinsertId
. Esta solução pode exigir alguns passos adicionais para remover manualmente duplicações dos dados. Para mais informações, consulte o artigo Remova manualmente duplicados.Se não estiver a usar o
insertId
ou se não for possível removê-lo, monitorize o tráfego de streaming durante um período de 24 horas e analise os erros de quota:Se vir principalmente erros
RATE_LIMIT_EXCEEDED
em vez de errosQUOTA_EXCEEDED
, e o seu tráfego global for inferior a 80% da quota, os erros indicam provavelmente picos temporários. Pode resolver estes erros repetindo a operação com uma retirada exponencial entre as repetições.Se estiver a usar uma tarefa do Dataflow para inserir dados, considere usar tarefas de carregamento em vez de inserções por streaming. Para mais informações, consulte o artigo Definir o método de inserção. Se estiver a usar o Dataflow com um conetor de E/S personalizado, considere usar um conetor de E/S incorporado. Para mais informações, consulte Padrões de E/S personalizados.
Se vir
QUOTA_EXCEEDED
erros ou o tráfego geral exceder consistentemente 80% da quota, envie um pedido de aumento da quota. Para mais informações, consulte Peça um ajuste da quota.Também pode considerar substituir as inserções de streaming pela mais recente API Storage Write, que tem um débito mais elevado, um preço mais baixo e muitas funcionalidades úteis.
Número máximo de consultas simultâneas que contêm funções remotas
O BigQuery devolve este erro quando o número de consultas simultâneas que contêm funções remotas excede o limite. No entanto, este limite pode ser aumentado. Experimente primeiro as soluções alternativas e as práticas recomendadas.
Para saber mais sobre os limites das funções remotas, consulte o artigo Funções remotas.
Mensagem de erro
Exceeded rate limits: too many concurrent queries with remote functions for this project
Diagnóstico
Para ver os limites de consultas simultâneas que contêm funções remotas, consulte os limites de funções remotas.
Resolução
- Quando usar funções remotas, siga as práticas recomendadas para funções remotas.
- Pode solicitar um aumento da quota contactando o apoio técnico ou as vendas. A revisão e o processamento da solicitação podem demorar vários dias. Recomendamos que indique a prioridade, o exemplo de utilização e o ID do projeto no pedido.
Número máximo de CREATE MODEL
declarações
Este erro significa que excedeu a quota de declarações CREATE MODEL
.
Mensagem de erro
Quota exceeded: Your project exceeded quota for CREATE MODEL queries per project.
Resolução
Se exceder a quota
para CREATE MODEL
declarações, envie um email para
bqml-feedback@google.com
e peça um aumento da quota.
Erros de quota do número máximo de tarefas de cópia por dia por projeto
O BigQuery devolve este erro quando o número de tarefas de cópia em execução num projeto excedeu o limite diário. Para saber mais sobre o limite de tarefas de cópia por dia, consulte o artigo Tarefas de cópia.
Mensagem de erro
Your project exceeded quota for copies per project
Diagnóstico
Se quiser recolher mais dados sobre a origem dos trabalhos de cópia, pode experimentar o seguinte:
Se os seus trabalhos de cópia estiverem localizados numa única região ou em apenas algumas, pode tentar consultar a tabela
INFORMATION_SCHEMA.JOBS
para regiões específicas. Por exemplo:SELECT creation_time, job_id, user_email, destination_table.project_id, destination_table.dataset_id, destination_table.table_id FROM `PROJECT_ID`.`region-REGION_NAME`.INFORMATION_SCHEMA.JOBS WHERE creation_time BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 2 DAY) AND CURRENT_TIMESTAMP() AND job_type = "COPY" order by creation_time DESC
Também pode ajustar o intervalo de tempo consoante o intervalo de tempo que lhe interessa.
Para ver todas as tarefas de cópia em todas as regiões, pode usar o seguinte filtro no Cloud Logging:
resource.type="bigquery_resource" protoPayload.methodName="jobservice.insert" protoPayload.serviceData.jobInsertRequest.resource.jobConfiguration.tableCopy:*
Resolução
- Se o objetivo das operações de cópia frequentes for criar um instantâneo dos dados, considere usar instantâneos de tabelas. As capturas instantâneas de tabelas são uma alternativa mais barata e rápida à cópia de tabelas completas.
- Pode solicitar um aumento da quota contactando o apoio técnico ou as vendas. A revisão e o processamento da solicitação podem demorar vários dias. Recomendamos que indique a prioridade, o exemplo de utilização e o ID do projeto no pedido.
Erro de quota de bytes extraídos por dia excedida
O BigQuery devolve este erro quando a extração excede o limite diário predefinido de 50 TiB num projeto. Para mais informações sobre os limites de tarefas de extração, consulte o artigo Tarefas de extração.
Mensagem de erro
Your usage exceeded quota for ExtractBytesPerDay
Diagnóstico
Se estiver a exportar uma tabela com mais de 50 TiB, a exportação falha porque excede o limite de extração. Para contornar este problema, consulte a resolução. Se quiser exportar dados de tabelas para partições de tabelas específicas, pode usar um decorador de partições para identificar as partições a exportar.
Se quiser recolher utilizações de dados de exportação nos últimos dias, pode experimentar o seguinte:
Veja as quotas do seu projeto com critérios de filtro, como
Name: Extract bytes per day
ouMetric: bigquery.googleapis.com/quota/extract/bytes
, juntamente com o gráfico Mostrar utilização para ver a tendência de utilização ao longo de alguns dias.Em alternativa, pode consultar
INFORMATION_SCHEMA.JOBS_BY_PROJECT
para ver o total de bytes extraídos ao longo de alguns dias. Por exemplo, a seguinte consulta devolve o total de bytes processados diariamente pelas tarefasEXTRACT
nos últimos sete dias.SELECT TIMESTAMP_TRUNC(creation_time, DAY) AS day, SUM ( total_bytes_processed ) / POW(1024, 3) AS total_gigabytes_processed FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS_BY_PROJECT WHERE creation_time BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY) AND CURRENT_TIMESTAMP() AND job_type = "EXTRACT" GROUP BY 1 ORDER BY 2 DESC
Em seguida, pode refinar ainda mais os resultados identificando as tarefas específicas que estão a consumir mais bytes do que o esperado. O exemplo seguinte devolve as 100 principais tarefas que estão a consumir mais de 100 GB processados nos últimos sete dias.
EXTRACT
SELECT creation_time, job_id, total_bytes_processed/POW(1024, 3) AS total_gigabytes_processed FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS_BY_PROJECT WHERE creation_time BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY) AND CURRENT_TIMESTAMP() AND job_type="EXTRACT" AND total_bytes_processed > (POW(1024, 3) * 100) ORDER BY total_bytes_processed DESC LIMIT 100
Em alternativa, pode usar o explorador de tarefas com filtros como Bytes processed more than
para filtrar tarefas de processamento elevado durante um período especificado.
Resolução
Um método para resolver este erro de quota é criar uma reserva de espaço e atribuir o seu projeto à reserva com o tipo de tarefa PIPELINE
. Este método pode ignorar a verificação de limites, uma vez que usa as suas reservas dedicadas em vez de um conjunto de vagas partilhadas gratuito. Se necessário, pode eliminar a reserva se quiser usar um conjunto de espaços partilhados mais tarde.
Para abordagens alternativas que permitem exportar mais de 50 TiB, consulte a secção de notas em Tarefas de extração.
Máximo de tabledata.list
bytes por segundo por erros de quota do projeto
O BigQuery devolve este erro quando o número do projeto mencionado na mensagem de erro atinge o tamanho máximo de dados que podem ser lidos através da chamada da API tabledata.list
num projeto por segundo. Para mais informações, consulte o artigo
Máximo de tabledata.list
bytes por minuto.
Mensagem de erro
Your project:[project number] exceeded quota for tabledata.list bytes per second per project
Resolução
Para resolver este erro, faça o seguinte:
- Em geral, recomendamos que tente manter-se abaixo deste limite. Por exemplo, espaçando os pedidos durante um período mais longo com atrasos. Se o erro não ocorrer com frequência, a implementação de novas tentativas com recuo exponencial resolve este problema.
- Se o exemplo de utilização esperar uma leitura rápida e frequente de uma grande quantidade de dados de uma tabela, recomendamos que use a API BigQuery Storage Read em vez da API
tabledata.list
. Se as sugestões anteriores não funcionarem, pode pedir um aumento da quota no Google Cloud painel de controlo da API da consola fazendo o seguinte:
- Aceda ao Google Cloud painel de controlo da API da consola.
- No painel de controlo, filtre por Quota:
Tabledata list bytes per minute (default quota)
. - Selecione a quota e siga a instrução em Peça um ajuste de quota.
A revisão e o processamento do pedido podem demorar vários dias.
Erros de limite do número máximo de pedidos de API
O BigQuery devolve este erro quando atinge o limite de taxa para o número de pedidos API para uma API BigQuery por utilizador por método, por exemplo, as chamadas do método tables.get
de uma conta de serviço ou as chamadas do método jobs.insert
de um email de utilizador diferente.
Para mais informações, consulte o limite de taxa do número máximo de pedidos de API por segundo por utilizador por método na API BigQuery.
Mensagem de erro
Quota exceeded: Your user_method exceeded quota for concurrent api requests per user per method.
Quando encontrar este erro, diagnostique o problema e, em seguida, siga os passos recomendados para o resolver.
Diagnóstico
Se não identificou o método que atingiu este limite de taxa, faça o seguinte:
Para contas de serviço
Aceda ao projeto que aloja a conta de serviço.
Na Google Cloud consola, aceda ao painel de controlo da API.
Para ver instruções sobre como ver as informações de utilização detalhadas de uma API, consulte o artigo Usar o painel de controlo da API.
No painel de controlo da API, selecione API BigQuery.
Para ver informações de utilização mais detalhadas, selecione Métricas e, de seguida, faça o seguinte:
Para Selecionar gráficos, selecione Tráfego por método de API.
Filtre o gráfico pelas credenciais da conta de serviço. Pode ver picos para um método no intervalo de tempo em que detetou o erro.
Para chamadas API
Algumas chamadas API registam erros nos registos de auditoria do BigQuery no Cloud Logging. Para identificar o método que atingiu o limite, faça o seguinte:
Na Google Cloud consola, aceda ao menu de navegação > Explorador de registos para o seu projeto: Google Cloud
e, de seguida, selecione RegistoFiltre os registos executando a seguinte consulta:
resource.type="bigquery_resource" protoPayload.authenticationInfo.principalEmail="<user email or service account>" "Too many API requests per user per method for this user_method" In the log entry, you can find the method name under the property protoPayload.method_name.
Para mais informações, consulte a vista geral dos registos de auditoria do BigQuery.
Resolução
Para resolver este erro de quota, faça o seguinte:
Reduza o número de pedidos API ou adicione um atraso entre vários pedidos API para que o número de pedidos permaneça abaixo deste limite.
Se o limite for excedido apenas ocasionalmente, pode implementar novas tentativas neste erro específico com retirada exponencial.
Se inserir dados com frequência, considere usar inserções por stream, uma vez que as inserções por stream não são afetadas pela quota da API BigQuery. No entanto, a API Streaming Inserts tem custos associados e o seu próprio conjunto de limites e quotas.
Para saber mais acerca do custo das inserções por transmissão, consulte os preços do BigQuery.
Ao carregar dados para o BigQuery através do Dataflow com o conetor BigQuery I/O, pode encontrar este erro para o método
tables.get
. Para resolver este problema, faça o seguinte:Defina a disposição de criação da tabela de destino como
CREATE_NEVER
. Para mais informações, consulte Crie uma disposição.Use a versão 2.24.0 ou superior do SDK do Apache Beam. Nas versões anteriores do SDK, a disposição
CREATE_IF_NEEDED
chama o métodotables.get
para verificar se a tabela existe.
Pode pedir um aumento da quota contactando o apoio técnico ou a equipa de vendas. Para obter quota adicional, consulte o artigo Peça um aumento da quota. O processamento de um pedido de aumento da quota pode demorar vários dias. Para fornecer mais informações para a sua solicitação, recomendamos que inclua a prioridade da tarefa, o utilizador que está a executar a consulta e o método afetado.
Resolva problemas de quotas ou limites que não podem ser aumentados
Não pode aumentar as seguintes quotas nem limites, mas pode aplicar as soluções alternativas ou as práticas recomendadas sugeridas para os mitigar.
Erros de limite da fila de consultas
Se um projeto tentar colocar em fila mais consultas interativas ou em lote do que o seu limite de fila permite, pode encontrar este erro.
Mensagem de erro
Quota exceeded: Your project and region exceeded quota for max number of jobs that can be queued per project.
Resolução
Não é possível aumentar este limite. Para resolver este erro de quota, faça o seguinte:
Pausar a tarefa. Se identificar um processo ou um pipeline responsável por um aumento nas consultas, pause esse processo ou pipeline.
Use trabalhos com prioridade de lote. Pode colocar em fila mais consultas em lote do que consultas interativas.
Distribuir consultas. Organize e distribua a carga por diferentes projetos, conforme indicado pela natureza das suas consultas e pelas necessidades da sua empresa.
Distribuir tempos de corrida. Distribuir a carga por um período mais longo. Se a sua solução de relatórios precisar de executar muitas consultas, experimente introduzir alguma aleatoriedade no momento em que as consultas começam. Por exemplo, não inicie todos os relatórios ao mesmo tempo.
Use o BigQuery BI Engine. Se encontrou este erro ao usar uma ferramenta de inteligência empresarial (IE) para criar painéis de controlo que consultam dados no BigQuery, recomendamos que use o BigQuery BI Engine. A utilização do BigQuery BI Engine é ideal para este exemplo de utilização.
Otimize as consultas e o modelo de dados. Muitas vezes, uma consulta pode ser reescrita para ser executada de forma mais eficiente. Por exemplo, se a sua consulta contiver uma expressão de tabela comum (CTE), ou seja, uma cláusula
WITH
, que é referenciada em mais do que um local na consulta, este cálculo é feito várias vezes. É melhor persistir os cálculos feitos pela CTE numa tabela temporária e, em seguida, referenciá-la na consulta.As junções múltiplas também podem ser a origem da falta de eficiência. Neste caso, pode considerar usar colunas aninhadas e repetidas. A utilização desta opção melhora frequentemente a localidade dos dados, elimina a necessidade de algumas junções e, no geral, reduz o consumo de recursos e o tempo de execução da consulta.
A otimização das consultas torna-as mais baratas. Assim, quando usa os preços baseados na capacidade, pode executar mais consultas com os seus slots. Para mais informações, consulte o artigo Introdução à otimização do desempenho das consultas.
Otimize o modelo de consulta. O BigQuery não é uma base de dados relacional. Não está otimizado para um número infinito de pequenas consultas. A execução de um grande número de pequenas consultas esgota rapidamente as suas quotas. Essas consultas não são executadas com a mesma eficiência que nos produtos de base de dados mais pequenos. O BigQuery é um grande armazém de dados e este é o seu principal exemplo de utilização. Tem um melhor desempenho com consultas analíticas sobre grandes quantidades de dados.
Persistir dados (tabelas guardadas). Pré-processe os dados no BigQuery e armazene-os em tabelas adicionais. Por exemplo, se executar muitas consultas semelhantes e com grande exigência computacional com diferentes
WHERE
condições, os respetivos resultados não são colocados em cache. Essas consultas também consomem recursos sempre que são executadas. Pode melhorar o desempenho dessas consultas e diminuir o respetivo tempo de processamento pré-calculando os dados e armazenando-os numa tabela. Estes dados pré-calculados na tabela podem ser consultados por consultasSELECT
. Muitas vezes, pode fazê-lo durante a carregamento no processo de ETL ou usando consultas agendadas ou vistas materializadas.Use o modo de teste. Execute consultas no modo de teste, que estima o número de bytes lidos, mas não processa efetivamente a consulta.
Pré-visualize os dados da tabela. Para experimentar ou explorar dados em vez de executar consultas, pré-visualize os dados da tabela com a capacidade de pré-visualização de tabelas no BigQuery.
Use resultados de consultas em cache. Todos os resultados das consultas, incluindo consultas interativas e em lote, são colocados em cache em tabelas temporárias durante aproximadamente 24 horas, com algumas exceções. Embora a execução de uma consulta em cache continue a ser contabilizada para o limite de consultas concorrentes, as consultas que usam resultados em cache são significativamente mais rápidas do que as consultas que não usam resultados em cache, porque o BigQuery não precisa de calcular o conjunto de resultados.
Erros de limite de tamanho da mistura
O BigQuery devolve este erro quando o seu projeto excede o limite máximo de tamanho do disco e da memória disponível para operações de mistura.
Esta quota é calculada por reserva e dividida entre projetos para as reservas. A quota não pode ser modificada pelo Cloud Customer Care. Pode saber mais sobre a sua utilização consultando a vista INFORMATION_SCHEMA.JOBS_TIMELINE
.
Mensagem de erro
Recebe uma das seguintes mensagens de erro:
Quota exceeded: Your project exceeded quota for total shuffle size limit.
Resources exceeded: Your project or organization exceeded the maximum disk and memory limit available for shuffle operations. Consider provisioning more slots, reducing query concurrency, or using more efficient logic in this job.
Resolução
Para resolver este erro, faça o seguinte:
- Aumente a sua reserva.
- Otimize as consultas.
- Reduza a simultaneidade de consultas ou a materialização de resultados intermédios para reduzir a dependência de recursos. Para mais informações, consulte os artigos Consultar filas e Criar vistas materializadas.
Número de modificações de partições para erros de quota de tabelas com partições de colunas
O BigQuery devolve este erro quando a tabela particionada por colunas atinge a quota do número de modificações de partições permitidas por dia. As modificações de partições incluem o total de todas as tarefas de carregamento, as tarefas de cópia e as tarefas de consulta que acrescentam ou substituem uma partição de destino.
Para ver o valor do limite de modificações de partições por tabela particionada por colunas por dia, consulte o artigo Tabelas particionadas.
Mensagem de erro
Quota exceeded: Your table exceeded quota for Number of partition modifications to a column partitioned table
Resolução
Não é possível aumentar esta quota. Para resolver este erro de quota, faça o seguinte:
- Altere a partição na tabela para ter mais dados em cada partição, de modo a diminuir o número total de partições. Por exemplo, altere a partição por dia para partição por mês ou altere a forma como faz a partição da tabela.
- Use a agrupamento em vez da partição.
-
Se carregar frequentemente dados de vários ficheiros pequenos armazenados no Cloud Storage que usam uma tarefa por ficheiro, combine várias tarefas de carregamento numa única tarefa. Pode carregar a partir de vários URIs do Cloud Storage com uma lista separada por vírgulas (por exemplo,
gs://my_path/file_1,gs://my_path/file_2
) ou usando carateres universais (por exemplo,gs://my_path/*
).Para mais informações, consulte o artigo Carregue dados em lote.
- Se usar tarefas de carregamento, seleção ou cópia para anexar linhas únicas de dados a uma tabela, por exemplo, deve considerar agrupar várias tarefas numa só. O BigQuery não tem um bom desempenho quando usado como uma base de dados relacional. Como prática recomendada, evite executar ações de anexação de uma única linha frequentes.
- Para acrescentar dados a uma taxa elevada, considere usar a API BigQuery Storage Write. É uma solução recomendada para a importação de dados de elevado desempenho. A API Storage Write do BigQuery tem funcionalidades robustas, incluindo a semântica de entrega exatamente uma vez. Para saber mais sobre limites e quotas, consulte o artigo API Storage Write e, para ver os custos de utilização desta API, consulte o artigo Preços de carregamento de dados do BigQuery.
-
Para monitorizar o número de partições modificadas numa tabela, use a vista
INFORMATION_SCHEMA
.
Erros de limite máximo de operações de atualização de metadados de tabelas
O BigQuery devolve este erro quando a sua tabela atinge o limite para o número máximo de operações de atualização de metadados da tabela por tabela para tabelas padrão.
As operações de tabelas incluem o total combinado de todas as tarefas de carregamento, tarefas de cópia e tarefas de consulta que acrescentam ou substituem uma tabela de destino ou que usam um DML DELETE
, INSERT
, MERGE
, TRUNCATE TABLE
ou UPDATE
para escrever dados numa tabela.
Para ver o valor do limite de operações de atualização de metadados de tabelas por tabela, consulte Tabelas padrão.
Mensagem de erro
Exceeded rate limits: too many table update operations for this table
Quando encontrar este erro, diagnostique o problema e, em seguida, siga os passos recomendados para o resolver.
Diagnóstico
As atualizações das tabelas de metadados podem ter origem em chamadas API que modificam os metadados de uma tabela ou em tarefas que modificam o conteúdo de uma tabela. Se não tiver identificado a origem de onde a maioria das operações de atualização dos metadados de uma tabela está a ter origem, faça o seguinte:
Identifique chamadas da API
Aceda ao menu de Google Cloud navegação> Explorador de registos:
e, de seguida, selecione RegistoFiltre os registos para ver as operações da tabela executando a seguinte consulta:
resource.type="bigquery_dataset" protoPayload.resourceName="projects/my-project-id/datasets/my_dataset/tables/my_table" (protoPayload.methodName="google.cloud.bigquery.v2.TableService.PatchTable" OR protoPayload.methodName="google.cloud.bigquery.v2.TableService.UpdateTable" OR protoPayload.methodName="google.cloud.bigquery.v2.TableService.InsertTable")
Identifique empregos
A consulta seguinte devolve uma lista de trabalhos que modificam a tabela afetada no projeto no último dia. Se espera que vários projetos numa organização escrevam na tabela, substitua JOBS_BY_PROJECT
por JOBS_BY_ORGANIZATION
.
SELECT job_id, user_email, query FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS_BY_PROJECT WHERE creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP, INTERVAL 1 DAY) AND destination_table.project_id = "my-project-id" AND destination_table.dataset_id = "my_dataset" AND destination_table.table_id = "my_table"
Para mais informações, consulte a vista geral dos registos de auditoria do BigQuery.
Resolução
Não é possível aumentar esta quota. Para resolver este erro de quota, faça o seguinte:
- Reduza a taxa de atualização dos metadados da tabela.
- Adicione um atraso entre tarefas ou operações de tabelas para garantir que a taxa de atualização está dentro do limite.
Para inserções ou modificações de dados, considere usar operações DML. As operações DML não são afetadas pelo limite de taxa de operações de atualização de metadados de tabelas máximo por tabela.
As operações DML têm outros limites e quotas. Para mais informações, consulte o artigo Usar a linguagem de manipulação de dados (DML).
-
Se carregar frequentemente dados de vários ficheiros pequenos armazenados no Cloud Storage que usam uma tarefa por ficheiro, combine várias tarefas de carregamento numa única tarefa. Pode carregar a partir de vários URIs do Cloud Storage com uma lista separada por vírgulas (por exemplo,
gs://my_path/file_1,gs://my_path/file_2
) ou usando carateres universais (por exemplo,gs://my_path/*
).Para mais informações, consulte o artigo Carregue dados em lote.
- Se usar tarefas de carregamento, seleção ou cópia para anexar linhas únicas de dados a uma tabela, por exemplo, deve considerar agrupar várias tarefas numa só. O BigQuery não tem um bom desempenho quando usado como uma base de dados relacional. Como prática recomendada, evite executar ações de anexação de uma única linha frequentes.
- Para acrescentar dados a uma taxa elevada, considere usar a API BigQuery Storage Write. É uma solução recomendada para a importação de dados de elevado desempenho. A API Storage Write do BigQuery tem funcionalidades robustas, incluindo a semântica de entrega exatamente uma vez. Para saber mais sobre limites e quotas, consulte o artigo API Storage Write e, para ver os custos de utilização desta API, consulte o artigo Preços de carregamento de dados do BigQuery.
-
Para monitorizar o número de partições modificadas numa tabela, use a vista
INFORMATION_SCHEMA
.
Erros de quota de importações de tabelas ou anexos de consultas
O BigQuery devolve esta mensagem de erro quando a sua tabela atinge o limite de operações de tabelas por dia para tabelas padrão. As operações de tabelas incluem o total combinado de todas as tarefas de carregamento, tarefas de cópia e tarefas de consulta que acrescentam ou substituem uma tabela de destino.
Para ver o valor do limite de operações de tabela por dia, consulte Tabelas padrão.
Mensagem de erro
Your table exceeded quota for imports or query appends per table
Quando encontrar este erro, diagnostique o problema e, em seguida, siga os passos recomendados para o resolver.
Diagnóstico
Se não tiver identificado a origem da maioria das operações de tabelas, faça o seguinte:
Tome nota do projeto, do conjunto de dados e da tabela para os quais a consulta, o carregamento ou a tarefa de cópia com falhas está a escrever.
Use
INFORMATION_SCHEMA.JOBS_BY_*
tabelas para saber mais sobre as tarefas que modificam a tabela.O exemplo seguinte encontra a contagem horária de tarefas agrupadas por tipo de tarefa para o período das últimas 24 horas usando
JOBS_BY_PROJECT
. Se espera que vários projetos escrevam na tabela, substituaJOBS_BY_PROJECT
porJOBS_BY_ORGANIZATION
.SELECT TIMESTAMP_TRUNC(creation_time, HOUR), job_type, count(1) FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS_BY_PROJECT WHERE creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP, INTERVAL 1 DAY) AND destination_table.project_id = "my-project-id" AND destination_table.dataset_id = "my_dataset" AND destination_table.table_id = "my_table" GROUP BY 1, 2 ORDER BY 1 DESC
Resolução
Não é possível aumentar esta quota. Para resolver este erro de quota, faça o seguinte:
-
Se carregar frequentemente dados de vários ficheiros pequenos armazenados no Cloud Storage que usam uma tarefa por ficheiro, combine várias tarefas de carregamento numa única tarefa. Pode carregar a partir de vários URIs do Cloud Storage com uma lista separada por vírgulas (por exemplo,
gs://my_path/file_1,gs://my_path/file_2
) ou usando carateres universais (por exemplo,gs://my_path/*
).Para mais informações, consulte o artigo Carregue dados em lote.
- Se usar tarefas de carregamento, seleção ou cópia para anexar linhas únicas de dados a uma tabela, por exemplo, deve considerar agrupar várias tarefas numa só. O BigQuery não tem um bom desempenho quando usado como uma base de dados relacional. Como prática recomendada, evite executar ações de anexação de uma única linha frequentes.
- Para acrescentar dados a uma taxa elevada, considere usar a API BigQuery Storage Write. É uma solução recomendada para a importação de dados de elevado desempenho. A API Storage Write do BigQuery tem funcionalidades robustas, incluindo a semântica de entrega exatamente uma vez. Para saber mais sobre limites e quotas, consulte o artigo API Storage Write e, para ver os custos de utilização desta API, consulte o artigo Preços de carregamento de dados do BigQuery.
-
Para monitorizar o número de partições modificadas numa tabela, use a vista
INFORMATION_SCHEMA
.
Demasiadas instruções DML pendentes em relação à tabela
Este erro significa que o número de declarações DML de mutação simultâneas (UPDATE
, DELETE
, MERGE
) executadas na mesma tabela excedeu o limite da quota da linguagem de manipulação de dados (DML).
Este limite de quota é por tabela e aplica-se apenas a declarações DML de mutação, que não incluem INSERT
.
Resolução
Processe em lote as tarefas DML seguindo as práticas recomendadas para declarações DML.
Erros de quota de carregamento de ficheiros CSV
Se carregar um ficheiro CSV grande através do comando bq load
com a flag --allow_quoted_newlines
, pode ocorrer este erro.
Mensagem de erro
Input CSV files are not splittable and at least one of the files is larger than
the maximum allowed size. Size is: ...
Resolução
Para resolver este erro de quota, faça o seguinte:
- Defina a flag
--allow_quoted_newlines
comofalse
. - Divida o ficheiro CSV em partes mais pequenas, cada uma com menos de 4 GB.
Para mais informações sobre os limites aplicáveis quando carrega dados para o BigQuery, consulte o artigo Tarefas de carregamento.
O utilizador excedeu a quota de pedidos project.lists
simultâneos
Este erro ocorre quando as tarefas do Microsoft Power BI que comunicam com o BigQuery através de um controlador ODBC da Simba ou do DataHub falham porque excedem o limite da API project.list
. Para resolver este problema, use as soluções alternativas de curto ou longo prazo descritas nesta secção.
Mensagem de erro
Your user exceeded quota for concurrent project.lists requests
Diagnóstico
Este erro ocorre durante a fase de ligação e deteção do Power BI quando um relatório do Power BI é atualizado e o controlador Simba estabelece uma ligação a um projeto específico do BigQuery.
Resolução a curto prazo
Para resolver este problema a curto prazo, use as seguintes soluções alternativas, que estão ordenadas da mais para a menos eficaz. Implemente correções três ou quatro, consoante se ligue ao BigQuery através do controlador Simba ou do DataHub.
Para correções a longo prazo, consulte a secção Resolução a longo prazo.
Alternar atualizações de relatórios. Se não conseguir modificar o DSN, mitigue o problema de quota reduzindo o número de pedidos simultâneos. Em vez de atualizar todos os relatórios em simultâneo (por exemplo, às 09:00), altere os respetivos horários em alguns minutos (por exemplo, às 09:01, 09:03 e 09:05). Esta prática distribui as chamadas de API ao longo do tempo, o que torna menos provável que atinja o limite de chamadas simultâneas.
Implemente novas tentativas no Power BI. Esta estratégia reativa ajuda um relatório a recuperar de uma falha temporária. O Power BI tem uma lógica de repetição incorporada para falhas na atualização de dados. Embora esta prática não impeça o erro de quota, torna o seu pipeline mais resiliente, permitindo que um relatório seja bem-sucedido numa tentativa subsequente após a diminuição do pico inicial de chamadas API. Para implementar esta correção, faça o seguinte:
- No serviço Power BI, aceda a Definições para o seu conjunto de dados.
- Expanda a secção Atualização agendada. Em Tentar novamente, configure o Power BI para voltar a executar automaticamente uma atualização com falha.
Para versões anteriores do controlador Simba, especifique o ID do projeto na ligação ODBC. Esta ação impede que o condutor faça a chamada de deteção da
projects.list
. Em alternativa, o controlador liga-se diretamente ao projeto especificado, o que evita chamadas de API desnecessárias e resolve o problema de quota.Os controladores mais recentes falham imediatamente se o projeto não for especificado com uma mensagem semelhante a
Unable to establish connection with data source. Missing settings: {[Catalog]}
.Para fazer esta correção, faça o seguinte:
- Na máquina que executa o Power BI Gateway ou o Power BI Desktop, abra a aplicação Origens de dados ODBC (64 bits).
- No ecrã de configuração principal do controlador ODBC da Simba para o
BigQuery, preencha o campo Catálogo (projeto) com o
ID do projeto Google Cloud específico, por exemplo,
my-gcp-project-id
.
Para versões anteriores do DataHub, especifique o ID do projeto na configuração de carregamento do DataHub. Faça esta correção se estiver a usar o DataHub em vez do controlador Simba. Semelhante ao Simba, as versões posteriores do DataHub requerem que especifique o ID do projeto, caso contrário, não estabelecem ligação ao BigQuery.
Para evitar exceder os limites do DataHub, modifique a configuração de carregamento do DataHub para fornecer uma lista explícita de IDs de projetos a analisar. Isto impede que a configuração do DataHub encontre todos os projetos que a conta de serviço pode ver.
No ficheiro da receita de origem do BigQuery (normalmente, um ficheiro YAML), use a configuração
project_ids
para enumerar os projetos que quer carregar. Em seguida, volte a implementar a receita de carregamento do DataHub com a nova configuração. Veja o exemplo seguinte e este exemplo mais longo fornecido pelo DataHub.Segue-se um exemplo de um fragmento de configuração do DataHub:
source: type: "bigquery" config: # Instead of relying on discovery, explicitly list the projects. # This avoids the problematic projects.list() API call. project_ids: - "YOUR_PRODUCTION_PROJECT_ID" - "YOUR_ANALYTICS_PROJECT_ID" - "ANOTHER_BQ_PROJECT"
Resolução a longo prazo
A melhor correção a longo prazo para esta mensagem de erro é criarGoogle Cloud contas de serviço separadas e dedicadas para cada função. Por exemplo, crie uma conta de serviço para todos os relatórios do Power BI e uma conta de serviço para o carregamento do DataHub.
Esta prática recomendada isola a utilização da API em quotas separadas e impede que uma tarefa de carga elevada no DataHub provoque falhas nos relatórios empresariais críticos no Power BI.
Use o plano de ação nas secções seguintes para resolver erros de quota a longo prazo no Power BI e no DataHub.
Fase 1: preparação
- Informe os proprietários dos gateways do Power BI e da configuração do DataHub de que vai fazer alterações coordenadas para resolver falhas de tarefas em curso.
- Na Google Cloud consola, crie
duas novas contas de serviço, por exemplo,
sa-powerbi-gateway@...
esa-datahub-ingestion@...
. - Crie chaves de contas de serviço para as contas de serviço do Power BI e do DataHub.
- Conceda a cada nova conta de serviço autorizações de privilégios mínimos atribuindo as seguintes funções de gestão de identidade e de acesso que lhe permitem realizar as respetivas tarefas na gestão de identidade e de acesso (IAM) relevante. Evite atribuir funções demasiado amplas, por exemplo, ProjectEditor.
Funções necessárias
A conta de serviço do Power BI executa consultas e lê dados de tabelas. Conceda as seguintes funções às contas de serviço em cada Google Cloud projeto que contém dados aos quais o Power BI tem de aceder. Para saber mais acerca destas funções, consulte o artigo Funções do BigQuery.
- Visualizador de dados do BigQuery: oferece acesso só de leitura a conjuntos de dados, tabelas e vistas.
- Utilizador da tarefa do BigQuery: concede autorizações para executar tarefas, incluindo consultas, o que é essencial para o Power BI executar os respetivos pedidos.
A conta de serviço para o carregamento do Data Hub só precisa de ler metadados, como nomes de tabelas, esquemas e descrições, e não os dados nas tabelas. Conceda a seguinte função ao nível do projeto para cada projeto que o DataHub analisa. Para saber mais sobre estas funções, consulte o artigo Funções de IAM para o BigQuery.
Leitor de metadados do BigQuery: esta função foi concebida especificamente para ler metadados. Concede autorizações para listar conjuntos de dados e tabelas e ver os respetivos metadados sem conceder acesso aos dados subjacentes.
Fase 2: implementação coordenada
Durante um período de utilização reduzida, o administrador do Power BI atualiza as configurações do DSN ODBC nas máquinas da gateway através dos seguintes passos:
- Altera o método de autenticação para usar a nova
sa-powerbi-gateway@...
chave da conta de serviço criada num passo anterior. - Se ainda não o fez como uma correção a curto prazo, introduza o ID do projeto no campo Catálogo (projeto) do controlador ODBC. Google Cloud
- O proprietário do DataHub atualizou o ficheiro YAML de configuração da origem do BigQuery.
- Aponta para a nova chave da conta de serviço
sa-datahub-ingestion@...
criada num passo anterior. - Se ainda não tiver sido feito como uma correção a curto prazo, use o parâmetro
project_ids
para listar explicitamente os projetos a serem analisados. - Volta a implementar a receita de carregamento do DataHub com a nova configuração.
Fase 3: validação e monitorização
Para validar e monitorizar os efeitos das correções, os administradores do Power BI e do DataHub efetuam os seguintes passos:
- Acionar manualmente uma atualização para alguns relatórios principais do Power BI e uma nova execução de carregamento no DataHub. Confirme que estas tarefas são concluídas com êxito sem incorrer em erros de quota.
- Na Google Cloud consola, navegue para IAM e administrador > Quotas.
- Filtre o serviço API BigQuery.
- Encontre a quota denominada Pedidos
project.lists
simultâneos e clique no ícone do gráfico para ver a utilização ao longo do tempo.
Os administradores devem observar uma diminuição drástica e permanente na utilização desta chamada API específica, o que confirma que a correção foi bem-sucedida.