Surveiller les vues matérialisées

Vous pouvez surveiller l'utilisation des vues matérialisées et les jobs d'actualisation en affichant la vue BigQuery INFORMATION_SCHEMA. Pour créer une liste des vues matérialisées, consultez la section Répertorier les vues matérialisées.

Vue INFORMATION_SCHEMA de la vue matérialisée

Pour découvrir les vues matérialisées, interrogez la vue INFORMATION_SCHEMA.TABLES. Pour récupérer les propriétés d'une vue matérialisée, interrogez la vue INFORMATION_SCHEMA.TABLE_OPTIONS.

Les vues matérialisées ne sont pas listées dans la table des vues INFORMATION_SCHEMA.VIEWS.

Surveiller l'actualisation automatique

Cette section explique comment afficher les détails d'actualisation des vues matérialisées.

Afficher l'état de la dernière actualisation

Pour récupérer l'état actuel des vues matérialisées, appelez la méthode tables.get ou interrogez la vue INFORMATION_SCHEMA.MATERIALIZED_VIEWS.

Exemple :

SELECT
  table_name, last_refresh_time, refresh_watermark, last_refresh_status
FROM
  `DATASET`.INFORMATION_SCHEMA.MATERIALIZED_VIEWS;

Si la valeur de last_refresh_status n'est pas NULL, le dernier job d'actualisation automatique a échoué. Les requêtes d'actualisation manuelle ne sont pas reflétées ici. Les modifications apportées aux tables de base peuvent invalider une définition de vue matérialisée, ce qui entraîne une erreur lors de l'actualisation automatique. Pour en savoir plus, consultez la section Mises à jour incrémentielles. Par exemple, si une colonne référencée par la vue matérialisée est supprimée de la table de base, le champ last_refresh_status renvoie une erreur invalidQuery. Pour en savoir plus, consultez la section Messages d'erreur.

Lister les jobs d'actualisation automatique

Pour lister les jobs d'actualisation automatique de la vue matérialisée, appelez la méthode jobs.list. Pour récupérer les détails concernant les jobs, appelez la méthode jobs.get. Vous pouvez également interroger les vues INFORMATION_SCHEMA.JOBS_BY_* pour obtenir les jobs. Les jobs d'actualisation automatique contiennent le préfixe materialized_view_refresh dans le Job ID et sont démarrés par un compte d'administrateur BigQuery.

Exemple :

SELECT
  job_id, total_slot_ms, total_bytes_processed,
  materialized_view_statistics.materialized_view[SAFE_OFFSET(0)].rejected_reason
  AS full_refresh_reason
FROM
  `region-us.INFORMATION_SCHEMA.JOBS_BY_PROJECT`
WHERE
  job_id LIKE '%materialized_view_refresh_%'
LIMIT 10;

Pour surveiller le coût des jobs d'actualisation et ajuster l'intervalle d'actualisation automatique si nécessaire, affichez les champs total_bytes_processed et total_slot_ms.

Par exemple, si le taux d'ingestion dans les tables de base est relativement faible, il est judicieux d'actualiser la vue moins souvent. Si les données sous-jacentes changent rapidement, il est judicieux de les actualiser plus souvent.

Si les tables de base ingèrent des données à des moments prédéfinis, par exemple par le biais d'un pipeline d'extraction, de transformation et de chargement (ETL) nocturne, envisagez de prendre le contrôle du calendrier de maintenance de la vue matérialisée comme suit :

  1. Désactivez l'actualisation automatique.

  2. Effectuez une actualisation manuelle, dans le cadre du pipeline ETL ou en configurant une requête programmée à des heures spécifiques de la journée.

Pour en savoir plus sur les tarifs des vues matérialisées, consultez la section Tarification des vues matérialisées.

Surveiller l'utilisation des vues matérialisées

Pour afficher l'utilisation de la vue matérialisée pour un job de requête, vous pouvez appeler la méthode jobs.get ou interroger la vue INFORMATION_SCHEMA.JOBS_BY_* et afficher le champ materialized_view_statistics. Il fournit des détails concernant l'utilisation des vues matérialisées par la requête, y compris les informations suivantes :

Exemple :

SELECT
  job_id, materialized_view_statistics
FROM
  region-US.INFORMATION_SCHEMA.JOBS_BY_PROJECT
WHERE
  job_id = '<my-query-job-id>';

Pour afficher l'utilisation d'une vue matérialisée au fil du temps, interrogez les vues INFORMATION_SCHEMA.JOBS_BY_*.

Par exemple, la requête suivante renvoie un résumé des jobs de requête récents qui utilisent la vue matérialisée cible :

SELECT
  mv.table_reference.dataset_id,
  mv.table_reference.table_id,
  MAX(job.creation_time) latest_job_time,
  COUNT(job_id) job_count
FROM
  region-US.INFORMATION_SCHEMA.JOBS_BY_PROJECT job,
  UNNEST(materialized_view_statistics.materialized_view) mv
WHERE
  job.creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP, INTERVAL 7 DAY)
  AND mv.table_reference.dataset_id = 'my_dataset'
  AND mv.table_reference.table_id = 'my_materialized_view'
  AND mv.chosen = TRUE
GROUP BY 1, 2;

Résoudre les problèmes des requêtes lentes avec des vues matérialisées

Si votre requête utilise des vues matérialisées et s'exécute plus lentement que prévu, procédez comme suit :

  1. Vérifiez que les vues matérialisées prévues sont effectivement utilisées par la requête. Pour obtenir des instructions détaillées, consultez Surveiller l'utilisation des vues matérialisées.
  2. Vérifiez la fraîcheur de votre vue matérialisée.
  3. Examinez la définition de la vue matérialisée et les données auxquelles elle fait référence, puis appliquez les techniques permettant d'optimiser l'utilisation de vos vues matérialisées.