Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

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.

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. Por ejemplo, la optimización del rendimiento de las consultas puede mitigar los errores de cuota para consultas simultáneas.

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

Diagnóstico

Para diagnosticar problemas, haz lo siguiente:

  • Usa las vistas INFORMATION_SCHEMA para analizar el problema subyacente. Estas vistas contienen metadatos sobre tus recursos de BigQuery, como trabajos, inserciones de transmisión y reservas.

    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-us`.INFORMATION_SCHEMA.JOBS
    WHERE creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP, INTERVAL 1 DAY) AND
          error_result.reason IN ('rateLimitExceeded', 'quotaExceeded')
    
  • 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.

Errores de cuota de consultas simultáneas

Si un proyecto ejecuta más consultas interactivas que el límite asignado para ese proyecto de forma simultánea, es posible que aparezca este error.

Para obtener más información sobre este límite, consulta el límite para la cantidad máxima de consultas interactivas simultáneas.

Mensaje de error

Exceeded rate limits: too many concurrent queries for this project_and_region

Diagnóstico

Si no identificaste los trabajos de consulta que muestran este error, haz lo siguiente:

  • Verifica si hay otras consultas que se ejecutan al mismo tiempo con las consultas con errores.

    Por ejemplo, si la consulta con errores se envió el 08/06/2021 a las 12:00:00 UTC en la región us, ejecuta la siguiente consulta a la vista INFORMATION_SCHEMA.JOBS en el proyecto al que se envió la consulta con errores:

    DECLARE failed_query_submission_time DEFAULT CAST('2021-06-08 12:00:00' AS TIMESTAMP);
    
    SELECT
     job_id,
     state,
     user_email,
     query
    FROM `region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
    WHERE creation_time >= date_sub(failed_query_submission_time, INTERVAL 1 DAY)
    AND job_type = 'QUERY'
    AND priority = 'INTERACTIVE'
    AND start_time >= failed_query_submission_time
    AND (end_time <= failed_query_submission_time OR state != 'DONE')
    
  • Si tu consulta a INFORMATION_SCHEMA.JOBS_BY_PROJECT falla con el mismo error, ejecuta el comando bq ls en la terminal de Cloud Shell para enumerar las consultas que se ejecutan:

    bq ls -j --format=prettyjson -n 200 | jq '.[] | select(.status.state=="RUNNING")| {configuration: .query, id: .id, jobReference: .jobReference, user_email: .user_email}'

Solución

Para resolver este error, haz lo siguiente:

  • Pausa el trabajo. Si en el diagnóstico anterior se identifica un proceso o un flujo de trabajo responsable de un aumento en las consultas, pausa ese proceso o flujo de trabajo.

  • Usa trabajos con prioridad de lote. Las consultas por lotes no se consideran en el límite de frecuencia simultánea. La ejecución de consultas por lotes te permite iniciar muchas consultas a la vez. Las consultas por lotes utilizan los mismos recursos que las consultas interactivas (bajo demanda). BigQuery pone en cola cada consulta por lotes en tu nombre y, luego, inicia la consulta cuando los recursos inactivos están disponibles en el grupo de recursos compartidos de BigQuery.

    De forma alternativa, también puedes crear un proyecto separado para ejecutar consultas.

  • 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)WITH clause–, 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 de tarifa plana, 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 consultas programadas o vistas materializadas.

  • Aumenta los límites de cuota. También puedes aumentar los límites de cuota para resolver este error. Para aumentar el límite, comunícate con el equipo de asistencia o con Ventas. 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.

    Los límites se aplican a nivel de proyecto. Sin embargo, aumentar la cantidad de trabajos simultáneos por proyecto reduce la cantidad de ranuras disponibles para cada consulta que se ejecuta de manera simultánea, lo que puede reducir el rendimiento de las consultas individuales. Para mejorar el rendimiento, te recomendamos que aumentes la cantidad de ranuras si se aumenta el límite de consultas simultáneas.

    Para obtener más información sobre cómo aumentar este límite, consulta Cuotas y límites. Para obtener más información sobre las ranuras, consulta Reserva de ranuras.

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 o que usan una declaración DML DELETE, INSERT, MERGE, TRUNCATE TABLE o UPDATE para escribir datos en un tabla.

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 consultas de una sola fila (es decir, declaraciones INSERT) para escribir datos en una tabla, considera agrupar varias consultas en una a fin de reducir la cantidad de trabajos. BigQuery no funciona bien cuando se usa como base de datos relacional, por lo que las declaraciones INSERT de una sola fila ejecutadas a alta velocidad no son una práctica recomendada.
  • Si deseas insertar datos a una tasa 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.

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.

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-us`.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 límite de cuota mayor.

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

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.

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

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 un período de 24 horas mediante 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-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
    #Adjust time
    WHERE creation_time BETWEEN "2021-06-20 00:00:00" AND "2021-06-21 00:00:00"
    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 consultas de una sola fila (es decir, declaraciones INSERT) para escribir datos en una tabla, considera agrupar varias consultas en una a fin de reducir la cantidad de trabajos. BigQuery no funciona bien cuando se usa como base de datos relacional, por lo que las declaraciones INSERT de una sola fila ejecutadas a alta velocidad no son una práctica recomendada.
  • Si deseas insertar datos a una tasa 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.

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

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 navegación de Google Cloud y 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. 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
#Adjust region
FROM `region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
#Adjust time
WHERE creation_time BETWEEN "2021-06-21 10:00:00" AND "2021-06-21 20:00:00"
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 consultas de una sola fila (es decir, declaraciones INSERT) para escribir datos en una tabla, considera agrupar varias consultas en una a fin de reducir la cantidad de trabajos. BigQuery no funciona bien cuando se usa como base de datos relacional, por lo que las declaraciones INSERT de una sola fila ejecutadas a alta velocidad no son una práctica recomendada.
  • Si deseas insertar datos a una tasa 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.

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 Todas las API de BigQuery.

Mensaje de error

Too many API requests per user per method for this user_method

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 Google Cloud Console, 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 consola de Google Cloud Cloud Console, ve al menú de navegación de Google Cloud y, luego, seleccioneRegistros > 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.

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 Consultas (análisis), 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 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 sobre el límite de bytes por minuto de Tabledata list, consulta Solicitudes tabledata.list.

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 grandes cantidades de datos de una tabla, recomendamos usar la API de lectura de almacenamiento de BigQuery 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 de Google Cloud. Para ello, haz lo siguiente:

    1. Ve al panel de la API de la consola de Google Cloud.
    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 límite de cuota mayor.

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

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 esas 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_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
    
    La parte REGION_NAME se debe reemplazar por el nombre de la región, incluido el prefijo region-. Por ejemplo, region-us, region-asia-south1. 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.