Monitorare le viste materializzate
Puoi monitorare la vista materializzata utilizzando strumenti che includono lo schema delle informazioni e il monitoraggio dei log.
Per creare un elenco di viste materializzate, vedi Elenca le viste materializzate.
Vista dello schema delle informazioni della vista materializzata
Per scoprire le viste materializzate, esegui una query sulla vista
INFORMATION_SCHEMA.TABLES. Per recuperare le proprietà di una
vista materializzata, esegui una query sulla
vista INFORMATION_SCHEMA.TABLE_OPTIONS.
Le viste materializzate non sono elencate nella tabella INFORMATION_SCHEMA.VIEWS viste.
Monitorare l'aggiornamento automatico
Questa sezione descrive come visualizzare i dettagli di aggiornamento per le viste materializzate.
Visualizzare lo stato dell'ultimo aggiornamento
Per recuperare lo stato attuale delle viste materializzate, chiama il
metodo tables.get o esegui una query sulla
vista INFORMATION_SCHEMA.MATERIALIZED_VIEWS.
Ad esempio:
SELECT table_name, last_refresh_time, refresh_watermark, last_refresh_status FROM `DATASET`.INFORMATION_SCHEMA.MATERIALIZED_VIEWS;
Se il valore di last_refresh_status non è NULL, l'ultimo aggiornamento automatico
non è riuscito. Le richieste di aggiornamento manuale non vengono visualizzate qui. Le modifiche alle
tabelle di base possono invalidare una definizione di vista materializzata, causando un errore
durante l'aggiornamento automatico. Per ulteriori informazioni, vedi Aggiornamenti
incrementali. Ad esempio, se una colonna a cui fa riferimento la vista materializzata viene eliminata dalla tabella di base, il campo last_refresh_status restituisce un errore invalidQuery. Per saperne di più, consulta Messaggi di
errore.
Elenca i job di aggiornamento automatico
Per elencare i job di aggiornamento automatico delle vista materializzata, chiama il metodo jobs.list. Per recuperare i dettagli
dei job, chiama il metodo
jobs.get. Puoi anche eseguire query sulle
visualizzazioni INFORMATION_SCHEMA.JOBS_BY_* per
recuperare i dettagli del job. I job di aggiornamento automatico contengono il prefisso materialized_view_refresh
all'interno dell'ID job e
vengono avviati da un account amministratore BigQuery.
Ad esempio:
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;
Per monitorare il costo dei job di aggiornamento e regolare l'intervallo di aggiornamento automatico, se necessario, visualizza i campi total_bytes_processed e total_slot_ms.
Ad esempio, se la velocità di importazione nelle tabelle di base è relativamente bassa, è opportuno aggiornare la visualizzazione meno spesso. Se i dati sottostanti cambiano rapidamente, è opportuno eseguire l'aggiornamento più spesso.
Se le tabelle di base importano i dati in punti temporali predefiniti, ad esempio utilizzando una pipeline di estrazione, trasformazione e caricamento (ETL) notturna, valuta la possibilità di controllare la pianificazione della manutenzione della vista materializzata nel seguente modo:
Esegui un aggiornamento manuale, nell'ambito della pipeline ETL o configurando una query pianificata in orari specifici della giornata.
Il troncamento delle tabelle, il troncamento delle partizioni, la scadenza delle partizioni e le istruzioni di data manipulation language (DML) UPDATE, DELETE e MERGE su una tabella di base possono invalidare tutte le relative viste materializzate. Se la vista materializzata è partizionata, le partizioni modificate vengono invalidate; in caso contrario, viene invalidata l'intera vista materializzata. Pertanto, ti consigliamo di raggruppare le istruzioni DML ed eseguire l'aggiornamento manuale al termine della query.
Per ulteriori informazioni sui prezzi delle viste materializzate, consulta la sezione Prezzi delle viste materializzate.
Monitorare l'aggiornamento delle viste materializzate non riuscito
Puoi creare un'automazione per monitorare gli aggiornamenti non riusciti delle vista materializzata e inviare avvisi utilizzando gli audit log di BigQuery in Cloud Logging. BigQuery crea voci di log per i job di aggiornamento delle viste materializzate, inclusi gli errori. Esplora log nella console Google Cloud consente di recuperare, visualizzare e analizzare le voci di log. Queste voci vengono archiviate nei bucket di log, che sono i container utilizzati da Cloud Logging per archiviare i dati di log.
Per creare una metrica e un avviso:
Console
Segui questi passaggi per creare una metrica basata sui log che invia un avviso quando più di tre aggiornamenti della vista materializzata non vanno a buon fine in un intervallo di 10 minuti.
Creare una metrica basata su log
- Per configurare Esplora log, segui le istruzioni riportate in Visualizzare e analizzare i log.
In Esplora log, verifica che l'impostazione Mostra query sia attivata.
Quando utilizzi la console Google Cloud , l'ambito del progetto è il singolo progetto selezionato nel selettore di progetti della console Google Cloud . Per scoprire come aggiungere altri progetti, consulta Aggiungere progetti a un ambito delle metriche.
Nel riquadro Query, incolla la seguente query per acquisire tutti i job di aggiornamento automatico delle vista materializzata non riusciti nell'ambito di logging del progetto corrente:
severity: "ERROR" protoPayload.metadata.jobChange.after: "DONE" protoPayload.metadata.jobChange.job.jobConfig.queryConfig.query =~ "CALL BQ.REFRESH_MATERIALIZED_VIEW\('.*'\)" protoPayload.resourceName =~ ".*materialized_view_refresh_[\w]"
Fai clic su Esegui query.
Fai clic su Azioni e poi seleziona Crea metrica.
Per creare un avviso in base al numero di errori, seleziona Contatore per il tipo di metrica e inserisci un nome e una descrizione per la metrica basata su log. Il campo Unità può essere lasciato vuoto.
Per definire il filtro delle metriche nella sezione Selezione filtri, applica le seguenti impostazioni:
Utilizza il menu Seleziona il progetto o il bucket di log per scegliere se la metrica conta le voci di log nel tuo progetto Google Cloud o solo quelle voci di log in un bucket di log specifico.
Crea un filtro che raccolga solo le voci di log che vuoi contare nella metrica utilizzando il linguaggio di query di Logging. Puoi anche utilizzare le espressioni regolari per creare i filtri della metrica.
Per vedere quali voci di log corrispondono al filtro, fai clic su Visualizza l'anteprima dei log.
Fai clic su Aggiungi etichetta.
Inserisci un nome etichetta e una descrizione unici per identificare la metrica. Lascia Tipo di etichetta impostato su Stringa, il valore predefinito.
Per Nome campo, inserisci la seguente stringa:
protoPayload.metadata.jobChange.job.jobConfig.queryConfig.query
In Espressione regolare, inserisci la seguente stringa:
CALL BQ.REFRESH_MATERIALIZED_VIEW\('(.*)'\)
Fai clic su Fine e poi su Crea metrica.
Per saperne di più sulle metriche contatore, consulta Configura le metriche contatore.
Creare un avviso
Completa i seguenti passaggi per creare una norma di avviso che specifichi le condizioni e invii un'email quando tre job di aggiornamento della vista materializzata non vanno a buon fine in un periodo di dieci minuti. Questa opzione offre maggiore flessibilità durante la configurazione di un criterio di avviso. Se crei una metrica basata su log direttamente, viene inviato un avviso ogni volta che nei log è presente un errore di aggiornamento della vista materializzata non riuscito.
Nella console Google Cloud , vai alla pagina Metriche basate su log.
Accanto alla metrica basata su log definita dall'utente per gli aggiornamenti della vista materializzata, fai clic su Altre azioni > Crea avviso da metrica.
In Seleziona una metrica, seleziona il nome della metrica che hai specificato in precedenza per Nome metrica basata su log.
In Aggiungi filtri, aggiungi un filtro aggiuntivo all'avviso in base alla convenzione di denominazione della vista materializzata definita nel campo Espressione regolare.
Questo passaggio è utile se devi definire un canale di notifica separato per più team che utilizzano lo stesso progetto, ma sono suddivisi logicamente in base alla convenzione di denominazione della vista materializzata. Per ulteriori informazioni sui criteri di avviso, consulta Filtra i dati dei grafici nella sezione "Selezionare le metriche durante l'utilizzo di Metrics Explorer".
Nell'impostazione Finestra temporale continua della sezione Trasforma i dati, specifica un valore superiore a 10 minuti per assicurarti che vengano conteggiate più voci di log corrispondenti al filtro e fai clic su Avanti.
Specifica Valore soglia, ad esempio
3, e, se vuoi, configura i campi Attivatore avviso e Posizione soglia. Fai clic su Avanti.Scegli un canale di notifica per gli avvisi.
Fai clic su Crea policy.
Quando il numero di aggiornamenti non riusciti della vista materializzata supera la soglia, il canale di notifica viene avvisato.
Terraform
Puoi creare una metrica personalizzata, un criterio di avviso, un canale di notifica e un ambito di logging utilizzando Terraform. Il seguente esempio di Terraform utilizza una query per monitorare e registrare ogni job di aggiornamento della vista materializzata non riuscito.
resource "google_logging_metric" "failed_mv_refresh_metric" { project = var.project_id name = var.logging_metric_name filter = trimspace(<<EOT severity="ERROR" AND protoPayload.metadata.jobChange.after="DONE" AND protoPayload.metadata.jobChange.job.jobConfig.queryConfig.query=~"CALL BQ.REFRESH_MATERIALIZED_VIEW\('.*'\)" AND protoPayload.resourceName=~".*materialized_view_refresh_[\\w]" EOT ) metric_descriptor { metric_kind = "DELTA" value_type = "INT64" unit = "1" display_name = "Failed Materialized View Refresh Count" labels { key = "materialized_view_name" value_type = "STRING" description = "The name of the materialized view that failed to refresh." } } label_extractors = { "materialized_view_name" = "REGEXP_EXTRACT(protoPayload.metadata.jobChange.job.jobConfig.queryConfig.query, \"CALL BQ\\.REFRESH_MATERIALIZED_VIEW\\('(.*)'\\)\")" } }
Il seguente esempio crea un avviso che può essere utilizzato per inviare un'email quando il numero di job di aggiornamento della vista materializzata non riusciti supera una soglia.
resource "google_monitoring_alert_policy" "failed_mv_refresh_alert" { project = var.project_id display_name = var.alert_policy_display_name combiner = "OR" conditions { display_name = "Condition: Materialized View Refresh Failure Count Exceeds Threshold" condition_threshold { filter = "metric.type=\"logging.googleapis.com/user/${google_logging_metric.failed_mv_refresh_metric.name}\" AND resource.type=\"bigquery_project\"" duration = "${var.alert_duration_seconds}s" comparison = "COMPARISON_GT" threshold_value = var.alert_threshold_count aggregations { alignment_period = "${var.alert_rolling_window_seconds}s" per_series_aligner = "ALIGN_DELTA" cross_series_reducer = "REDUCE_SUM" group_by_fields = [] } trigger { count = 1 } } } notification_channels = [ google_monitoring_notification_channel.email_channel.id, ] }
Per altri esempi, consulta le seguenti risorse:
Per saperne di più sulle metriche di tipo contatore, consulta la panoramica delle metriche basate su log.
Monitorare l'utilizzo vista materializzata
Per visualizzare l'utilizzo della vista materializzata per un job di query, puoi chiamare il
metodo jobs.get o eseguire una query sulla
vista INFORMATION_SCHEMA.JOBS_BY_*
e visualizzare il campo materialized_view_statistics, che fornisce dettagli sull'utilizzo delle viste materializzate da parte della query, inclusi i seguenti dettagli:
- Indica se è stata utilizzata la vista materializzata.
- Se la vista materializzata non è stata utilizzata, il motivo del rifiuto.
Ad esempio:
SELECT job_id, materialized_view_statistics FROM region-US.INFORMATION_SCHEMA.JOBS_BY_PROJECT WHERE job_id = '<my-query-job-id>';
Per visualizzare l'utilizzo di una vista materializzata nel tempo, esegui una query sulle
viste INFORMATION_SCHEMA.JOBS_BY_*.
Ad esempio, la seguente query restituisce un riepilogo dei recenti job di query che utilizzano la vista materializzata di destinazione:
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;
Risolvere i problemi di lentezza delle query con le viste materializzate
Se la query utilizza le viste materializzate e viene eseguita più lentamente del previsto, svolgi le seguenti operazioni:
- Verifica che le viste materializzate previste vengano effettivamente utilizzate dalla query. Per istruzioni dettagliate, consulta Monitorare l'vista materializzata materializzate.
- Controlla l'aggiornamento della visualizzazione materializzata.
- Esamina la definizione della vista materializzata e i dati a cui fa riferimento e valuta tecniche per ottimizzare l'utilizzo della vista materializzata.