Vue RESERVATIONS_TIMELINE

La vue INFORMATION_SCHEMA.RESERVATIONS_TIMELINE affiche les tranches horaires des métadonnées de réservation pour chaque projet d'administration de réservation, pour chaque minute en temps réel. De plus, le tableau per_second_details affiche les détails de l'autoscaling pour chaque seconde.

Autorisation requise

Pour interroger la vue INFORMATION_SCHEMA.RESERVATION_TIMELINE, vous devez disposer de l'autorisation IAM (Identity and Access Management) bigquery.reservations.list pour le projet. Chacun des rôles IAM prédéfinis suivants inclut l'autorisation requise:

  • Administrateur de ressources BigQuery (roles/bigquery.resourceAdmin)
  • Éditeur de ressources BigQuery (roles/bigquery.resourceEditor)
  • Lecteur de ressources BigQuery (roles/bigquery.resourceViewer)
  • Utilisateur BigQuery (roles/bigquery.user)
  • Administrateur BigQuery (roles/bigquery.admin)

Pour en savoir plus sur les autorisations BigQuery, consultez Rôles et autorisations IAM BigQuery.

Schéma

Lorsque vous interrogez les vues INFORMATION_SCHEMA.RESERVATIONS_TIMELINE_BY_*, les résultats de la requête contiennent une ligne pour chaque minute de chaque réservation BigQuery au cours des 180 derniers jours, et une ligne pour chaque minute avec des modifications de réservation pour toutes les occurrences datant de plus de 180 jours. Chaque période commence à un intervalle d'une minute et dure exactement une minute.

La vue INFORMATION_SCHEMA.RESERVATIONS_TIMELINE_BY_PROJECT présente le schéma suivant :

Nom de la colonne Type de données Valeur
autoscale STRUCT

Contient des informations sur la capacité d'autoscaling de la réservation. Les champs incluent les suivants :

  • current_slots : nombre d'emplacements ajoutés à la réservation par l'autoscaling.
  • max_slots : nombre maximal d'emplacements pouvant être ajoutés à la réservation par autoscaling.
edition STRING Édition associée à cette réservation. Pour en savoir plus sur les éditions, consultez la page Présentation des éditions BigQuery.
ignore_idle_slots BOOL "False" si le partage d'emplacements est activé, "True" sinon.
labels RECORD Tableau des libellés associés à la réservation.
period_start TIMESTAMP Heure de début de cette période d'une minute.
per_second_details STRUCT

Contient des informations sur la capacité et l'utilisation des réservations à chaque seconde. Les champs incluent les suivants :

  • start_time : code temporel exact de la seconde.
  • autoscale_current_slots : nombre d'emplacements ajoutés à la réservation par l'autoscaling à cette seconde.
  • autoscale_max_slots : nombre maximal d'emplacements pouvant être ajoutés à la réservation par autoscaling à cette seconde.
  • slots_assigned : nombre d'emplacements attribués à cette réservation à cette seconde. Elle est égale à la capacité d'emplacements de base d'une réservation.
  • slots_max_assigned : capacité d'emplacements maximale pour cette réservation, y compris le partage d'emplacements à cette seconde. Si ignore_idle_slots est défini sur "true", ce champ est identique à slots_assigned. Sinon, le champ slots_max_assigned correspond au nombre total d'emplacements dans tous les engagements de capacité du projet d'administration.

S'il y a des modifications d'autoscaling ou de réservation pendant cette minute, le tableau est rempli de 60 lignes. Toutefois, pour les réservations sans autoscaling qui restent inchangées pendant cette minute, le tableau est vide, car il répéterait sinon le même nombre 60 fois.

project_id STRING ID du projet d'administration de la réservation.
project_number INTEGER Numéro du projet
reservation_id STRING Sert à effectuer la jointure avec la table jobs_timeline. La valeur est au format project_id:location.reservation_name.
reservation_name STRING Nom de la réservation.
slots_assigned INTEGER Nombre d'emplacements attribués à cette réservation.
slots_max_assigned INTEGER Capacité d'emplacements maximale pour cette réservation, y compris le partage d'emplacements. Si ignore_idle_slots est défini sur "true", ce champ est identique à slots_assigned. Sinon, il s'agit du nombre total d'emplacements dans tous les engagements de capacité du projet d'administration.
max_slots INTEGER Nombre maximal d'emplacements que cette réservation peut utiliser, y compris les emplacements de référence (slot_capacity), les emplacements inactifs (si ignore_idle_slots est défini sur "false") et les emplacements avec autoscaling. Ce champ est spécifié par les utilisateurs pour utiliser la fonctionnalité de prévisibilité des réservations.
scaling_mode STRING Mode de scaling de la réservation, qui détermine comment la réservation évolue de la référence à max_slots. Ce champ est spécifié par les utilisateurs pour utiliser la fonctionnalité de prévisibilité des réservations.

Champ d'application et syntaxe

Les requêtes exécutées sur cette vue doivent inclure un qualificatif de région. Si vous ne spécifiez pas de qualificatif de région, les métadonnées sont extraites de toutes les régions. Le tableau suivant explique la portée des régions et des ressources pour cette vue :

Nom de la vue Champ d'application de la ressource Champ d'application de la région
[PROJECT_ID.]`region-REGION`.INFORMATION_SCHEMA.RESERVATIONS_TIMELINE[_BY_PROJECT] Niveau Projet REGION
Remplacez l'élément suivant :
  • PROJECT_ID (facultatif) : ID de votre projet Google Cloud . Si non spécifié, le projet par défaut est utilisé.
  • REGION : tout nom de région d'ensemble de données. Par exemple, `region-us`.

Exemples

Exemple : Afficher l'utilisation totale des emplacements par seconde

Pour exécuter la requête sur un projet autre que celui par défaut, ajoutez l'ID du projet en respectant le format suivant :

`PROJECT_ID`.`region-REGION_NAME`.INFORMATION_SCHEMA.JOBS_TIMELINE_BY_ORGANIZATION
. Par exemple, `myproject`.`region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE_BY_ORGANIZATION.

L'exemple suivant montre l'utilisation des emplacements par seconde pour les projets attribués à YOUR_RESERVATION_ID pour l'ensemble des tâches :

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;

Le résultat ressemble à ce qui suit :

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

Exemple : Utilisation des emplacements par réservation

L'exemple suivant montre l'utilisation des emplacements par seconde pour chaque réservation au cours du dernier jour :

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;

Le résultat ressemble à ce qui suit :

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