Monitorare le viste materializzate

Puoi monitorare le viste materializzate utilizzando strumenti che includono lo schema informativo e il monitoraggio dei log.

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:

  1. Disattiva l'aggiornamento automatico.

  2. 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

  1. Per configurare Esplora log, segui le istruzioni riportate in Visualizzare e analizzare i log.
  2. 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.

  3. 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]"
  4. Fai clic su Esegui query.

  5. Fai clic su Azioni e seleziona Crea metrica.

  6. 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.

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

  8. Fai clic su Aggiungi etichetta.

  9. Inserisci un Nome etichetta e una Descrizione univoci per identificare la metrica. Lascia Tipo di etichetta impostato su Stringa, il valore predefinito.

  10. In Nome campo, inserisci la seguente stringa:

    protoPayload.metadata.jobChange.job.jobConfig.queryConfig.query
  11. In Espressione regolare, inserisci la seguente stringa:

    CALL BQ.REFRESH_MATERIALIZED_VIEW\('(.*)'\)
  12. 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.

  1. Nella Google Cloud console, vai alla pagina Metriche basate su log.

    Vai a Metriche basate su log

  2. Accanto alla metrica basata su log definita dall'utente per gli aggiornamenti delle vista materializzata, fai clic su Altre azioni > Crea avviso dalla metrica.

  3. In Seleziona una metrica, seleziona il nome della metrica specificata in precedenza per Nome metrica basata su log.

  4. 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".

    Screenshot che mostra l'interfaccia di aggiunta delle metriche con un filtro della vista materializzata selezionato

  5. 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.

  6. Specifica il Valore soglia, 3 ad esempio, e, se vuoi, configura i campi Attivatore avviso e Posizione soglia. Fai clic su Avanti.

  7. Scegli un canale di notifica per gli avvisi.

  8. 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:

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:

  1. Verifica che le viste materializzate previste vengano effettivamente utilizzate dalla query. Per istruzioni dettagliate, vedi Monitorare vista materializzata materializzate.
  2. Controlla la freschezza della vista materializzata.
  3. Esamina la definizione della vista materializzata e i dati a cui fa riferimento e valuta le tecniche per ottimizzare l'utilizzo della vista materializzata.