Monitorare le viste materializzate
Per creare un elenco di viste materializzate, vedi Elencare le viste materializzate.
Visualizzazione dello schema informativo della vista materializzata
Per scoprire le viste materializzate, esegui una query sulla INFORMATION_SCHEMA.TABLES
vista. Per recuperare le proprietà di una
vista materializzata, esegui una query sulla
INFORMATION_SCHEMA.TABLE_OPTIONS vista.
Le viste materializzate non sono elencate nella INFORMATION_SCHEMA.VIEWS vista
tabella.
Monitorare l'aggiornamento automatico
Questa sezione descrive come visualizzare i dettagli dell'aggiornamento delle viste materializzate.
Visualizzare lo stato dell'ultimo aggiornamento
Per recuperare lo stato attuale delle viste materializzate, chiama il
tables.get metodo o esegui una query sulla
INFORMATION_SCHEMA.MATERIALIZED_VIEWS vista.
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 job di aggiornamento automatico non è riuscito. Le richieste di aggiornamento manuale non vengono visualizzate qui. Le modifiche alle tabelle di base possono invalidare la definizione di una 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 ulteriori informazioni, vedi Messaggi
di errore.
Elencare i job di aggiornamento automatico
Per elencare i job di aggiornamento automatico delle vista materializzata, chiama il jobs.list
metodo. Per recuperare i dettagli dei job, chiama il jobs.get
metodo. Puoi anche eseguire query sulle
INFORMATION_SCHEMA.JOBS_BY_* viste per
recuperare i dettagli dei job. I job di aggiornamento automatico contengono il materialized_view_refresh
prefisso all'interno dell'ID job e
vengono avviati da un account amministratore di 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 modificare 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, è consigliabile aggiornare la vista meno spesso. Se i dati sottostanti cambiano rapidamente, è consigliabile aggiornarli più spesso.
Se le tabelle di base importano i dati in punti temporali predefiniti, ad esempio utilizzando una pipeline ETL (estrazione, trasformazione e caricamento) notturna, valuta la possibilità di controllare la pianificazione di manutenzione della vista materializzata nel seguente modo:
Esegui un aggiornamento manuale, come parte della pipeline ETL o configurando una query pianificata in orari specifici della giornata.
Il troncamento della tabella, il troncamento della partizione, la scadenza della partizione e le istruzioni DML (Data Manipulation Language) UPDATE, DELETE e MERGE su una tabella di base possono invalidare le relative viste materializzate. Se la vista materializzata è partizionata, le partizioni modificate vengono invalidate; in caso contrario, viene invalidata l'intera vista materializzata. Pertanto, potresti voler raggruppare le istruzioni DML ed eseguire l'aggiornamento manuale alla fine della query.
Per ulteriori informazioni sui prezzi delle viste materializzate, vedi Prezzi delle viste materializzate.
Monitorare l'aggiornamento delle viste materializzate non riuscito
Puoi creare un'automazione per monitorare gli aggiornamenti delle vista materializzata non riusciti 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 Google Cloud console ti aiuta a recuperare, visualizzare e analizzare le voci di log. Queste voci vengono archiviate in bucket di log, che sono i container utilizzati da Cloud Logging per archiviare i dati dei log.
Per creare una metrica e un avviso:
Console
Segui questi passaggi per creare una metrica basata su log che invia un avviso quando non riescono più di tre aggiornamenti vista materializzata 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 Google Cloud console, l'ambito del progetto è il singolo progetto selezionato in the Google Cloud selettore di progetti della console. Per scoprire come aggiungere altri progetti, vedi Aggiungere progetti a un ambito delle metriche scope.
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 seleziona Crea metrica.
Per creare un avviso in base al numero di errori, seleziona Contatore come tipo di metrica e inserisci un Nome metrica basata su log e una Descrizione per la metrica. Il campo Unità può essere lasciato vuoto.
Per definire il filtro della metrica nella sezione Selezione filtro , applica le seguenti impostazioni:
Utilizza il menu Seleziona progetto o bucket di log per scegliere se la metrica conta le voci di log nel tuo Google Cloud progetto 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 Anteprima log.
Fai clic su Aggiungi etichetta.
Inserisci un Nome etichetta e una Descrizione univoci per identificare la metrica. Lascia Tipo di etichetta impostato su Stringa, il valore predefinito.
In 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 ulteriori informazioni sulle metriche contatore, vedi Configurare le metriche contatore.
Creare un avviso
Completa i passaggi riportati di seguito per creare un criterio di avviso che specifichi le condizioni e invii un'email quando non riescono tre job di aggiornamento vista materializzata in un periodo di dieci minuti. Questa opzione offre una 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 Google Cloud console, vai alla pagina Metriche basate su log.
Accanto alla metrica basata su log definita dall'utente per gli aggiornamenti delle vista materializzata, fai clic su Altre azioni > Crea avviso dalla metrica.
In Seleziona una metrica, seleziona il nome della metrica specificata 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 Espressione regolare campo.
Questo passaggio è utile se devi definire un canale di notifica separato per più team che utilizzano lo stesso progetto, ma sono logicamente suddivisi dalla convenzione di denominazione vista materializzata. Per ulteriori informazioni sui criteri di avviso, vedi Filtrare i dati dei grafici in "Selezionare le metriche durante l'utilizzo di Metrics Explorer".
Nell'impostazione Finestra mobile della sezione Trasforma i dati , specifica un valore maggiore di 10 minuti per assicurarti che vengano conteggiate più voci di log che corrispondono al filtro e fai clic su Avanti.
Specifica il Valore soglia,
3ad esempio, 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 delle vista materializzata non riusciti supera la soglia, il canale di notifica riceve un avviso.
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 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\\('(.*)'\\)\")" } }
L'esempio seguente crea un avviso che può essere utilizzato per inviare un'email quando il numero di job di aggiornamento delle 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, vedi:
Per ulteriori informazioni sulle metriche contatore, vedi Panoramica delle metriche basate su log.
Monitorare l'utilizzo vista materializzata
Per visualizzare l'utilizzo delle vista materializzata per un job di query, puoi chiamare il
jobs.get metodo o eseguire una query sulla
INFORMATION_SCHEMA.JOBS_BY_* vista,
e visualizzare il materialized_view_statistics campo, che fornisce dettagli sull'
utilizzo delle viste materializzate da parte della query, inclusi i seguenti dettagli:
- Se la vista materializzata è stata utilizzata.
- Se la vista materializzata non è stata utilizzata, il motivo per cui è stata rifiutata.
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
INFORMATION_SCHEMA.JOBS_BY_* viste.
Ad esempio, la seguente query restituisce un riepilogo dei job di query recenti 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:
- Verifica che le viste materializzate previste vengano effettivamente utilizzate dalla query. Per istruzioni dettagliate, vedi Monitorare vista materializzata materializzate.
- Controlla la freschezza della vista materializzata.
- Esamina la definizione della vista materializzata e i dati a cui fa riferimento e valuta le tecniche per ottimizzare l'utilizzo della vista materializzata.