Vista JOBS_TIMELINE_BY_ORGANIZATION

La vista INFORMATION_SCHEMA.JOBS_TIMELINE_BY_ORGANIZATION contiene metadatos de BigQuery casi en tiempo real por porción de tiempo de todas las tareas enviadas en la organización asociada al proyecto actual. Esta vista contiene las tareas que se están ejecutando y las que se han completado.

Permisos obligatorios

Para consultar la vista INFORMATION_SCHEMA.JOBS_TIMELINE_BY_ORGANIZATION, necesita el permiso bigquery.jobs.listAll de Gestión de Identidades y Accesos (IAM) de la organización. Cada uno de los siguientes roles de gestión de identidades y accesos predefinidos incluye el permiso necesario:

  • Administrador de recursos de BigQuery a nivel de organización
  • Propietario de la organización
  • Administrador de la organización

La tabla de esquemas de JOBS_BY_ORGANIZATION solo está disponible para los usuarios con organizacionesGoogle Cloud definidas.

Para obtener más información sobre los permisos de BigQuery, consulta Control de acceso con gestión de identidades y accesos.

Esquema

Cuando consultas las vistas INFORMATION_SCHEMA.JOBS_TIMELINE_BY_*, los resultados de la consulta contienen una fila por cada segundo de ejecución de cada tarea de BigQuery. Cada periodo empieza en un intervalo de un segundo y dura exactamente un segundo.

La vista INFORMATION_SCHEMA.JOBS_TIMELINE_BY_* tiene el siguiente esquema:

Nombre de la columna Tipo de datos Valor
period_start TIMESTAMP Hora de inicio de este periodo.
period_slot_ms INTEGER Milisegundos de ranura consumidos en este periodo.
project_id STRING ID del proyecto(columna de clustering).
project_number INTEGER Número del proyecto.
folder_numbers REPEATED INTEGER Los IDs numéricos de las carpetas que contienen el proyecto, empezando por la carpeta que contiene directamente el proyecto, seguida de la carpeta que contiene la carpeta secundaria, y así sucesivamente. Por ejemplo, si `folder_numbers` es `[1, 2, 3]`, la carpeta `1` contiene inmediatamente el proyecto, la carpeta `2` contiene la carpeta `1` y la carpeta `3` contiene la carpeta `2`.
user_email STRING (Columna de clustering) Dirección de correo o cuenta de servicio del usuario que ha ejecutado el trabajo.
job_id STRING ID del trabajo. Por ejemplo, bquxjob_1234.
job_type STRING El tipo de trabajo. Puede ser QUERY, LOAD, EXTRACT, COPY o null. El tipo de tarea null indica una tarea interna, como la evaluación de una instrucción de una tarea de secuencia de comandos o la actualización de una vista materializada.
statement_type STRING El tipo de instrucción de consulta, si es válida. Por ejemplo, SELECT, INSERT, UPDATE o DELETE.
priority STRING La prioridad de este trabajo. Los valores válidos son INTERACTIVE y BATCH.
parent_job_id STRING ID del trabajo principal (si lo hay).
job_creation_time TIMESTAMP (Columna de partición) Hora de creación de este trabajo. La partición se basa en la hora UTC de esta marca de tiempo.
job_start_time TIMESTAMP Hora de inicio de este trabajo.
job_end_time TIMESTAMP Hora de finalización de este trabajo.
state STRING Estado de ejecución del trabajo al final de este periodo. Los estados válidos son PENDING, RUNNING y DONE.
reservation_id STRING Nombre de la reserva principal asignada a este trabajo al final de este periodo, si procede.
edition STRING Edición asociada a la reserva asignada a este trabajo. Para obtener más información sobre las ediciones, consulta Introducción a las ediciones de BigQuery.
total_bytes_billed INTEGER Si el proyecto está configurado para usar los precios bajo demanda, este campo contiene el total de bytes facturados por la tarea. Si el proyecto está configurado para usar precios de tarifa plana, no se te cobrarán los bytes. Este campo no se puede configurar.
total_bytes_processed INTEGER Total de bytes procesados por el trabajo.
error_result RECORD Detalles del error (si procede) como ErrorProto.
cache_hit BOOLEAN Indica si los resultados de la consulta de este trabajo procedían de una caché.
period_shuffle_ram_usage_ratio FLOAT Ratio de uso de la aleatorización en el periodo seleccionado.
period_estimated_runnable_units INTEGER Unidades de trabajo que se pueden programar inmediatamente en este periodo. Los slots adicionales para estas unidades de trabajo aceleran tu consulta, siempre que ninguna otra consulta de la reserva necesite slots adicionales.

Conservación de datos

Esta vista contiene los trabajos que se están ejecutando y el historial de los últimos 180 días.

Ámbito y sintaxis

Las consultas en esta vista deben incluir un calificador de región. Si no especifica un calificador regional, los metadatos se recuperan de todas las regiones. En la siguiente tabla se explica el ámbito de la región de esta vista:

Nombre de la vista Ámbito de los recursos Ámbito de la región
[PROJECT_ID.]`region-REGION`.INFORMATION_SCHEMA.JOBS_TIMELINE_BY_ORGANIZATION Organización que contiene el proyecto especificado REGION
Sustituye lo siguiente:
  • Opcional: PROJECT_ID: el ID de tu Google Cloud proyecto. Si no se especifica, se usa el proyecto predeterminado.
  • REGION: cualquier nombre de región del conjunto de datos. Por ejemplo, `region-us`.

Ejemplos

Ejemplo: ver el uso total de espacios por segundo

Para ejecutar la consulta en un proyecto que no sea el predeterminado, añade el ID del proyecto con el siguiente formato:

`PROJECT_ID`.`region-REGION_NAME`.INFORMATION_SCHEMA.JOBS_TIMELINE_BY_ORGANIZATION
. Por ejemplo, `myproject`.`region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE_BY_ORGANIZATION.

En el siguiente ejemplo se muestra el uso de ranuras por segundo de los proyectos asignados a YOUR_RESERVATION_ID en todas las tareas:

SELECT
  s.start_time AS period_start,
  SUM(jobs.period_slot_ms) / 1000 AS period_slot_seconds,
  ANY_VALUE(s.slots_assigned) AS estimated_slots_assigned,
  ANY_VALUE(s.slots_max_assigned) AS estimated_slots_max_assigned
FROM `region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE_BY_ORGANIZATION jobs
JOIN `region-us`.INFORMATION_SCHEMA.RESERVATIONS_TIMELINE res
    ON jobs.reservation_id = res.reservation_id
 JOIN res.per_second_details s
    ON jobs.period_start = s.start_time
WHERE
  jobs.job_creation_time
    BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY)
        AND CURRENT_TIMESTAMP()
  AND res.period_start
    BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY)
        AND CURRENT_TIMESTAMP()
  AND res.reservation_id = 'YOUR_RESERVATION_ID'
  AND (jobs.statement_type != "SCRIPT" OR jobs.statement_type IS NULL)  -- Avoid duplicate byte counting in parent and children jobs.
GROUP BY
  period_start
ORDER BY
  period_start DESC;

El resultado es similar al siguiente:

+-----------------------+---------------------+--------------------------+------------------------------+
|     period_start      | period_slot_seconds | estimated_slots_assigned | estimated_slots_max_assigned |
+-----------------------+---------------------+--------------------------+------------------------------+
|2021-06-08 21:33:59 UTC|       100.000       |         100              |           100                |
|2021-06-08 21:33:58 UTC|        96.753       |         100              |           100                |
|2021-06-08 21:33:57 UTC|        41.668       |         100              |           100                |
+-----------------------+---------------------+--------------------------+------------------------------+

Ejemplo: Uso de slots por reserva

En el siguiente ejemplo se muestra el uso de las franjas por segundo de cada reserva del último día:

SELECT
  s.start_time AS period_start,
  res.reservation_id,
  SUM(jobs.period_slot_ms) / 1000 AS period_slot_seconds,
  ANY_VALUE(res.slots_assigned) AS estimated_slots_assigned,
  ANY_VALUE(res.slots_max_assigned) AS estimated_slots_max_assigned,
FROM `region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE_BY_ORGANIZATION jobs
JOIN `region-us`.INFORMATION_SCHEMA.RESERVATIONS_TIMELINE res
  ON jobs.reservation_id = res.reservation_id
JOIN res.per_second_details s
  ON jobs.period_start = s.start_time
WHERE
  jobs.job_creation_time
      BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY)
          AND CURRENT_TIMESTAMP()
  AND res.period_start
      BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY)
          AND CURRENT_TIMESTAMP()
  AND (jobs.statement_type != "SCRIPT" OR jobs.statement_type IS NULL)  -- Avoid duplicate byte counting in parent and children jobs.
GROUP BY
  period_start,
  reservation_id
ORDER BY
  period_start DESC,
  reservation_id;

El resultado es similar al siguiente:

+-----------------------+----------------+---------------------+--------------------------+------------------------------+
|     period_start      | reservation_id | period_slot_seconds | estimated_slots_assigned | estimated_slots_max_assigned |
+-----------------------+----------------+---------------------+--------------------------+------------------------------+
|2021-06-08 21:33:59 UTC|     prod01     |       100.000       |             100          |              100             |
|2021-06-08 21:33:58 UTC|     prod02     |       177.201       |             200          |              500             |
|2021-06-08 21:32:57 UTC|     prod01     |        96.753       |             100          |              100             |
|2021-06-08 21:32:56 UTC|     prod02     |       182.329       |             200          |              500             |
+-----------------------+----------------+---------------------+--------------------------+------------------------------+