Monitorizar vistas materializadas
Puedes monitorizar las vistas materializadas con herramientas que incluyan el esquema de información y la monitorización de registros.
Para crear una lista de vistas materializadas, consulta Listar vistas materializadas.
Vista de esquema de información de vista materializada
Para descubrir vistas materializadas, consulta la INFORMATION_SCHEMA.TABLES
vista. Para obtener las propiedades de una vista materializada, consulta la vista INFORMATION_SCHEMA.TABLE_OPTIONS.
Las vistas materializadas no se muestran en la tabla INFORMATION_SCHEMA.VIEWS vistas.
Monitorizar la actualización automática
En esta sección se describe cómo ver los detalles de actualización de las vistas materializadas.
Ver el estado de la última actualización
Para obtener el estado actual de las vistas materializadas, llama al método tables.get o consulta la vista INFORMATION_SCHEMA.MATERIALIZED_VIEWS.
Por ejemplo:
SELECT table_name, last_refresh_time, refresh_watermark, last_refresh_status FROM `DATASET`.INFORMATION_SCHEMA.MATERIALIZED_VIEWS;
Si el valor de last_refresh_status no es NULL, significa que el último trabajo de actualización automática ha fallado. Las solicitudes de actualización manual no se reflejan aquí. Los cambios en las tablas base pueden invalidar una definición de vista materializada, lo que provoca un error durante la actualización automática. Para obtener más información, consulta Actualizaciones incrementales. Por ejemplo, si se elimina de la tabla base una columna a la que hace referencia la vista materializada, el campo last_refresh_status devuelve un error invalidQuery. Para obtener más información, consulta Mensajes de error.
Mostrar tareas de actualización automática
Para enumerar las tareas de actualización automática de vistas materializadas, llama al jobs.listmétodo. Para obtener detalles sobre las tareas, llama al método jobs.get. También puedes consultar las vistas INFORMATION_SCHEMA.JOBS_BY_* para obtener los detalles de los trabajos. Las tareas de actualización automática contienen el prefijo materialized_view_refresh
en el ID de tarea y
las inicia una cuenta de administrador de BigQuery.
Por ejemplo:
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;
Para monitorizar el coste de los trabajos de actualización y ajustar el intervalo de actualización automática si es necesario, consulta los campos total_bytes_processed y total_slot_ms.
Por ejemplo, si la tasa de ingestión de las tablas base es relativamente pequeña, tiene sentido actualizar la vista con menos frecuencia. Si los datos subyacentes cambian rápidamente, es recomendable actualizar con más frecuencia.
Si las tablas base ingieren datos en momentos predefinidos, como mediante una canalización de extracción, transformación y carga (ETL) nocturna, puedes controlar la programación de mantenimiento de la vista materializada de la siguiente manera:
Realizar una actualización manual, ya sea como parte del flujo de procesamiento de ETL o configurando una consulta programada a determinadas horas del día.
La truncación de tablas, la truncación de particiones, la caducidad de particiones y las declaraciones de lenguaje de manipulación de datos (DML) UPDATE, DELETE y MERGE en una tabla base pueden invalidar sus vistas materializadas. Si la vista materializada está particionada, las particiones modificadas se invalidan. De lo contrario, se invalida toda la vista materializada. Por lo tanto, te recomendamos que agrupes tus instrucciones DML y realices la actualización manual al final de la consulta.
Para obtener más información sobre los precios de las vistas materializadas, consulta los precios de las vistas materializadas.
Monitorizar la actualización de vistas materializadas fallidas
Puedes crear una automatización para monitorizar las actualizaciones fallidas de vistas materializadas y enviar alertas mediante los registros de auditoría de BigQuery en Cloud Logging. BigQuery crea entradas de registro para las tareas de actualización de vistas materializadas, incluidos los errores. Explorador de registros de la Google Cloud consola te ayuda a obtener, ver y analizar entradas de registro. Estas entradas se almacenan en segmentos de registros, que son los contenedores que usa Cloud Logging para almacenar los datos de registro.
Para crear una métrica y una alerta, siga estos pasos:
Consola
Sigue estos pasos para crear una métrica basada en registros que envíe una alerta cuando fallen más de tres actualizaciones de vistas materializadas en un intervalo de 10 minutos.
Crear una métrica basada en registros
- Para configurar el Explorador de registros, sigue las instrucciones que se indican en el artículo Ver y analizar registros.
En Explorador de registros, comprueba que el ajuste Mostrar consulta esté activado.
Cuando usas la consola Google Cloud , el ámbito del proyecto es el proyecto seleccionado en el selector de proyectos de la consola Google Cloud . Para saber cómo añadir más proyectos, consulta el artículo Añadir proyectos a un ámbito de métricas.
En el panel Consulta, pega la siguiente consulta para registrar todos los trabajos de actualización automática de vistas materializadas fallidos en el ámbito de registro del proyecto actual:
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]"
Haz clic en Realizar una consulta.
Haga clic en Acciones y, a continuación, en Crear métrica.
Para crear una alerta basada en el número de errores, en el tipo de métrica, selecciona Contador e introduce un nombre de métrica basada en registros y una descripción para la métrica. El campo Unidades se puede dejar en blanco.
Para definir el filtro de métrica en la sección Selección de filtros, aplica los siguientes ajustes:
Usa el menú Seleccionar proyecto o contenedor de registro para elegir si la métrica cuenta las entradas de registro de tu Google Cloud proyecto o solo las de un contenedor de registro específico.
Crea un filtro que recoja solo las entradas de registro que quieras contar en tu métrica mediante el lenguaje de consultas de registro. También puede usar expresiones regulares para crear los filtros de su métrica.
Para ver qué entradas de registro coinciden con su filtro, haga clic en Vista previa de los registros.
Haz clic en Añadir etiqueta.
Introduce un Nombre de etiqueta y una Descripción únicos para identificar tu métrica. Deja Tipo de etiqueta como Cadena, que es el valor predeterminado.
En Nombre del campo, introduce la siguiente cadena:
protoPayload.metadata.jobChange.job.jobConfig.queryConfig.query
En Expresión regular, introduce la siguiente cadena:
CALL BQ.REFRESH_MATERIALIZED_VIEW\('(.*)'\)
Haz clic en Hecho y, a continuación, en Crear métrica.
Para obtener más información sobre las métricas de contador, consulta Configurar métricas de contador.
Crear una alerta
Sigue estos pasos para crear una política de alertas que especifique las condiciones y envíe un correo cuando se produzcan errores en tres trabajos de actualización de vistas materializadas en un periodo de diez minutos. Esta opción ofrece más flexibilidad a la hora de configurar una política de alertas. Si creas una métrica basada en registros directamente, se enviará una alerta cada vez que se produzca un error de actualización de una vista materializada en los registros.
En la Google Cloud consola, ve a la página Métricas basadas en registros.
Junto a la métrica basada en registros definida por el usuario para las actualizaciones de la vista materializada, haga clic en Más acciones > Crear alerta a partir de la métrica.
En Seleccionar una métrica, elija el nombre de la métrica que especificó anteriormente en Nombre de métrica basada en registros.
En Añadir filtros, añade un filtro adicional a la alerta basándote en la convención de nomenclatura de la vista materializada definida en el campo Expresión regular.
Este paso es útil si necesitas definir un canal de notificaciones independiente para varios equipos que usan el mismo proyecto, pero que están divididos lógicamente por la convención de nomenclatura de la vista materializada. Para obtener más información sobre los criterios de las alertas, consulta Filtrar datos representados en gráficos en "Seleccionar métricas al utilizar el explorador de métricas".
En el ajuste Ventana acumulativa de la sección Transformar datos, especifica un valor superior a 10 minutos para asegurarte de que se contabilicen varias entradas de registro que coincidan con tu filtro y haz clic en Siguiente.
Especifique el Valor del umbral,
3por ejemplo, y, opcionalmente, configure los campos Activador de alerta y Posición del umbral. Haz clic en Siguiente.Elige un canal de notificaciones para las alertas.
Haz clic en Crear política.
Cuando el número de actualizaciones fallidas de vistas materializadas supere el umbral, se enviará una alerta a tu canal de notificaciones.
Terraform
Puedes crear una métrica personalizada, una política de alertas, un canal de notificaciones y un ámbito de registro mediante Terraform. En el siguiente ejemplo de Terraform se usa una consulta para monitorizar y registrar cada tarea de actualización de vistas materializadas fallida.
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\\('(.*)'\\)\")" } }
En el siguiente ejemplo se crea una alerta que se puede usar para enviar un correo cuando el número de trabajos de actualización de vistas materializadas fallidos supere un umbral.
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, ] }
Para ver más ejemplos, consulta lo siguiente:
Para obtener más información sobre las métricas de contador, consulta el artículo Información general sobre las métricas basadas en registros.
Monitorizar el uso de vistas materializadas
Para ver el uso de la vista materializada de un trabajo de consulta, puedes llamar al método jobs.get o consultar la vista INFORMATION_SCHEMA.JOBS_BY_* y ver el campo materialized_view_statistics, que proporciona detalles sobre el uso de las vistas materializadas por la consulta, incluidos los siguientes:
- Indica si se ha usado la vista materializada.
- Si no se ha usado la vista materializada, el motivo por el que se ha rechazado.
Por ejemplo:
SELECT job_id, materialized_view_statistics FROM region-US.INFORMATION_SCHEMA.JOBS_BY_PROJECT WHERE job_id = '<my-query-job-id>';
Para ver el uso de una vista materializada a lo largo del tiempo, consulta las vistas INFORMATION_SCHEMA.JOBS_BY_*.
Por ejemplo, la siguiente consulta devuelve un resumen de los trabajos de consulta recientes que usan la vista materializada de destino:
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;
Solucionar problemas de consultas lentas con vistas materializadas
Si tu consulta usa vistas materializadas y se ejecuta más lentamente de lo esperado, haz lo siguiente:
- Verifica que la consulta esté usando las vistas materializadas que quieres. Para obtener instrucciones detalladas, consulta Monitorizar el uso de vistas materializadas.
- Comprueba la actualización de tu vista materializada.
- Revisa la definición de la vista materializada y los datos a los que hace referencia, y ten en cuenta las técnicas para optimizar el uso de las vistas materializadas.