Visualizzazione STREAMING_TIMELINE

La visualizzazione INFORMATION_SCHEMA.STREAMING_TIMELINE contiene statistiche sullo streaming aggregate al minuto per il progetto corrente.

Puoi eseguire query sulle visualizzazioni di streaming INFORMATION_SCHEMA per recuperare informazioni storiche e in tempo reale sui dati in streaming in BigQuery che utilizzano il metodo tabledata.insertAll precedente e non l'API BigQuery Storage Write. Per ulteriori informazioni sull'inserimento di flussi di dati in BigQuery, consulta Inserimento di flussi di dati in BigQuery.

Autorizzazione obbligatoria

Per eseguire query sulla visualizzazione INFORMATION_SCHEMA.STREAMING_TIMELINE, devi disporre dell'autorizzazione bigquery.tables.list Identity and Access Management (IAM) per il progetto.

Ciascuno dei seguenti ruoli IAM predefiniti include l'autorizzazione obbligatoria:

  • roles/bigquery.user
  • roles/bigquery.dataViewer
  • roles/bigquery.dataEditor
  • roles/bigquery.dataOwner
  • roles/bigquery.metadataViewer
  • roles/bigquery.resourceAdmin
  • roles/bigquery.admin

Per ulteriori informazioni sulle autorizzazioni BigQuery, consulta Controllo dell'accesso con IAM.

Schema

Quando esegui query sulle viste di streaming INFORMATION_SCHEMA, i risultati della query contengono informazioni storiche e in tempo reale sui dati in streaming in BigQuery. Ogni riga delle seguenti visualizzazioni rappresenta le statistiche per lo streaming in una tabella specifica, aggregate in un intervallo di un minuto a partire da start_timestamp. Le statistiche sono raggruppate per codice di errore, quindi ci sarà una riga per ogni codice di errore rilevato durante l'intervallo di un minuto per ogni combinazione di timestamp e tabella. Le richieste riuscite hanno il codice di errore impostato su NULL. Se non sono stati caricati dati in streaming in una tabella durante un determinato periodo di tempo, non sono presenti righe per i timestamp corrispondenti per quella tabella.

Le visualizzazioni INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_* hanno il seguente schema:

Nome colonna Tipo di dati Valore
start_timestamp TIMESTAMP (Colonna di partizionamento) Timestamp di inizio dell'intervallo di 1 minuto per le statistiche aggregate.
project_id STRING (Colonna di clustering) ID del progetto.
project_number INTEGER Numero del progetto.
dataset_id STRING (Colonna di clustering) ID del set di dati.
table_id STRING (Colonna di clustering) ID della tabella.
error_code STRING Codice di errore restituito per le richieste specificate da questa riga. NULL per le richieste riuscite.
total_requests INTEGER Numero totale di richieste nell'intervallo di 1 minuto.
total_rows INTEGER Numero totale di righe di tutte le richieste nell'intervallo di 1 minuto.
total_input_bytes INTEGER Numero totale di byte di tutte le righe nell'intervallo di 1 minuto.

Conservazione dei dati

Questa visualizzazione contiene la cronologia dello streaming degli ultimi 180 giorni.

Ambito e sintassi

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

Nome vista Ambito risorsa Ambito regione
[PROJECT_ID.]`region-REGION`.INFORMATION_SCHEMA.STREAMING_TIMELINE[_BY_PROJECT] Livello progetto REGION
Sostituisci quanto segue:

  • Facoltativo: PROJECT_ID: l'ID del tuo progetto Google Cloud. Se non specificato, viene utilizzato il progetto predefinito.

  • REGION: qualsiasi nome della regione del set di dati. Ad esempio: `region-us`.

  • Esempio

    • Per eseguire query sui dati nella regione multipla degli Stati Uniti, utilizza `region-us`.INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_PROJECT
    • Per eseguire query sui dati nella regione multipla dell'UE, utilizza `region-eu`.INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_PROJECT
    • Per eseguire query sui dati nella regione asia-northeast1, utilizza `region-asia-northeast1`.INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_PROJECT

    Per un elenco delle regioni disponibili, consulta Località dei set di dati.

    Esempi

    Esempio 1: errori di streaming recenti

    L'esempio seguente calcola la suddivisione al minuto delle richieste non andate a buon fine totali per tutte le tabelle del progetto negli ultimi 30 minuti, suddivise per codice errore:

    SELECT
      start_timestamp,
      error_code,
      SUM(total_requests) AS num_failed_requests
    FROM
      `region-us`.INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_PROJECT
    WHERE
      error_code IS NOT NULL
      AND start_timestamp > TIMESTAMP_SUB(CURRENT_TIMESTAMP, INTERVAL 30 MINUTE)
    GROUP BY
      start_timestamp,
      error_code
    ORDER BY
      start_timestamp DESC;

    Il risultato è simile al seguente:

    +---------------------+------------------+---------------------+
    |   start_timestamp   |    error_code    | num_failed_requests |
    +---------------------+------------------+---------------------+
    | 2020-04-15 20:55:00 | INTERNAL_ERROR   |                  41 |
    | 2020-04-15 20:41:00 | CONNECTION_ERROR |                   5 |
    | 2020-04-15 20:30:00 | INTERNAL_ERROR   |                 115 |
    +---------------------+------------------+---------------------+
    
    Esempio 2: suddivisione per minuto di tutte le richieste con codici di errore

    L'esempio seguente calcola una suddivisione al minuto delle richieste di streaming riuscite e non riuscite, suddivise in categorie di codici di errore. Questa query potrebbe essere utilizzata per compilare una dashboard.

    SELECT
      start_timestamp,
      SUM(total_requests) AS total_requests,
      SUM(total_rows) AS total_rows,
      SUM(total_input_bytes) AS total_input_bytes,
      SUM(
        IF(
          error_code IN ('QUOTA_EXCEEDED', 'RATE_LIMIT_EXCEEDED'),
          total_requests,
          0)) AS quota_error,
      SUM(
        IF(
          error_code IN (
            'INVALID_VALUE', 'NOT_FOUND', 'SCHEMA_INCOMPATIBLE',
            'BILLING_NOT_ENABLED', 'ACCESS_DENIED', 'UNAUTHENTICATED'),
          total_requests,
          0)) AS user_error,
      SUM(
        IF(
          error_code IN ('CONNECTION_ERROR','INTERNAL_ERROR'),
          total_requests,
          0)) AS server_error,
      SUM(IF(error_code IS NULL, 0, total_requests)) AS total_error,
    FROM
      `region-us`.INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_PROJECT
    GROUP BY
      start_timestamp
    ORDER BY
      start_timestamp DESC;

    Il risultato è simile al seguente:

    +---------------------+----------------+------------+-------------------+-------------+------------+--------------+-------------+
    |   start_timestamp   | total_requests | total_rows | total_input_bytes | quota_error | user_error | server_error | total_error |
    +---------------------+----------------+------------+-------------------+-------------+------------+--------------+-------------+
    | 2020-04-15 22:00:00 |         441854 |     441854 |       23784853118 |           0 |          0 |           17 |          17 |
    | 2020-04-15 21:59:00 |         355627 |     355627 |       26101982742 |           0 |          0 |            0 |           0 |
    | 2020-04-15 21:58:00 |         354603 |     354603 |       26160565341 |           0 |          0 |            0 |           0 |
    | 2020-04-15 21:57:00 |         298823 |     298823 |       23877821442 |           0 |          0 |            0 |           0 |
    +---------------------+----------------+------------+-------------------+-------------+------------+--------------+-------------+
    
    Esempio 3: tabelle con il maggior traffico in entrata

    L'esempio seguente restituisce le statistiche di streaming per le 10 tabelle con il maggior volume di traffico in entrata:

    SELECT
      project_id,
      dataset_id,
      table_id,
      SUM(total_rows) AS num_rows,
      SUM(total_input_bytes) AS num_bytes,
      SUM(total_requests) AS num_requests
    FROM
      `region-us`.INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_PROJECT
    GROUP BY
      project_id,
      dataset_id,
      table_id
    ORDER BY
      num_bytes DESC
    LIMIT 10;

    Il risultato è simile al seguente:

    +----------------------+------------+-------------------------------+------------+----------------+--------------+
    |      project_id      | dataset_id |           table_id            |  num_rows  |   num_bytes    | num_requests |
    +----------------------+------------+-------------------------------+------------+----------------+--------------+
    | my-project           | dataset1   | table1                        | 8016725532 | 73787301876979 |   8016725532 |
    | my-project           | dataset1   | table2                        |   26319580 | 34199853725409 |     26319580 |
    | my-project           | dataset2   | table1                        |   38355294 | 22879180658120 |     38355294 |
    | my-project           | dataset1   | table3                        |  270126906 | 17594235226765 |    270126906 |
    | my-project           | dataset2   | table2                        |   95511309 | 17376036299631 |     95511309 |
    | my-project           | dataset2   | table3                        |   46500443 | 12834920497777 |     46500443 |
    | my-project           | dataset2   | table4                        |   25846270 |  7487917957360 |     25846270 |
    | my-project           | dataset1   | table4                        |   18318404 |  5665113765882 |     18318404 |
    | my-project           | dataset1   | table5                        |   42829431 |  5343969665771 |     42829431 |
    | my-project           | dataset1   | table6                        |    8771021 |  5119004622353 |      8771021 |
    +----------------------+------------+-------------------------------+------------+----------------+--------------+
    
    Esempio 4: rapporto di errori di streaming per una tabella

    L'esempio seguente calcola una suddivisione giornaliera degli errori per una tabella specifica, suddivisa per codice di errore:

    SELECT
      TIMESTAMP_TRUNC(start_timestamp, DAY) as day,
      project_id,
      dataset_id,
      table_id,
      error_code,
      SUM(total_rows) AS num_rows,
      SUM(total_input_bytes) AS num_bytes,
      SUM(total_requests) AS num_requests
    FROM
      `region-us`.INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_PROJECT
    WHERE
      table_id LIKE 'my_table'
    GROUP BY
      project_id, dataset_id, table_id, error_code, day
    ORDER BY
      day, project_id, dataset_id DESC;

    Il risultato è simile al seguente:

    +---------------------+-------------+------------+----------+----------------+----------+-----------+--------------+
    |         day         |  project_id | dataset_id | table_id |   error_code   | num_rows | num_bytes | num_requests |
    +---------------------+-------------+------------+----------+----------------+----------+-----------+--------------+
    | 2020-04-21 00:00:00 | my_project  | my_dataset | my_table | NULL           |       41 |    252893 |           41 |
    | 2020-04-20 00:00:00 | my_project  | my_dataset | my_table | NULL           |     2798 |  10688286 |         2798 |
    | 2020-04-19 00:00:00 | my_project  | my_dataset | my_table | NULL           |     2005 |   7979495 |         2005 |
    | 2020-04-18 00:00:00 | my_project  | my_dataset | my_table | NULL           |     2054 |   7972378 |         2054 |
    | 2020-04-17 00:00:00 | my_project  | my_dataset | my_table | NULL           |     2056 |   6978079 |         2056 |
    | 2020-04-17 00:00:00 | my_project  | my_dataset | my_table | INTERNAL_ERROR |        4 |     10825 |            4 |
    +---------------------+-------------+------------+----------+----------------+----------+-----------+--------------+