Vue STREAMING_TIMELINE

La vue INFORMATION_SCHEMA.STREAMING_TIMELINE contient les statistiques de streaming agrégées par minute pour le projet en cours.

Vous pouvez interroger les vues en streaming INFORMATION_SCHEMA pour récupérer des informations historiques et en temps réel sur le streaming de données dans BigQuery qui utilise l'ancienne méthode tabledata.insertAll, et non l'API BigQuery Storage Write. Pour en savoir plus sur le streaming de données dans BigQuery, consultez la section Insérer des données en streaming dans BigQuery.

Autorisation requise

Pour interroger la vue INFORMATION_SCHEMA.STREAMING_TIMELINE, vous devez disposer de l'autorisation IAM (Identity and Access Management) bigquery.tables.list pour le projet.

Chacun des rôles IAM prédéfinis suivants inclut l'autorisation requise:

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

Pour plus d'informations sur les autorisations BigQuery, consultez la page Contrôle des accès avec IAM.

Schéma

Lorsque vous interrogez les vues en streaming INFORMATION_SCHEMA, les résultats de la requête contiennent des informations historiques et en temps réel sur les données de streaming dans BigQuery. Chaque ligne des vues suivantes représente les statistiques de streaming dans une table spécifique, regroupées sur un intervalle d'une minute à partir de start_timestamp. Les statistiques sont regroupées par code d'erreur. Par conséquent, il existe une ligne pour chaque code d'erreur rencontré au cours de l'intervalle d'une minute pour chaque combinaison d'horodatage et de table. Le code d'erreur des requêtes réussies est défini sur NULL. Si aucune donnée n'a été transmise à une table au cours d'une période donnée, aucune ligne n'est présente pour les horodatages correspondants de cette table.

Les vues INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_* présentent le schéma suivant:

Nom de colonne Type de données Valeur
start_timestamp TIMESTAMP (Colonne de partitionnement) Horodatage de début de l'intervalle d'une minute pour les statistiques agrégées
project_id STRING (Colonne de clustering) ID du projet.
project_number INTEGER Numéro du projet
dataset_id STRING (Colonne de clustering) ID de l'ensemble de données
table_id STRING (Colonne de clustering) ID de la table
error_code STRING Code d'erreur renvoyé pour les requêtes spécifiées par cette ligne (NULL pour les requêtes réussies)
total_requests INTEGER Nombre total de requêtes dans l'intervalle d'une minute
total_rows INTEGER Nombre total de lignes de toutes les requêtes dans l'intervalle d'une minute
total_input_bytes INTEGER Nombre total d'octets de toutes les lignes dans l'intervalle d'une minute

Conservation des données

Cette vue contient l'historique de streaming des 180 derniers jours.

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 le champ d'application de la région 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.STREAMING_TIMELINE[_BY_PROJECT] Niveau Projet REGION
Remplacez les éléments suivants :

  • Facultatif : PROJECT_ID : 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. Exemple : region-us.

Exemple

  • Pour interroger des données dans l'emplacement multirégional "US", utilisez `region-us`.INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_PROJECT.
  • Pour interroger des données dans l'emplacement multirégional "EU", utilisez `region-eu`.INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_PROJECT.
  • Pour interroger des données dans la région asia-northeast1, utilisez `region-asia-northeast1`.INFORMATION_SCHEMA.STREAMING_TIMELINE_BY_PROJECT.

Pour obtenir la liste des régions disponibles, consultez la section Emplacements des ensembles de données.

Exemples

Exemple 1 : Échecs récents du streaming

L'exemple suivant calcule la répartition par minute du nombre total de requêtes ayant échoué pour toutes les tables du projet au cours des 30 dernières minutes, divisée par code d'erreur :

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;

Le résultat ressemble à ce qui suit :

+---------------------+------------------+---------------------+
|   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 |
+---------------------+------------------+---------------------+
Exemple 2 : Répartition par minute pour toutes les requêtes avec codes d'erreur

L'exemple suivant calcule une répartition par minute des requêtes en streaming ayant réussi ou échoué, divisée en catégories de code d'erreur. Cette requête peut être utilisée pour renseigner un tableau de bord.

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;

Le résultat ressemble à ce qui suit :

+---------------------+----------------+------------+-------------------+-------------+------------+--------------+-------------+
|   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 |
+---------------------+----------------+------------+-------------------+-------------+------------+--------------+-------------+
Exemple 3 : Tables avec le plus de trafic entrant

L'exemple suivant renvoie les statistiques de streaming des 10 tables avec le plus de trafic entrant :

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;

Le résultat ressemble à ce qui suit :

+----------------------+------------+-------------------------------+------------+----------------+--------------+
|      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 |
+----------------------+------------+-------------------------------+------------+----------------+--------------+
Exemple 4 : Taux d'erreur de streaming pour une table

L'exemple suivant calcule une répartition quotidienne des erreurs pour une table spécifique, divisée par code d'erreur :

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;

Le résultat ressemble à ce qui suit :

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