Obtén metadatos de reservas mediante INFORMATION_SCHEMA

INFORMATION_SCHEMA es una serie de vistas que proporcionan acceso a metadatos sobre conjuntos de datos, rutinas, tablas, vistas, trabajos, reservas y datos de transmisión.

Puedes consultar las vistas de reservas INFORMATION_SCHEMA para recuperar metadatos en tiempo real sobre las reservas de BigQuery. Estas vistas contienen la lista de cambios que se realizaron en las reservas, las asignaciones y los compromisos de capacidad, junto con un cronograma de reservas.

Permisos necesarios

Para recuperar los metadatos de reservas mediante las tablas INFORMATION_SCHEMA, se requieren los permisos adecuados:

  • RESERVATION_CHANGES_BY_PROJECT y RESERVATIONS_BY_PROJECT requieren bigquery.reservations.list en el proyecto y están disponibles para las funciones BigQuery User, BigQuery Resource Admin y BigQuery Admin.
  • CAPACITY_COMMITMENT_CHANGES_BY_PROJECT y CAPACITY_COMMITMENTS_BY_PROJECT requieren bigquery.capacityCommitments.list en el proyecto y están disponibles para las funciones BigQuery User, BigQuery Resource Admin y BigQuery Admin.
  • ASSIGNMENT_CHANGES_BY_PROJECT y ASSIGNMENTS_BY_PROJECT requieren bigquery.reservationAssignments.list en el proyecto y están disponibles para las funciones BigQuery User, BigQuery Resource Admin y BigQuery Admin.

Esquemas

Cuando buscas las vistas de reservas de INFORMATION_SCHEMA, los resultados de la búsqueda contienen información sobre las reservas de BigQuery. Para obtener más información sobre las reservas de BigQuery, consulta la página sobre los conceptos relacionados con las reservas.

  • INFORMATION_SCHEMA.RESERVATION_CHANGES_BY_PROJECT contiene una lista de todos los cambios que se realizaron en las reservas del proyecto de administración. Cada fila representa un cambio que se realizó en una reserva única.
  • INFORMATION_SCHEMA.RESERVATIONS_BY_PROJECT contiene una lista de todas las reservas actuales dentro del proyecto de administración. Cada fila representa una reserva única y actual. Una reserva actual es una reserva que no se borró.
  • INFORMATION_SCHEMA.CAPACITY_COMMITMENT_CHANGES_BY_PROJECT contiene una lista de todos los cambios que se hicieron en los compromisos de capacidad del proyecto de administración. Cada fila representa un solo cambio que se realizó en un compromiso de capacidad único.
  • INFORMATION_SCHEMA.CAPACITY_COMMITMENTS_BY_PROJECT contiene una lista de todos los compromisos de capacidad actuales dentro del proyecto de administración. Cada fila representa un compromiso de capacidad único y actual. Un compromiso de capacidad actual está pendiente o activo y no se borró.
  • INFORMATION_SCHEMA.ASSIGNMENT_CHANGES_BY_PROJECT contiene una lista de todos los cambios que se realizaron en las asignaciones del proyecto de administración. Cada fila representa un solo cambio que se realizó en una asignación única.
  • INFORMATION_SCHEMA.ASSIGNMENTS_BY_PROJECT contiene una lista de todas las asignaciones actuales dentro del proyecto de administración. Cada fila representa una asignación única y actual. Una asignación actual está pendiente o activa y no se borró.

La vista INFORMATION_SCHEMA.RESERVATION_CHANGES_BY_PROJECT tiene el siguiente esquema:

Nombre de la columna Tipo de datos Valor
change_timestamp TIMESTAMP Hora en la que se produjo el cambio.
project_id STRING ID del proyecto de administración.
project_number INTEGER Número del proyecto de administración.
reservation_name STRING Nombre de reserva que proporcionó el usuario.
ignore_idle_slots BOOL Si es falso, toda consulta que use esta reserva puede utilizar las ranuras inactivas de otros compromisos de capacidad.
action STRING El tipo de evento que ocurrió con la reserva. Puede ser CREATE, UPDATE o DELETE.
slot_capacity INTEGER Capacidad de la ranura que se asocia a la reserva.
user_email STRING Dirección de correo electrónico del usuario que realizó el cambio google para los cambios que realizó Google. NULL si se desconoce la dirección de correo electrónico.

La vista INFORMATION_SCHEMA.RESERVATIONS_BY_PROJECT tiene el siguiente esquema:

Nombre de la columna Tipo de datos Valor
project_id STRING ID del proyecto de administración.
project_number INTEGER Número del proyecto de administración.
reservation_name STRING Nombre de reserva que proporcionó el usuario.
ignore_idle_slots BOOL Si es falso, toda consulta que use esta reserva puede utilizar las ranuras inactivas de otros compromisos de capacidad.
slot_capacity INTEGER Capacidad de la ranura que se asocia con la reserva.

La vista INFORMATION_SCHEMA.CAPACITY_COMMITMENT_CHANGES_BY_PROJECT tiene el siguiente esquema:

Nombre de la columna Tipo de datos Valor
change_timestamp TIMESTAMP Hora en la que se produjo el cambio.
project_id STRING ID del proyecto de administración.
project_number INTEGER Número del proyecto de administración.
capacity_commitment_id STRING ID que identifica el compromiso de capacidad de forma única.
commitment_plan STRING Plan de compromiso del compromiso de capacidad.
state STRING Indica el compromiso de capacidad correspondiente. Puede ser PENDING o ACTIVE.
slot_count INTEGER Recuento de ranuras asociado con el compromiso de capacidad.
action STRING Tipo de evento que ocurrió con el compromiso de capacidad. Puede ser CREATE, UPDATE o DELETE.
user_email STRING Dirección de correo electrónico del usuario que realizó el cambio google para los cambios que realizó Google. NULL si se desconoce la dirección de correo electrónico.
commitment_start_time TIMESTAMP El inicio del período de compromiso actual. Solo se aplica a los compromisos de capacidad ACTIVE; de lo contrario, es NULL.
commitment_end_time TIMESTAMP El final del período de compromiso actual. Solo se aplica a los compromisos de capacidad ACTIVE; de lo contrario, es NULL.
failure_status RECORD Para un plan de compromiso de FAILED, proporciona el motivo de la falla; de lo contrario, es NULL. RECORD consta de code y message.
renewal_plan STRING El plan al que se convierte este compromiso de capacidad después de que pasa commitment_end_time. Una vez que se cambia el plan, el período de compromiso se extiende según el plan de compromiso. Solo se aplica a los compromisos ANNUAL y TRIAL; de lo contrario, es NULL.

La vista INFORMATION_SCHEMA.CAPACITY_COMMITMENTS_BY_PROJECT tiene el siguiente esquema:

Nombre de la columna Tipo de datos Valor
project_id STRING ID del proyecto de administración.
project_number INTEGER Número del proyecto de administración.
capacity_commitment_id STRING ID que identifica el compromiso de capacidad de forma única.
commitment_plan STRING Plan de compromiso del compromiso de capacidad.
state STRING Indica el compromiso de capacidad correspondiente. Puede ser PENDING o ACTIVE.
slot_count INTEGER Recuento de ranuras asociado con el compromiso de capacidad.

La vista INFORMATION_SCHEMA.ASSIGNMENT_CHANGES_BY_PROJECT tiene el siguiente esquema:

Nombre de la columna Tipo de datos Valor
change_timestamp TIMESTAMP Hora en la que se produjo el cambio.
project_id STRING ID del proyecto de administración.
project_number INTEGER Número del proyecto de administración.
assignment_id STRING ID que identifica la asignación de forma única.
reservation_name STRING Nombre de la reserva que usa la asignación.
job_type STRING El tipo de trabajo que puede usar la reserva. Puede ser PIPELINE o QUERY.
assignee_id STRING ID que identifica el recurso asignado de forma única.
assignee_number INTEGER Número que identifica el recurso asignado de forma única.
assignee_type STRING Tipo de recurso asignado. Puede ser organization, folder o project.
action STRING Tipo de evento que ocurrió con la asignación. Puede ser CREATE o DELETE.
user_email STRING Dirección de correo electrónico del usuario que realizó el cambio google para los cambios que realizó Google. NULL si se desconoce la dirección de correo electrónico.
state STRING Estado de la asignación. Puede ser PENDING o ACTIVE.

La vista INFORMATION_SCHEMA.ASSIGNMENTS_BY_PROJECT tiene el siguiente esquema:

Nombre de la columna Tipo de datos Valor
project_id STRING ID del proyecto de administración.
project_number INTEGER Número del proyecto de administración.
assignment_id STRING ID que identifica la asignación de forma única.
reservation_name STRING Nombre de la reserva que usa la asignación.
job_type STRING El tipo de trabajo que puede usar la reserva. Puede ser PIPELINE o QUERY.
assignee_id STRING ID que identifica el recurso asignado de forma única.
assignee_number INTEGER Número que identifica el recurso asignado de forma única.
assignee_type STRING Tipo de recurso asignado. Puede ser organization, folder o project.

Retención de datos

Las reservas actuales, los compromisos de capacidad y las asignaciones se mantienen en las vistas de reservas hasta que se borran. Las reservas, las asignaciones y los compromisos de capacidad borrados se mantienen en las vistas RESERVATION_CHANGES_BY_PROJECT, ASSIGNMENT_CHANGES_BY_PROJECT y CAPACITY_COMMITMENT_CHANGES_BY_PROJECT (respectivamente) durante un máximo de 41 días, luego de los cuales se quitan de las vistas.

Regionalidad

Las vistas de reservas INFORMATION_SCHEMA de BigQuery están regionalizadas. Para consultar estas vistas, debes usar un calificador de región.

Unión entre las vistas de reserva y las de trabajo

Las vistas de trabajos contienen la columna reservation_id. Si tu trabajo se ejecutó en un proyecto con una reserva asignada, reservation_id seguirá este formato: reservation-admin-project:reservation-location.reservation-name.

Para unir las vistas de reserva y las de trabajo, puedes realizar una unión entre la columna de vistas de trabajo reservation_id y las columnas de vistas de reservas project_id y reservation_name. Consulta este ejemplo.

Ejemplos

Ejemplo 1

En el siguiente ejemplo, se indica cómo obtener la reserva asignada actualmente al proyecto y su capacidad de ranura. Esta información es útil para depurar el rendimiento del trabajo mediante la comparación del uso de ranuras del proyecto con la capacidad de la reserva asignada a ese proyecto.

La consulta se debe ejecutar en el proyecto del administrador que contiene las reservas. 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, `reservation-admin-project`.`region-us`.INFORMATION_SCHEMA.RESERVATION_CHANGES_BY_PROJECT

Para ejecutar la consulta, haz lo siguiente:

Console

  1. En Cloud Console, abre la página de BigQuery.

    Ir a la página BigQuery

  2. En el cuadro Editor de consultas, ingresa la siguiente consulta de SQL estándar. INFORMATION_SCHEMA requiere sintaxis de SQL estándar. SQL estándar es la sintaxis predeterminada en Cloud Console.

    SELECT
      reservation.reservation_name,
      reservation.slot_capacity
    FROM
      `reservation-admin-project.region-us`.
      INFORMATION_SCHEMA.ASSIGNMENT_CHANGES_BY_PROJECT assignment
    INNER JOIN
      `reservation-admin-project.region-us`.
      INFORMATION_SCHEMA.RESERVATION_CHANGES_BY_PROJECT AS reservation
    ON
      (assignment.reservation_name = reservation.reservation_name)
    WHERE
      assignment.action = "CREATE"
      AND assignment.assignee_id = "my-project"
      AND job_type = "QUERY" /* can also be "PIPELINE */
    ORDER BY
      assignment.change_timestamp DESC,
      reservation.change_timestamp DESC
    LIMIT
      1;
    
  3. Haz clic en Ejecutar.

gcloud

Usa el comando query y especifica la sintaxis de SQL estándar con las marcas --nouse_legacy_sql o --use_legacy_sql=false. Se requiere la sintaxis de SQL estándar para las consultas INFORMATION_SCHEMA.

Para ejecutar la consulta, ingresa lo siguiente:

bq query --nouse_legacy_sql \
'SELECT
  reservation.reservation_name,
  reservation.slot_capacity
FROM
  `reservation-admin-project.region-us`.
  INFORMATION_SCHEMA.ASSIGNMENT_CHANGES_BY_PROJECT assignment
INNER JOIN
  `reservation-admin-project.region-us`.
  INFORMATION_SCHEMA.RESERVATION_CHANGES_BY_PROJECT AS reservation
ON
  (assignment.reservation_name = reservation.reservation_name)
WHERE
  assignment.action = "CREATE"
  AND assignment.assignee_id = "my-project"
  AND job_type = "QUERY" /* can also be "PIPELINE */
ORDER BY
  assignment.change_timestamp DESC,
  reservation.change_timestamp DESC
LIMIT
  1;'

Ejemplo 2

En el siguiente ejemplo, se indica cómo obtener el historial de cambios de una reserva determinada. Usa esta información para ver la lista de cambios que se realizaron en una reserva específica.

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, `reservation-admin-project`.`region-us`.INFORMATION_SCHEMA.RESERVATION_CHANGES_BY_PROJECT

Para ejecutar la consulta, haz lo siguiente:

Console

  1. En Cloud Console, abre la página de BigQuery.

    Ir a la página BigQuery

  2. En el cuadro Editor de consultas, ingresa la siguiente consulta de SQL estándar. INFORMATION_SCHEMA requiere sintaxis de SQL estándar. SQL estándar es la sintaxis predeterminada en Cloud Console.

    SELECT
      *
    FROM
      `reservation-admin-project.region-us`.
      INFORMATION_SCHEMA.RESERVATION_CHANGES_BY_PROJECT
    WHERE
      reservation_name = "..."
    ORDER BY
      change_timestamp DESC;
    
  3. Haz clic en Ejecutar.

gcloud

Usa el comando query y especifica la sintaxis de SQL estándar con las marcas --nouse_legacy_sql o --use_legacy_sql=false. Se requiere la sintaxis de SQL estándar para las consultas INFORMATION_SCHEMA.

Para ejecutar la consulta, ingresa lo siguiente:

bq query --nouse_legacy_sql \
'SELECT
  *
FROM
  `reservation-admin-project.region-us`.
  INFORMATION_SCHEMA.RESERVATION_CHANGES_BY_PROJECT
WHERE
  reservation_name = "..."
ORDER BY
  change_timestamp DESC;'

Ejemplo 3

En el siguiente ejemplo, se unen las vistas JOBS_BY_PROJECT y RESERVATIONS_BY_PROJECT, que proporcionan el uso de ranuras por un proyecto asignado determinado en la última hora y la capacidad de ranuras de cada reserva en el proyecto de administrador determinado. Un proyecto asignado es un proyecto que tiene una reserva asignada y un proyecto de administrador es el proyecto que contiene las reservas. A fin de obtener más información, consulta la documentación sobre las reservas. Esta consulta usa la vista RESERVATIONS_BY_PROJECT para obtener información de reservas. Si las reservas cambiaron en la última hora, es posible que la columna reservation_slot_capacity no sea precisa.

La consulta se debe ejecutar mediante el proyecto de administrador que contiene las reservas o el proyecto asignado. 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, `reservation-admin-project`.`region-us`.INFORMATION_SCHEMA.RESERVATIONS_BY_PROJECT.

Para ejecutar la consulta, haz lo siguiente:

Console

  1. En Cloud Console, abre la página de BigQuery.

    Ir a la página BigQuery

  2. En el campo Editor de consultas, ingresa la siguiente consulta de SQL estándar. INFORMATION_SCHEMA requiere sintaxis de SQL estándar. SQL estándar es la sintaxis predeterminada en Cloud Console.

     WITH
      job_data AS (
      SELECT
        job.reservation_id,
        job.total_slot_ms
      FROM
        `assignee-project.region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT AS job
      WHERE
        job.start_time < TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR) )
    SELECT
      reservation.reservation_name AS reservation_name,
      ANY_VALUE(reservation.slot_capacity) AS reservation_slot_capacity,
      SUM(job.total_slot_ms) / (1000 * 60 * 60) AS avg_slots_used_by_hour
    FROM
      job_data AS job
    INNER JOIN
      `admin-project.region-us`.INFORMATION_SCHEMA.RESERVATIONS_BY_PROJECT AS reservation
    ON
      (job.reservation_id = CONCAT(reservation.project_id, ":", "US", ".", reservation.reservation_name))
    GROUP BY
      1
    ORDER BY
      1 DESC;
    
  3. Haz clic en Ejecutar.

gcloud

Usa el comando query y especifica la sintaxis de SQL estándar con las marcas --nouse_legacy_sql o --use_legacy_sql=false. Se requiere la sintaxis de SQL estándar para las consultas INFORMATION_SCHEMA.

Para ejecutar la consulta, ingresa lo siguiente:

bq query --nouse_legacy_sql \
'WITH
   job_data AS (
   SELECT
     job.reservation_id,
     job.total_slot_ms
   FROM
     `assignee-project.region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT AS job
   WHERE
     job.start_time < TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR) )
 SELECT
   reservation.reservation_name AS reservation_name,
   ANY_VALUE(reservation.slot_capacity) AS reservation_slot_capacity,
   SUM(job.total_slot_ms) / (1000 * 60 * 60) AS avg_slots_used_by_hour
 FROM
   job_data AS job
 INNER JOIN
   `admin-project.region-us`.INFORMATION_SCHEMA.RESERVATIONS_BY_PROJECT AS reservation
 ON
   (job.reservation_id = CONCAT(reservation.project_id, ":", "US", ".", reservation.reservation_name))
 GROUP BY
   1
 ORDER BY
   1 DESC;'

Próximos pasos