Visualizzazione RESERVATIONS_TIMELINE

La visualizzazione INFORMATION_SCHEMA.RESERVATIONS_TIMELINE mostra le sezioni temporali dei metadati di prenotazione per ogni progetto di amministrazione delle prenotazioni per ogni minuto in tempo reale. Inoltre, l'array per_second_details mostra i dettagli della scalabilità automatica per ogni secondo.

Autorizzazione obbligatoria

Per eseguire query sulla visualizzazione INFORMATION_SCHEMA.RESERVATION_TIMELINE, devi disporre dell'autorizzazione Identity and Access Management (IAM) bigquery.reservations.list per il progetto. Ciascuno dei seguenti ruoli IAM predefiniti include l'autorizzazione richiesta:

  • Amministratore risorse BigQuery (roles/bigquery.resourceAdmin)
  • BigQuery Resource Editor (roles/bigquery.resourceEditor)
  • Visualizzatore risorse BigQuery (roles/bigquery.resourceViewer)
  • Utente BigQuery (roles/bigquery.user)
  • Amministratore BigQuery (roles/bigquery.admin)

Per ulteriori informazioni sulle autorizzazioni BigQuery, consulta Ruoli e autorizzazioni IAM di BigQuery.

Schema

Quando esegui una query sulle visualizzazioni INFORMATION_SCHEMA.RESERVATIONS_TIMELINE_BY_*, i risultati della query contengono una riga per ogni minuto di ogni prenotazione BigQuery negli ultimi 180 giorni e una riga per ogni minuto con modifiche alla prenotazione per gli eventi più vecchi di 180 giorni. Ogni periodo inizia a un intervallo di un minuto intero e dura esattamente un minuto.

La vista INFORMATION_SCHEMA.RESERVATIONS_TIMELINE_BY_PROJECT ha lo schema seguente:

Nome colonna Tipo di dati Valore
autoscale STRUCT

Contiene informazioni sulla capacità di scalabilità automatica della prenotazione. I campi includono:

  • current_slots: il numero di slot aggiunti alla prenotazione tramite la scalabilità automatica.
  • max_slots: il numero massimo di slot che possono essere aggiunti alla prenotazione tramite la scalabilità automatica.
edition STRING La versione associata a questa prenotazione. Per ulteriori informazioni sulle versioni, vedi Introduzione alle versioni di BigQuery.
ignore_idle_slots BOOL Falso se la condivisione di slot è abilitata, vero in caso contrario.
labels RECORD Array di etichette associate alla prenotazione.
period_start TIMESTAMP Ora di inizio di questo periodo di un minuto.
per_second_details STRUCT

Contiene informazioni sulla capacità e sull'utilizzo della prenotazione ogni secondo. I campi includono:

  • start_time: il timestamp esatto del secondo.
  • autoscale_current_slots: il numero di slot aggiunti alla prenotazione tramite la scalabilità automatica in questo secondo.
  • autoscale_max_slots: il numero massimo di slot che potrebbero essere aggiunti alla prenotazione tramite la scalabilità automatica in questo secondo.
  • slots_assigned: il numero di slot assegnati a questa prenotazione in questo secondo. Equivale alla capacità slot di riferimento di una prenotazione.
  • slots_max_assigned: la capacità massima degli slot per questa prenotazione, inclusa la condivisione degli slot in questo secondo. Se ignore_idle_slots è true, questo campo è uguale a slots_assigned. In caso contrario, il campo slots_max_assigned indica il numero totale di slot in tutti gli impegni di capacità nel progetto di amministrazione.

Se durante questo minuto vengono apportate modifiche alla scalabilità automatica o alla prenotazione, l'array viene compilato con 60 righe. Tuttavia, per le prenotazioni non scalabili automaticamente che rimangono invariate durante questo minuto, l'array è vuoto perché altrimenti ripeterebbe lo stesso numero 60 volte.

project_id STRING ID del progetto di amministrazione delle prenotazioni.
project_number INTEGER Numero del progetto.
reservation_id STRING Per l'unione con la tabella jobs_timeline. Ha il formato project_id:location.reservation_name.
reservation_name STRING Il nome della prenotazione.
slots_assigned INTEGER Il numero di slot assegnati a questa prenotazione.
slots_max_assigned INTEGER La capacità massima degli slot per questa prenotazione, inclusa la condivisione degli slot. Se ignore_idle_slots è true, questo valore è uguale a slots_assigned, altrimenti è il numero totale di slot in tutti gli impegni di capacità nel progetto di amministrazione.
max_slots INTEGER Il numero massimo di slot che questa prenotazione può utilizzare, che include slot di riferimento (slot_capacity), slot inattivi (se ignore_idle_slots è false) e slot con scalabilità automatica. Questo campo viene specificato dagli utenti per utilizzare la funzionalità di prevedibilità delle prenotazioni.
scaling_mode STRING La modalità di scalabilità per la prenotazione, che determina il modo in cui la prenotazione viene scalata dalla baseline a max_slots. Questo campo viene specificato dagli utenti per utilizzare la funzionalità di prevedibilità delle prenotazioni.

Ambito e sintassi

Le query su questa visualizzazione devono includere un qualificatore di regione. Se non specifichi un qualificatore regionale, i metadati vengono recuperati da tutte le regioni. La tabella seguente spiega l'ambito della regione e delle risorse per questa visualizzazione:

Nome vista Ambito risorsa Ambito regione
[PROJECT_ID.]`region-REGION`.INFORMATION_SCHEMA.RESERVATIONS_TIMELINE[_BY_PROJECT] Livello progetto REGION
Sostituisci quanto segue:
  • (Facoltativo) PROJECT_ID: l'ID del tuo Google Cloud progetto. Se non specificato, viene utilizzato il progetto predefinito.
  • REGION: qualsiasi nome della regione del set di dati. Ad esempio: `region-us`.

Esempi

Esempio: visualizzare l'utilizzo totale degli slot al secondo

Per eseguire la query su un progetto diverso da quello predefinito, aggiungi l'ID progetto nel seguente formato:

`PROJECT_ID`.`region-REGION_NAME`.INFORMATION_SCHEMA.JOBS_TIMELINE_BY_ORGANIZATION
. Ad esempio, `myproject`.`region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE_BY_ORGANIZATION.

Il seguente esempio mostra l'utilizzo degli slot al secondo dei progetti assegnati a YOUR_RESERVATION_ID in tutti i job:

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;

Il risultato è simile al seguente:

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

Esempio: utilizzo degli slot per prenotazione

L'esempio seguente mostra l'utilizzo degli slot al secondo per ogni prenotazione nell'ultimo giorno:

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;

Il risultato è simile al seguente:

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