Soluciona problemas de cuota y de límite

BigQuery tiene varias cuotas y límites que limitan la tasa y el volumen de diferentes solicitudes y operaciones. Existen para proteger la infraestructura y ayudar a proteger contra el uso inesperado del cliente. En este documento, se describe cómo diagnosticar y mitigar errores específicos que surgen de las cuotas y los límites.

Algunos mensajes de error especifican cuotas o límites que puedes aumentar, mientras que otros especifican cuotas o límites que no puedes aumentar. Alcanzar un límite fijo significa que debes implementar soluciones alternativas temporales o permanentes, o bien prácticas recomendadas para tu carga de trabajo. Esto es una práctica recomendada, incluso para las cuotas o los límites que se pueden aumentar.

En este documento, se organizan los mensajes de error y sus soluciones según estas categorías. Además, en la sección "Descripción general" que se incluye más adelante, se explica cómo leer un mensaje de error y aplicar la solución correcta para tu problema.

Si tu mensaje de error no aparece en este documento, consulta la lista de mensajes de error, que tiene información más genérica sobre el error.

Descripción general

Si una operación de BigQuery falla debido a que se excede una cuota, la API muestra el código de estado HTTP 403 Forbidden. En el cuerpo de la respuesta, se incluye más información sobre la cuota que se alcanzó. El cuerpo de la respuesta es similar al siguiente:

{
  "code" : 403,
  "errors" : [ {
    "domain" : "global",
    "message" : "Quota exceeded: ...",
    "reason" : "quotaExceeded"
  } ],
  "message" : "Quota exceeded: ..."
}

En el campo message de la carga útil, se describe qué límite se superó. Por ejemplo, el campo message podría decir Exceeded rate limits: too many table update operations for this table.

En general, los límites de cuota se dividen en dos categorías que se indican con el campo reason de la carga útil de la respuesta.

  • rateLimitExceeded: Este valor indica un límite a corto plazo. Para resolver estos problemas de límite, vuelve a intentar la operación después de unos segundos. Usa la retirada exponencial entre los reintentos. Es decir, aumenta de forma exponencial el tiempo entre cada reintento.

  • quotaExceeded: Este valor indica un límite a largo plazo. Si alcanzas un límite de cuota a largo plazo, debes esperar 10 minutos o más antes de intentar realizar la operación. Si alcanzas uno de estos límites de cuota a largo plazo con regularidad, debes analizar la carga de trabajo para descubrir cómo mitigar el problema. Las mitigaciones pueden incluir la optimización de la carga de trabajo o la solicitud de un aumento de cuota.

En el caso de los errores quotaExceeded, examina el mensaje de error para comprender qué límite de cuota se superó. Luego, analiza la carga de trabajo para ver si puedes evitar alcanzar la cuota.

En algunos casos, para aumentar la cuota, puedes comunicarte con el equipo de asistencia de BigQuery o con el equipo de Google Cloud Ventas, pero te recomendamos que primero pruebes las sugerencias de este documento.

Diagnóstico

Para diagnosticar problemas, haz lo siguiente:

  • Usa las vistas INFORMATION_SCHEMA junto con un calificador de región para analizar el problema subyacente. Estas vistas contienen metadatos sobre tus recursos de BigQuery, incluidos trabajos, reservas e inserciones de transmisión.

    Por ejemplo, en la siguiente consulta, se usa la vista INFORMATION_SCHEMA.JOBS para enumerar todos los errores del día anterior relacionados con la cuota:

    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')

    Reemplaza REGION_NAME por la región del proyecto. Debe estar precedido por region-. Por ejemplo, para la multirregión US, usa region-us.

  • Visualiza los errores en los Registros de auditoría de Cloud.

    Por ejemplo, si usas el explorador de registros, en la siguiente consulta, se muestran errores Quota exceeded o limit en la string del mensaje:

    resource.type = ("bigquery_project" OR "bigquery_dataset")
    protoPayload.status.code ="7"
    protoPayload.status.message: ("Quota exceeded" OR "limit")
    

    En este ejemplo, el código de estado 7 indica PERMISSION_DENIED, que corresponde al código de estado HTTP 403.

    Para obtener más muestras de consultas de los Registros de auditoría de Cloud, visita Consultas de BigQuery.

Soluciona problemas relacionados con cuotas o límites que se pueden aumentar

Puedes aumentar las siguientes cuotas y límites. Sin embargo, es mejor que primero pruebes las soluciones alternativas o las prácticas recomendadas sugeridas.

Tu proyecto superó la cuota gratuita de análisis de bytes de consultas

BigQuery muestra este error cuando ejecutas una consulta en el nivel de uso gratuito y la cuenta alcanza el límite mensual de la cantidad de datos que se puede consultar. Para obtener más información sobre los precios de las consultas, consulta Nivel de uso gratuito.

Mensaje de error

Your project exceeded quota for free query bytes scanned

Solución

Para seguir usando BigQuery, debes actualizar la cuenta a una cuenta de Facturación de Cloud pagada.

Errores de cuota relacionados con la inserción de transmisión

En esta sección, se proporcionan algunas sugerencias para solucionar los errores de cuota relacionados con la transmisión de datos a BigQuery.

En ciertas regiones, las inserciones de transmisión tienen una cuota más alta si no propagas el campo insertId de cada fila. Si deseas obtener más información sobre las cuotas de las inserciones de transmisión, consulta Inserciones de transmisión. Los errores relacionados con la cuota de transmisión de BigQuery dependen de la presencia o ausencia de insertId.

Mensaje de error

Si el campo insertId está vacío, es posible que surja el siguiente error de cuota:

Límite de cuota Mensaje de error
Bytes por segundo por proyecto La entidad con gaia_id GAIA_ID, del proyecto PROJECT_ID en la región REGION superó la cuota de inserción de bytes por segundo.

Si se propaga el campo insertId, es posible que surjan los siguientes errores de cuota:

Límite de cuota Mensaje de error
Filas por segundo por proyecto El proyecto PROJECT_ID en la región REGION superó la cuota de inserción de transmisión de filas por segundo.
Filas por segundo por tabla La tabla TABLE_ID superó la cuota de inserción de transmisión de filas por segundo.
Bytes por segundo por tabla La tabla TABLE_ID superó la cuota de inserción de transmisión de bytes por segundo.

El propósito del campo insertId es anular la duplicación de las filas insertadas. Si varias inserciones con el mismo insertId llegan dentro de un período de pocos minutos, BigQuery escribe una sola versión del registro. Sin embargo, esta anulación automática de duplicación no está garantizada. Para obtener la máxima capacidad de procesamiento de transmisión, recomendamos que no incluyas insertId y, en su lugar, uses la anulación manual de duplicación. Para obtener más información, consulta Garantiza la coherencia de los datos.

Cuando encuentres este error, diagnostica el problema y, luego, sigue los pasos recomendados para resolverlo.

Diagnóstico

Usa las vistas STREAMING_TIMELINE_BY_* para analizar el tráfico de transmisión. En estas vistas, se juntan las estadísticas de transmisión en intervalos de un minuto, agrupadas por código de error. Los errores de cuota aparecen en los resultados en los que error_code es igual a RATE_LIMIT_EXCEEDED o a QUOTA_EXCEEDED.

Según el límite de cuota específico que se haya alcanzado, observa total_rows o total_input_bytes. Si el error se produjo en una cuota a nivel de tabla, filtra por table_id.

Por ejemplo, en la siguiente consulta, se muestra el total de bytes transferidos por minuto y la cantidad total de errores de cuota:

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

Solución

Para resolver este error, haz lo siguiente:

  • Si usas el campo insertId para la anulación de duplicación, y tu proyecto está en una región que admite la cuota de transmisión más alta, te recomendamos que quites el campo insertId. Esta solución puede requerir algunos pasos adicionales para anular de forma manual la duplicación de los datos. Para obtener más información, consulta Quita los duplicados manualmente.

  • Si no usas insertId o si no es viable quitarlo, supervisa el tráfico de transmisión durante un período de 24 horas y analiza los errores de cuota:

    • Si ves sobre todo errores RATE_LIMIT_EXCEEDED, en lugar de errores QUOTA_EXCEEDED, y el tráfico total es inferior al 80% de la cuota, es probable que los errores indiquen aumentos de tráfico temporales. Puedes abordar estos errores si reintentas la operación mediante una retirada exponencial entre los reintentos.

    • Si usas un trabajo de Dataflow para insertar datos, considera usar trabajos de carga en lugar de inserciones de transmisión. Para obtener más información, consulta Configura el método de inserción. Si usas Dataflow con un conector de E/S personalizado, considera usar un conector de E/S integrado en su lugar. Para obtener más información, consulta Patrones de E/S personalizados.

    • Si ves errores QUOTA_EXCEEDED o si el tráfico total supera el 80% de la cuota de forma constante, envía una solicitud de aumento de cuota. Para obtener más información, consulta Solicita un ajuste de cuota.

    • También puedes considerar reemplazar las inserciones de transmisión con la API de Storage Write más reciente, que tiene una capacidad de procesamiento mayor, un precio más bajo y muchas funciones útiles.

Cantidad máxima de consultas simultáneas que contienen funciones remotas

BigQuery muestra este error cuando la cantidad de consultas simultáneas que contienen funciones remotas supera el límite. Sin embargo, este límite se puede aumentar. Primero, prueba las soluciones alternativas y las prácticas recomendadas.

Para obtener más información sobre los límites de las funciones remotas, consulta Funciones remotas.

Mensaje de error

Exceeded rate limits: too many concurrent queries with remote functions for
this project

Diagnóstico

Para ver los límites de las consultas simultáneas que contienen funciones remotas, consulta Límites de funciones remotas.

Solución

  • Cuando uses funciones remotas, cumple con las prácticas recomendadas para las funciones remotas.
  • Para solicitar un aumento de cuota, comunícate con el equipo de asistencia o el de Ventas. La revisión y el procesamiento de la solicitud pueden tardar varios días. Recomendamos indicar la prioridad, el caso de uso y el ID del proyecto en la solicitud.

Cantidad máxima de declaraciones CREATE MODEL

Este error significa que superaste la cuota de las instrucciones CREATE MODEL.

Mensaje de error

Quota exceeded: Your project exceeded quota for CREATE MODEL queries per project.

Solución

Si superas la cuota de las declaraciones CREATE MODEL, envía un correo electrónico a bqml-feedback@google.com y solicita un aumento de la cuota.

Errores de cuota de la cantidad máxima de trabajos de copia por día por errores

BigQuery muestra este error cuando la cantidad de trabajos de copia que se ejecutan en un proyecto superó el límite diario. Para obtener más información sobre el límite de trabajos de copia por día, consulta Trabajos de copia.

Mensaje de error

Your project exceeded quota for copies per project

Diagnóstico

Si deseas recopilar más datos sobre el origen de los trabajos de copia, puedes probar lo siguiente:

  • Si tus trabajos de copia se encuentran en una sola región o en pocas regiones, puedes intentar consultar la tabla INFORMATION_SCHEMA.JOBS para regiones específicas. Por ejemplo:

    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

    También puedes ajustar el intervalo según el rango de tiempo que te interese.

  • Para ver todos los trabajos de copia en todas las regiones, puedes usar el siguiente filtro en Cloud Logging:

    resource.type="bigquery_resource"
    protoPayload.methodName="jobservice.insert"
    protoPayload.serviceData.jobInsertRequest.resource.jobConfiguration.tableCopy:*
    

Solución

  • Si el objetivo de las operaciones de copia frecuentes es crear una instantánea de datos, considera usar instantáneas de tabla en su lugar. Las instantáneas de tablas son una alternativa más económica y rápida para copiar tablas completas.
  • Para solicitar un aumento de cuota, comunícate con el equipo de asistencia o el de Ventas. La revisión y el procesamiento de la solicitud pueden tardar varios días. Recomendamos indicar la prioridad, el caso de uso y el ID del proyecto en la solicitud.

Se superó el error de cuota de bytes de extracción por día

BigQuery muestra este error cuando la extracción supera el límite diario predeterminado de 50 TiB en un proyecto. Para obtener más información sobre los límites de los trabajos de extracción, consulta Trabajos de extracción.

Mensaje de error

Your usage exceeded quota for ExtractBytesPerDay

Diagnóstico

Si exportas una tabla de más de 50 TiB, la exportación fallará porque supera el límite de extracción. Para solucionar este problema, consulta la resolución. Si deseas exportar datos de la tabla para particiones de tabla específicas, puedes usar un decorador de particiones para identificar las particiones que se exportarán.

Si quieres recopilar los usos de los datos de exportaciones en los últimos días, puedes probar lo siguiente:

  • Consulta las cuotas de tu proyecto con criterios de filtro, como Name: Extract bytes per day o Metric: bigquery.googleapis.com/quota/extract/bytes, junto con el gráfico Mostrar uso para ver tu tendencia de uso durante unos días.

  • También puedes consultar INFORMATION_SCHEMA.JOBS_BY_PROJECT para ver el total de bytes extraídos durante varios días. Por ejemplo, la siguiente consulta devuelve el total diario de bytes procesados por los trabajos de EXTRACT en los últimos siete días.

    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
  • Luego, puedes definir mejor los resultados identificando los trabajos específicos que consumen más bytes de lo esperado. En el siguiente ejemplo, se muestran los 100 trabajos de EXTRACT principales que consumieron más de 100 GB procesados en los últimos siete días.

    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

Como alternativa, puedes usar el explorador de trabajos con filtros como Bytes processed more than para filtrar los trabajos con un procesamiento alto durante un período específico.

Solución

Un método para resolver este error de cuota es crear una reserva de ranura y asignar tu proyecto a la reserva con el tipo de trabajo PIPELINE. Este método puede omitir la verificación de límites, ya que usa tus reservas dedicadas en lugar de un grupo de ranuras compartido gratuito. Si es necesario, se puede borrar la reserva si deseas usar un grupo de ranuras compartidas más adelante.

Para conocer otros enfoques que permiten exportar más de 50 TiB, consulta la sección de notas en Trabajos de extracción.

Errores de cuota máxima de bytes por segundo por proyecto de tabledata.list

BigQuery muestra este error cuando el número de proyecto mencionado en el mensaje de error alcanza el tamaño máximo de datos que se pueden leer a través de la llamada a la API tabledata.list en un proyecto por segundo. Para obtener más información, consulta Cantidad máxima de bytes de tabledata.list por minuto.

Mensaje de error

Your project:[project number] exceeded quota for tabledata.list bytes per second per project

Solución

Para resolver este error, haz lo siguiente:

  • En general, recomendamos que intentes mantenerte por debajo de este límite. Por ejemplo, mediante el espaciado de solicitudes durante un período más largo con retrasos. Si el error no ocurre con frecuencia, la implementación de reintentos con retirada exponencial resuelve este problema.
  • Si el caso de uso espera una lectura rápida y frecuente de una gran cantidad de datos de una tabla, recomendamos usar la API de BigQuery Storage Read en lugar de la API de tabledata.list.
  • Si las sugerencias anteriores no funcionan, puedes solicitar un aumento de cuota desde el panel de la API de la consola deGoogle Cloud . Para ello, haz lo siguiente:

    1. Ve al Google Cloud panel de la API de la consola.
    2. En el panel, filtra por cuota: Tabledata list bytes per minute (default quota).
    3. Selecciona la cuota y sigue las instrucciones que aparecen en Solicita un ajuste de cuota.

    La revisión y el procesamiento de la solicitud pueden tardar varios días.

Cantidad máxima de errores de límite de solicitudes a la API

BigQuery muestra este error cuando alcanzas el límite de frecuencia para la cantidad de solicitudes a la API a una API de BigQuery por usuario por método (por ejemplo, el método tables.get llama desde una cuenta de servicio, o el método jobs.insert llama desde un correo electrónico de usuario diferente). Para obtener más información, consulta el límite de frecuencia de la cantidad máxima de solicitudes a la API por segundo por usuario y por método en la API de BigQuery.

Mensaje de error

Quota exceeded: Your user_method exceeded quota for concurrent api requests
per user per method.

Cuando encuentres este error, diagnostica el problema y, luego, sigue los pasos recomendados para resolverlo.

Diagnóstico

Si no identificaste el método que alcanzó este límite de frecuencia, haz lo siguiente:

Para la cuenta de servicio

  1. Ve al proyecto que aloja la cuenta de servicio.

  2. En la consola de Google Cloud , ve al Panel de la API.

    Si deseas obtener instrucciones para ver la información de uso detallada de una API, consulta Usa el panel de la API.

  3. En el panel de la API, selecciona API de BigQuery.

  4. Para ver información de uso más detallada, selecciona Métricas y, luego, haz lo siguiente:

    1. En Seleccionar gráficos, selecciona Tráfico por método de API.

    2. Filtra el gráfico por las credenciales de la cuenta de servicio. Es posible que veas aumentos repentinos en un método en el intervalo de tiempo en el que detectaste el error.

Para las llamadas a la API

Algunas llamadas a la API registran errores en los registros de auditoría de BigQuery en Cloud Logging. Para identificar el método que alcanzó el límite, haz lo siguiente:

  1. En la Google Cloud consola, ve al Google Cloud menú de navegación y, luego, selecciona Logging > Explorador de registros para tu proyecto:

    Ir al Explorador de registros.

  2. Ejecuta la siguiente consulta para filtrar registros:

     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 obtener más información, consulta la descripción general de los registros de auditoría de BigQuery.

Solución

Para resolver este error, haz lo siguiente:

  • Reduce la cantidad de solicitudes a la API o agrega un retraso entre las solicitudes para que la cantidad de solicitudes permanezca por debajo de este límite.

  • Si el límite solo se excede en ocasiones, puedes implementar reintentos en este error específico con una retirada exponencial.

  • Si insertas datos con frecuencia, considera usar inserciones de transmisión, ya que las inserciones de transmisión no se ven afectadas por la cuota de la API de BigQuery. Sin embargo, la API de inserción de transmisión tiene costos asociados y tiene su propio conjunto de límites y cuotas.

    Si deseas obtener más información sobre el costo de las inserciones de transmisión, consulta los precios de BigQuery.

  • Mientras cargas datos en BigQuery mediante Dataflow con el conector de E/S de BigQuery, es posible que encuentres este error para el método tables.get. Para solucionar este problema, haz lo siguiente:

    • Establece la disposición de creación de la tabla de destino en CREATE_NEVER. Para obtener más información, consulta Crea la disposición.

    • Usa la versión 2.24.0 o una superior del SDK de Apache Beam. En las versiones anteriores del SDK, la disposición CREATE_IF_NEEDED llama al método tables.get para verificar si la tabla existe.

  • Para solicitar un aumento de cuota, comunícate con el equipo de asistencia o de ventas. Si deseas obtener una cuota adicional, consulta Solicita un aumento de la cuota. Una solicitud de aumento de cuota puede tardar varios días en procesarse. Para proporcionar más información sobre tu solicitud, te recomendamos que incluya la prioridad del trabajo, el usuario que ejecuta la consulta y el método afectado.

Soluciona problemas relacionados con cuotas o límites que no se pueden aumentar

No puedes aumentar los siguientes límites ni cuotas, pero puedes aplicar las soluciones alternativas o las prácticas recomendadas sugeridas para mitigarlos.

Errores de límite de colas de consultas

Si un proyecto intenta poner en cola más consultas interactivas o por lotes de lo que permite su límite de colas, es posible que aparezca este error.

Mensaje de error

Quota exceeded: Your project and region exceeded quota for
max number of jobs that can be queued per project.

Solución

Este límite no se puede aumentar. Para resolver este error, haz lo siguiente:

  • Pausa el trabajo. Si identificas un proceso o una canalización responsable de un aumento en las consultas, pausa ese proceso o canalización.

  • Usa trabajos con prioridad de lote. Puedes poner en cola más consultas por lotes que consultas interactivas.

  • Distribuye consultas. Organiza y distribuye la carga en diferentes proyectos según la naturaleza de tus consultas y las necesidades de tu empresa.

  • Distribuye los tiempos de ejecución. Distribuye la carga en un período más largo. Si tu solución de informes necesita ejecutar muchas consultas, intenta incorporar aleatoriedad para cuando comiencen las consultas. Por ejemplo, no inicies todos los informes al mismo tiempo.

  • Usa BigQuery BI Engine. Si encontraste este error mientras usas una herramienta de inteligencia empresarial (IE) para crear paneles que consultan datos en BigQuery, te recomendamos que uses BigQuery BI Engine. El uso de BigQuery BI Engine es óptimo para este caso práctico.

  • Optimiza las consultas y el modelo de datos. A menudo, una consulta se puede reescribir para que se ejecute de manera más eficiente. Por ejemplo, si tu consulta contiene una expresión de tabla común (CTE), una cláusula WITH a la que se hace referencia en más de un lugar en la consulta, este cálculo se realiza varias veces. Es mejor conservar los cálculos que realiza la CTE en una tabla temporal y, luego, hacer referencia a ella en la consulta.

    Las uniones múltiples también pueden ser la fuente de falta de eficiencia. En este caso, es posible que quieras considerar el uso de columnas anidadas y repetidas. Usar esto a menudo mejora la localidad de los datos, elimina la necesidad de algunas uniones y, en general, reduce el consumo de recursos y el tiempo de ejecución de la consulta.

    La optimización de las consultas las hace más económicas, por lo que, cuando usas precios basados en la capacidad, puedes ejecutar más consultas con las ranuras. Para obtener más información, consulta Introducción a la optimización del rendimiento de las consultas.

  • Optimiza el modelo de consulta. BigQuery no es una base de datos relacional. No está optimizado para una cantidad infinita de consultas pequeñas. Si ejecutas una gran cantidad de consultas pequeñas, se agotan rápidamente tus cuotas. Estas consultas no se ejecutan de la manera tan eficiente como lo hacen con los productos de base de datos más pequeños. BigQuery es un almacén de datos grande y este es su caso práctico principal. El rendimiento es mejor con consultas analíticas sobre grandes cantidades de datos.

  • Conserva datos (tablas guardadas). Procesa de manera previa los datos en BigQuery y almacénalos en tablas adicionales. Por ejemplo, si ejecutas muchas consultas similares con procesamiento intensivo con diferentes condiciones WHERE, sus resultados no se almacenarán en caché. Estas consultas también consumen recursos cada vez que se ejecutan. Puedes mejorar el rendimiento de esas consultas y disminuir su tiempo de procesamiento si procesas con anterioridad los datos y los almacenas en una tabla. Estos datos procesados con anterioridad en la tabla se pueden consultar mediante consultas SELECT. A menudo, se puede realizar durante la transferencia dentro del proceso de ETL o mediante las consultas programadas o vistas materializadas.

  • Usa el modo de ejecución de prueba. Ejecuta consultas en modo de ejecución de prueba, con lo que se calcula la cantidad de bytes leídos, pero que no se procesa la consulta.

  • Obtener la vista previa de los datos en la tabla Para experimentar con los datos o explorarlos en lugar de ejecutar consultas, obtén una vista previa de los datos de tablas con la función de vista previa de tablas de BigQuery.

  • Usa los resultados de las consultas en caché. Todos los resultados de consultas, incluidas las consultas interactivas y por lotes, se almacenan en caché en tablas temporales durante unas 24 horas, con algunas excepciones. Si bien la ejecución de una consulta almacenada en caché aún se considera para el límite de consultas simultáneas, las consultas que usan los resultados en caché son mucho más rápidas que las consultas que no usan resultados almacenados en caché porque BigQuery no necesita procesar el conjunto de resultados.

Errores de límite de tamaño de Shuffle

BigQuery muestra este error cuando tu proyecto excede el límite máximo de disco y tamaño de memoria disponible para las operaciones de Shuffle.

Esta cuota se calcula por reserva y se divide en proyectos para las reservas. El servicio de Atención al cliente de Cloud no puede modificar la cuota. Para obtener más información sobre tu uso, consulta la vista INFORMATION_SCHEMA.JOBS_TIMELINE.

Mensaje de error

Tal vez recibas alguno de los siguientes mensajes de error:

  • 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.

Solución

Para resolver este error, haz lo siguiente:

Cantidad de modificaciones de particiones para errores de cuotas de tablas particionadas por columnas

BigQuery muestra este error cuando tu tabla particionada por columnas alcanza la cuota de la cantidad de modificaciones de partición permitidas por día. Las modificaciones de partición incluyen el total de todos los trabajos de carga, Trabajos de copia y Trabajos de consulta que agregan o reemplazan una partición de destino.

Para ver el valor del límite para la cantidad de modificaciones de partición por tabla particionada por columnas por día, consulta Tablas particionadas.

Mensaje de error

Quota exceeded: Your table exceeded quota for
Number of partition modifications to a column partitioned table

Solución

No se puede aumentar esta cuota. Para resolver este error, haz lo siguiente:

  • Cambia la partición en la tabla para tener más datos en cada partición a fin de disminuir la cantidad total de particiones. Por ejemplo, cambia de partición por día a partición por mes o cambia la forma en que particionas la tabla.
  • Usa el agrupamiento en clústeres en lugar de la partición.
  • Si frecuentemente cargas datos de varios archivos pequeños almacenados en Cloud Storage que usan un trabajo por archivo, combina varios trabajos de carga en un solo trabajo. Puedes cargar desde varios URI de Cloud Storage con una lista separada por comas (por ejemplo, gs://my_path/file_1,gs://my_path/file_2) o mediante comodines (por ejemplo, gs://my_path/*).

    Para obtener más información, consulta Carga datos por lotes.

  • Si usas trabajos de carga, selección o copia para agregar filas individuales de datos a una tabla, por ejemplo, deberías considerar agrupar varios trabajos en uno solo. BigQuery no funciona bien cuando se usa como base de datos relacional. Como práctica recomendada, evita ejecutar acciones frecuentes de agregado de una sola fila.
  • Para agregar datos a una frecuencia alta, considera usar la API de BigQuery Storage Write. Es una solución recomendada para la transferencia de datos de alto rendimiento. La API de BigQuery Storage Write cuenta con características sólidas, como la semántica de entrega del tipo “exactamente una vez”. Para obtener información sobre los límites y las cuotas, consulta lo siguiente API de Storage Write, y para ver los costos de usar esta API, consulta Precios de la transferencia de datos en BigQuery.
  • Para supervisar la cantidad de particiones modificadas en una tabla, usa la vista INFORMATION_SCHEMA.

Frecuencia máxima de errores de límite de operaciones de actualización de metadatos en la tabla

BigQuery muestra este error cuando tu tabla alcanza el límite de frecuencia máxima de operaciones de actualización de metadatos en la tabla para tablas estándar. Las operaciones de la tabla incluyen el total combinado de todos los trabajos de carga, trabajos de copia y trabajos de consulta que agregan o reemplazan una tabla de destino o que usan una declaración DML DELETE, INSERT, MERGE, TRUNCATE TABLE o UPDATE para escribir datos en una tabla.

Para ver el valor del límite para la Frecuencia máxima de operaciones de actualización de metadatos en la tabla por tabla, consulta Tablas estándar.

Mensaje de error

Exceeded rate limits: too many table update operations for this table

Cuando encuentres este error, diagnostica el problema y, luego, sigue los pasos recomendados para resolverlo.

Diagnóstico

Las actualizaciones de la tabla de metadatos pueden originarse a partir de llamadas a la API que modifican los metadatos de una tabla o de trabajos que modifican el contenido de una tabla. Si no identificaste la fuente desde la que se origina la mayoría de las operaciones de actualización en los metadatos de una tabla, haz lo siguiente:

Identifica llamadas a la API
  1. Ve al menú de Google Cloud navegacióny, luego, selecciona Logging > Explorador de registros:

    Ir al Explorador de registros.

  2. Ejecuta la siguiente consulta para filtrar los registros y ver las operaciones de tabla:

    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")
    
Identifica trabajos

En la siguiente consulta, se muestra una lista de trabajos que modifican la tabla afectada en el proyecto durante el último día. Si esperas que varios proyectos de una organización escriban en la tabla, reemplaza 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 obtener más información, consulta la descripción general de los registros de auditoría de BigQuery.

Solución

No se puede aumentar esta cuota. Para resolver este error, haz lo siguiente:

  • Reduce la frecuencia de actualización para los metadatos en la tabla.
  • Agrega un retraso entre los trabajos o las operaciones de tabla para asegurarte de que la frecuencia de actualización esté dentro del límite.
  • Para inserciones o modificaciones de datos, considera usar operaciones DML. Las operaciones DML no se ven afectadas por el límite de frecuencia de la frecuencia máxima de operaciones de actualización de metadatos en la tabla por tabla.

    Las operaciones DML tienen otros límites y cuotas. Para obtener más información, consulta Usa el lenguaje de manipulación de datos (DML).

  • Si frecuentemente cargas datos de varios archivos pequeños almacenados en Cloud Storage que usan un trabajo por archivo, combina varios trabajos de carga en un solo trabajo. Puedes cargar desde varios URI de Cloud Storage con una lista separada por comas (por ejemplo, gs://my_path/file_1,gs://my_path/file_2) o mediante comodines (por ejemplo, gs://my_path/*).

    Para obtener más información, consulta Carga datos por lotes.

  • Si usas trabajos de carga, selección o copia para agregar filas individuales de datos a una tabla, por ejemplo, deberías considerar agrupar varios trabajos en uno solo. BigQuery no funciona bien cuando se usa como base de datos relacional. Como práctica recomendada, evita ejecutar acciones frecuentes de agregado de una sola fila.
  • Para agregar datos a una frecuencia alta, considera usar la API de BigQuery Storage Write. Es una solución recomendada para la transferencia de datos de alto rendimiento. La API de BigQuery Storage Write cuenta con características sólidas, como la semántica de entrega del tipo “exactamente una vez”. Para obtener información sobre los límites y las cuotas, consulta lo siguiente API de Storage Write, y para ver los costos de usar esta API, consulta Precios de la transferencia de datos en BigQuery.
  • Para supervisar la cantidad de particiones modificadas en una tabla, usa la vista INFORMATION_SCHEMA.

La tabla importa o consulta los errores de cuota anexados.

BigQuery muestra este mensaje de error cuando tu tabla alcanza el límite de operaciones de tabla por día para las tablas estándar. Las operaciones de tabla incluyen el total combinado de todos los trabajos de carga, Trabajos de copia y Trabajos de consulta que agregan o reemplazar una tabla de destino.

Para ver el valor del límite de operaciones de tabla por día, consulta Tablas estándar.

Mensaje de error

Your table exceeded quota for imports or query appends per table

Cuando encuentres este error, diagnostica el problema y, luego, sigue los pasos recomendados para resolverlo.

Diagnóstico

Si no identificaste la fuente desde la que se origina la mayoría de las operaciones de tabla, haz lo siguiente:

  1. Toma nota del proyecto, el conjunto de datos y la tabla en la que escribe la consulta, la carga o el trabajo de copia con errores.

  2. Usa las tablas INFORMATION_SCHEMA.JOBS_BY_* para obtener más información sobre los trabajos que modifican la tabla.

    En el siguiente ejemplo, se encuentra el recuento de trabajos agrupados por tipo de trabajo por el último período de 24 horas con JOBS_BY_PROJECT. Si esperas que varios proyectos escriban en la tabla, reemplaza JOBS_BY_PROJECT por JOBS_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

Solución

No se puede aumentar esta cuota. Para resolver este error, haz lo siguiente:

  • Si frecuentemente cargas datos de varios archivos pequeños almacenados en Cloud Storage que usan un trabajo por archivo, combina varios trabajos de carga en un solo trabajo. Puedes cargar desde varios URI de Cloud Storage con una lista separada por comas (por ejemplo, gs://my_path/file_1,gs://my_path/file_2) o mediante comodines (por ejemplo, gs://my_path/*).

    Para obtener más información, consulta Carga datos por lotes.

  • Si usas trabajos de carga, selección o copia para agregar filas individuales de datos a una tabla, por ejemplo, deberías considerar agrupar varios trabajos en uno solo. BigQuery no funciona bien cuando se usa como base de datos relacional. Como práctica recomendada, evita ejecutar acciones frecuentes de agregado de una sola fila.
  • Para agregar datos a una frecuencia alta, considera usar la API de BigQuery Storage Write. Es una solución recomendada para la transferencia de datos de alto rendimiento. La API de BigQuery Storage Write cuenta con características sólidas, como la semántica de entrega del tipo “exactamente una vez”. Para obtener información sobre los límites y las cuotas, consulta lo siguiente API de Storage Write, y para ver los costos de usar esta API, consulta Precios de la transferencia de datos en BigQuery.
  • Para supervisar la cantidad de particiones modificadas en una tabla, usa la vista INFORMATION_SCHEMA.

Hay demasiadas declaraciones DML pendientes en la tabla

Este error significa que la cantidad de declaraciones DML de mutación simultáneas (UPDATE, DELETE, MERGE) que se ejecutan en la misma tabla, superan el límite de cuota del lenguaje de manipulación de datos (DML). Este límite de cuota es por tabla y se aplica únicamente a las instrucciones DML de mutación, que no incluyen INSERT.

Solución

Agrupa los trabajos de DML según las Prácticas recomendadas para las declaraciones DML.

Carga errores de cuota de archivos CSV

Si cargas un archivo CSV grande mediante el comando bq load con la marca --allow_quoted_newlines, es posible que aparezca este error.

Mensaje de error

Input CSV files are not splittable and at least one of the files is larger than
the maximum allowed size. Size is: ...

Solución

Para resolver este error, haz lo siguiente:

  • Establece la marca --allow_quoted_newlines en false.
  • Divide el archivo CSV en fragmentos más pequeños que tienen menos de 4 GB.

Para obtener más información sobre los límites que se aplican cuando cargas datos en BigQuery, consulta Trabajos de carga.

Tu usuario excedió la cuota de solicitudes simultáneas de project.lists

Este error se produce cuando fallan los trabajos de Microsoft Power BI que se comunican con BigQuery a través de un controlador ODBC de Simba o DataHub porque superan el límite de la API de project.list. Para resolver este problema, usa las soluciones alternativas a corto o largo plazo que se describen en esta sección.

Mensaje de error

Your user exceeded quota for concurrent project.lists requests

Diagnóstico

Este error se produce durante la fase de conexión y detección de Power BI cuando se actualiza un informe de Power BI y el controlador Simba establece una conexión con un proyecto específico de BigQuery.

Resolución a corto plazo

Para solucionar este problema a corto plazo, usa las siguientes soluciones alternativas, que se ordenan de la más a la menos eficaz. Implementa las correcciones tres o cuatro, según si te conectas a BigQuery con el controlador Simba o con DataHub.

Para obtener soluciones a largo plazo, consulta Resolución a largo plazo.

  1. Actualiza los informes de forma escalonada. Si no puedes modificar el DSN, mitiga el problema de la cuota reduciendo la cantidad de solicitudes simultáneas. En lugar de hacer que todos los informes se actualicen de forma simultánea (por ejemplo, a las 9:00 a.m.), desfasa sus programaciones por unos minutos (por ejemplo, a las 9:01 a.m., a las 9:03 a.m. y a las 9:05 a.m.). Esta práctica distribuye las llamadas a la API a lo largo del tiempo, lo que hace que sea menos probable que alcances el límite simultáneo.

  2. Implementa reintentos en Power BI. Esta estrategia reactiva ayuda a que un informe se recupere de una falla temporal. Power BI tiene una lógica de reintento integrada para las fallas en la actualización de datos. Si bien esta práctica no evita el error de cuota, hace que tu canalización sea más resiliente, ya que permite que un informe se complete en un intento posterior después de que disminuya el aumento inicial en las llamadas a la API. Para implementar esta corrección, haz lo siguiente:

    1. En el servicio de Power BI, ve a Configuración para tu conjunto de datos.
    2. Expande la sección Actualización programada. En Reintentar, configura Power BI para que vuelva a ejecutar automáticamente una actualización fallida.
  3. En versiones anteriores del controlador de Simba, especifica el ID del proyecto en la conexión ODBC. Esta acción evita que el controlador realice la llamada de detección de projects.list. En cambio, el controlador se conecta directamente al proyecto especificado, lo que evita llamadas a la API innecesarias y resuelve el problema de cuota.

    Los controladores más nuevos fallan de inmediato si no se especifica el proyecto con un mensaje similar a Unable to establish connection with data source. Missing settings: {[Catalog]}.

    Para corregir este problema, haz lo siguiente:

    1. En la máquina que ejecuta Power BI Gateway o Power BI Desktop, abre la aplicación Orígenes de datos ODBC (64 bits).
    2. En la pantalla principal de configuración del controlador ODBC de Simba para BigQuery, completa el campo Catalog (Project) con tu ID de proyecto Google Cloud específico, por ejemplo, my-gcp-project-id.
  4. Para versiones anteriores de DataHub, especifica el ID del proyecto en la configuración de la transferencia de datos de DataHub. Realiza esta corrección si usas DataHub en lugar del controlador de Simba. Al igual que Simba, las versiones posteriores de DataHub requieren que especifiques el ID del proyecto; de lo contrario, no se conectarán a BigQuery.

    Para evitar superar los límites de DataHub, modifica la configuración de la transferencia de datos de DataHub para proporcionar una lista explícita de los IDs de los proyectos que se analizarán. Esto evita que la configuración de DataHub encuentre todos los proyectos que puede ver la cuenta de servicio.

    En el archivo de la receta de origen de BigQuery (por lo general, un archivo YAML), usa la configuración project_ids para enumerar los proyectos que deseas transferir. Luego, vuelve a implementar la receta de DataHub Ingestion con la nueva configuración. Consulta el siguiente ejemplo y este ejemplo más largo proporcionado por DataHub.

    A continuación, se muestra un ejemplo de un fragmento de configuración de 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"

Resolución a largo plazo

La mejor solución a largo plazo para este mensaje de error es crear cuentas de servicioGoogle Cloud independientes y exclusivas para cada función. Por ejemplo, crea una cuenta de servicio para todos los informes de Power BI y otra para la transferencia de datos de DataHub.

Esta práctica recomendada aísla el uso de la API en buckets de cuota separados y evita que un trabajo de carga alta en DataHub provoque errores en los informes comerciales críticos en Power BI.

Usa el plan de acción de las siguientes secciones para resolver los errores de cuota a largo plazo en Power BI y DataHub.

Fase 1: Preparación
  1. Informa a los propietarios de las puertas de enlace de Power BI y la configuración de DataHub que realizarás cambios coordinados para resolver las fallas continuas de los trabajos.
  2. En la consola de Google Cloud , crea dos cuentas de servicio nuevas, por ejemplo, sa-powerbi-gateway@... y sa-datahub-ingestion@....
  3. Crea claves de cuenta de servicio para las cuentas de servicio de Power BI y DataHub.
  4. Otorga a cada cuenta de servicio nueva permisos de privilegio mínimo asignando los siguientes roles de Identity and Access Management que le permiten realizar sus tareas en Identity and Access Management (IAM) pertinente. Evita asignar roles demasiado amplios, como ProjectEditor.
Roles requeridos

La cuenta de servicio de Power BI ejecuta consultas y lee datos de las tablas. Otorga los siguientes roles a las cuentas de servicio en cada proyecto de Google Cloud que contenga datos a los que Power BI debe acceder. Para obtener más información sobre estos roles, consulta Roles de BigQuery.

La cuenta de servicio para la transferencia de DataHub solo necesita leer metadatos, como nombres de tablas, esquemas y descripciones, no los datos dentro de las tablas. Otorga el siguiente rol a nivel del proyecto para cada proyecto que analiza DataHub. Para obtener más información sobre estos roles, consulta Roles de IAM para BigQuery.

Visualizador de metadatos de BigQuery: Este rol está diseñado específicamente para leer metadatos. Otorga permisos para enumerar conjuntos de datos y tablas, y ver sus metadatos sin otorgar acceso a los datos subyacentes.

Fase 2: Lanzamiento coordinado

Durante un período de poco uso, el administrador de Power BI actualiza la configuración del DSN de ODBC en las máquinas de la puerta de enlace. Para ello, realiza los siguientes pasos:

  1. Cambia el método de autenticación para usar la nueva clave de cuenta de servicio sa-powerbi-gateway@... que se creó en un paso anterior.
  2. Si aún no se realizó como solución a corto plazo, ingresa el ID del proyecto Google Clouden el campo Catalog (Project) del controlador ODBC.
  3. El propietario de DataHub debe actualizar el archivo YAML de configuración de la fuente de BigQuery.
  4. Apunta a la nueva clave de cuenta de servicio sa-datahub-ingestion@... creada en un paso anterior.
  5. Si aún no se realizó como solución a corto plazo, usa el parámetro project_ids para enumerar de forma explícita los proyectos que se analizarán.
  6. Vuelve a implementar la receta de ingesta de DataHub con la nueva configuración.
Fase 3: Verificación y supervisión

Para verificar y supervisar los efectos de las correcciones, los administradores de Power BI y DataHub realizan los siguientes pasos:

  1. Activa manualmente una actualización para algunos informes clave de Power BI y una nueva ejecución de transferencia en DataHub. Confirma que estos trabajos se completen correctamente sin generar errores de cuota.
  2. En la consola de Google Cloud , navega a la página IAM y administración > Cuotas.
  3. Filtra por el servicio de la API de BigQuery.
  4. Busca la cuota llamada Solicitudes simultáneas de project.lists y haz clic en el ícono de gráfico para ver el uso a lo largo del tiempo.

Los administradores deberían observar una disminución drástica y permanente en el uso de esta llamada a la API específica, lo que confirmaría que la corrección se realizó correctamente.