Vista JOBS_TIMELINE

La vista INFORMATION_SCHEMA.JOBS_TIMELINE contiene metadatos de BigQuery casi en tiempo real por fragmento de tiempo para todos los trabajos enviados en el proyecto actual. Esta vista contiene trabajos completados y en ejecución.

Permisos necesarios

Para consultar la vista INFORMATION_SCHEMA.JOBS_TIMELINE, necesitas el permiso bigquery.jobs.listAll de Identity and Access Management (IAM) para el proyecto. Cada uno de los siguientes roles predefinidos de IAM incluye el permiso requerido:

  • Propietario del proyecto
  • Administrador de BigQuery

Para obtener más información sobre IAM de BigQuery, consulta Control de acceso con IAM.

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 trabajo de BigQuery. Cada período comienza en un intervalo de un segundo y dura un segundo exacto.

La vista INFORMATION_SCHEMA.JOBS_TIMELINE_BY_* tiene el siguiente esquema:

Nombre de la columna Tipo de datos Valor
period_start TIMESTAMP Es la hora de inicio de este período.
period_slot_ms INTEGER Son los milisegundos de ranura consumidos en este período.
project_id STRING Es el ID del proyecto (columna de agrupamiento en clústeres).
project_number INTEGER Es el número del proyecto.
user_email STRING Es la dirección de correo electrónico o la cuenta de servicio del usuario que ejecutó el trabajo (columna de agrupamiento en clústeres).
job_id STRING Es el ID del trabajo. Por ejemplo, bquxjob_1234.
job_type STRING Es el tipo de trabajo. Puede ser QUERY, LOAD, EXTRACT, COPY o null. El tipo de trabajo null indica un trabajo interno, como la evaluación de la declaración del trabajo de secuencia de comandos o la actualización de la vista materializada.
statement_type STRING Es el tipo de declaración de consulta, si es válido. Por ejemplo, SELECT, INSERT, UPDATE o DELETE.
priority STRING La prioridad de este trabajo. Los valores válidos incluyen INTERACTIVE y BATCH.
parent_job_id STRING ID del trabajo superior, si hay alguno.
job_creation_time TIMESTAMP Es la hora de creación de este trabajo (columna de partición). La partición se basa en la hora UTC de esta marca de tiempo.
job_start_time TIMESTAMP Es la hora de inicio de este trabajo.
job_end_time TIMESTAMP Es la hora de finalización de este trabajo.
state STRING Es estado de ejecución del trabajo al final de este período. Los estados válidos incluyen PENDING, RUNNING y DONE.
reservation_id STRING Es el nombre de la reserva principal asignada a este trabajo al final de este período, si corresponde.
edition STRING Es la edición asociada con 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 precios según demanda, este campo contiene el total de bytes facturados para el trabajo. Si el proyecto está configurado para usar precios de tasa fija, no se te facturará por los bytes y este campo solo es informativo.
total_bytes_processed INTEGER Es el total de bytes procesados por el trabajo.
error_result RECORD Son los detalles del error (si hay alguno), como ErrorProto. .
cache_hit BOOLEAN Indica si los resultados de la consulta de este trabajo provienen de una caché.
period_shuffle_ram_usage_ratio FLOAT Proporción de uso aleatorio en el período seleccionado.
period_estimated_runnable_units INTEGER Unidades de trabajo que se pueden programar de inmediato en este período. Las ranuras adicionales para estas unidades de trabajo aceleran tu consulta, siempre que ninguna otra consulta en la reserva necesite ranuras adicionales.
transaction_id STRING ID de la transacción en la que se ejecutó este trabajo, si corresponde. (Vista previa)

Retención de datos

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

Permiso y sintaxis

Las consultas realizadas a esta vista deben incluir un calificador de región. Si no especificas un calificador regional, los metadatos se recuperan de todas las regiones. En la siguiente tabla, se explica el permiso de la región para esta vista:

Nombre de la vista Permiso del recurso Permiso de la región
[PROJECT_ID.]`region-REGION`.INFORMATION_SCHEMA.JOBS_TIMELINE[_BY_PROJECT] Nivel de proyecto REGION
Reemplaza lo siguiente:

  • Opcional: PROJECT_ID: el ID del proyecto de Google Cloud. Si no se especifica, se usa el proyecto predeterminado.

  • REGION: Cualquier nombre de región del conjunto de datos. Por ejemplo, `region-us`.

  • Ejemplos

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

    `PROJECT_ID`.`region-REGION_NAME`.INFORMATION_SCHEMA.VIEW
    ; Por ejemplo, `myproject`.`region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE.

    En el siguiente ejemplo, se calcula el uso de ranuras por cada segundo del último día:

    SELECT
      period_start,
      SUM(period_slot_ms) AS total_slot_ms,
    FROM
      `reservation-admin-project.region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE
    WHERE
      period_start BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY) AND CURRENT_TIMESTAMP()
    GROUP BY
      period_start
    ORDER BY
      period_start DESC;
    Nota: Los nombres de las vistas `INFORMATION_SCHEMA` distinguen mayúsculas de minúsculas. El resultado es similar al siguiente:
    +---------------------+---------------+
    |    period_start     | total_slot_ms |
    +---------------------+---------------+
    | 2020-07-29 03:52:14 |     122415176 |
    | 2020-07-29 03:52:15 |     141107048 |
    | 2020-07-29 03:52:16 |     173335142 |
    | 2020-07-28 03:52:17 |     131107048 |
    +---------------------+---------------+
    

    Puedes verificar el uso de una reserva en particular con WHERE reservation_id = "…". En los trabajos de secuencia de comandos, el trabajo superior también informa el uso total de las ranuras de sus trabajos secundarios. Si deseas evitar el doble recuento, usa WHERE statement_type != "SCRIPT" para excluir el trabajo superior.

    Ejemplo: Cantidad de trabajos RUNNING y PENDING a lo largo del tiempo

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

    `PROJECT_ID`.`region-REGION_NAME`.INFORMATION_SCHEMA.VIEW
    ; Por ejemplo, `myproject`.`region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE.

    En el siguiente ejemplo, se calcula la cantidad de trabajos RUNNING y PENDING de cada segundo del último día:

    SELECT
      period_start,
      SUM(IF(state = "PENDING", 1, 0)) as PENDING,
      SUM(IF(state = "RUNNING", 1, 0)) as RUNNING
    FROM
      `reservation-admin-project.region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE
    WHERE
      period_start BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY) AND CURRENT_TIMESTAMP()
    GROUP BY
      period_start;

    El resultado es similar al siguiente:

    +---------------------+---------+---------+
    |    period_start     | PENDING | RUNNING |
    +---------------------+---------+---------+
    | 2020-07-29 03:52:14 |       7 |      27 |
    | 2020-07-29 03:52:15 |       1 |      21 |
    | 2020-07-29 03:52:16 |       5 |      21 |
    | 2020-07-29 03:52:17 |       4 |      22 |
    +---------------------+---------+---------+
    

    Ejemplo: Uso de recursos por trabajos en un momento específico

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

    `PROJECT_ID`.`region-REGION_NAME`.INFORMATION_SCHEMA.VIEW
    ; Por ejemplo, `myproject`.`region-us`.INFORMATION_SCHEMA.JOBS.

    En el siguiente ejemplo, se muestra el job_id de todos los trabajos en ejecución en un momento específico, junto con su uso de recursos durante ese período de un segundo:

    SELECT
      job_id,
      period_slot_ms
    FROM
      `reservation-admin-project.region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE_BY_PROJECT
    WHERE
      period_start = '2020-07-29 03:52:14'
      AND statement_type != 'SCRIPT';

    El resultado es similar al siguiente:

    +------------------+
    | job_id | slot_ms |
    +------------------+
    | job_1  | 2415176 |
    | job_2  | 4417245 |
    | job_3  |  427416 |
    | job_4  | 1458122 |
    +------------------+
    

    Ejemplo: Cómo hacer coincidir el comportamiento de uso de las ranuras de los gráficos de recursos administrativos

    Puedes usar los gráficos de recursos administrativos para supervisar el estado de tu organización, el uso de ranuras y el rendimiento de los trabajos de BigQuery a lo largo del tiempo. En el siguiente ejemplo, se consulta la vista INFORMATION_SCHEMA.JOBS_TIMELINE para obtener un cronograma de uso de las ranuras en intervalos de una hora, similar a la información que está disponible en los gráficos de recursos administrativos.

    WITH
      snapshot_data AS (
        SELECT
          UNIX_MILLIS(period_start) AS period_start,
          IFNULL(SUM(period_slot_ms), 0) AS period_slot_ms,
          DIV(UNIX_MILLIS(period_start), 3600000 * 1) * 3600000 * 1 AS time_ms
        FROM
          (
            SELECT
              *
            FROM
              `user_proj.region-US`.INFORMATION_SCHEMA.JOBS_TIMELINE_BY_ORGANIZATION
            WHERE
              ((job_creation_time >= TIMESTAMP_SUB(@start_time, INTERVAL 1200 MINUTE) AND job_creation_time < TIMESTAMP(@end_time)) AND
              period_start >= TIMESTAMP(@start_time) AND period_start < TIMESTAMP(@end_time)) AND (statement_type !=
              "SCRIPT" OR statement_type IS NULL) AND REGEXP_CONTAINS(reservation_id, "^user_proj:")
          )
        GROUP BY period_start, time_ms
      ),
      data_by_time AS (
        SELECT
          time_ms,
          SUM(period_slot_ms) / (3600000 * 1) AS submetric_value
        FROM
          snapshot_data
        GROUP BY time_ms
      )
    SELECT
      time_ms,
      IFNULL(submetric_value, 0) AS submetric_value,
      "Slot Usage" AS resource_id,
      IFNULL(SUM(submetric_value) OVER () / (TIMESTAMP_DIFF(@end_time, @start_time, HOUR) / 1), 0) AS overall_average_slot_count
    FROM
      (
        SELECT
          time_ms * 3600000 * 1 AS time_ms
        FROM
          UNNEST(GENERATE_ARRAY(DIV(UNIX_MILLIS(@start_time), 3600000 * 1), DIV(UNIX_MILLIS(@end_time), 3600000 *
              1) - 1, 1)) AS time_ms
      )
      LEFT JOIN
      data_by_time
      USING(time_ms)
    ORDER BY time_ms DESC;