Monitorar visualizações materializadas
É possível monitorar uma visualização materializada usando ferramentas que incluem esquema de informações e monitoramento de registros.
Para criar uma lista de visualizações materializadas, consulte Listar visualizações materializadas.
Visualização do esquema de informações da visualização materializada
Para descobrir visualizações materializadas, consulte a visualização INFORMATION_SCHEMA.TABLES. Para recuperar as properties de uma visualização materializada, consulte a visualização INFORMATION_SCHEMA.TABLE_OPTIONS.
As visualizações materializadas não estão listadas na tabela de visualizações INFORMATION_SCHEMA.VIEWS.
Monitorar atualização automática
Nesta seção, mostramos como visualizar detalhes de atualização para visualizações materializadas.
Ver último status de atualização
Para recuperar o status atual de visualizações materializadas, chame o método tables.get ou consulte a visualização INFORMATION_SCHEMA.MATERIALIZED_VIEWS.
Exemplo:
SELECT table_name, last_refresh_time, refresh_watermark, last_refresh_status FROM `DATASET`.INFORMATION_SCHEMA.MATERIALIZED_VIEWS;
Se o valor de last_refresh_status não for NULL, o último job de atualização automática falhou. As solicitações de atualização manual não são refletidas aqui. As alterações nas tabelas base podem invalidar uma definição de visualização materializada, resultando em um erro durante a atualização automática. Veja mais informações em Atualizações incrementais. Por exemplo, se uma coluna referenciada pela visualização materializada for removida da tabela base, o campo last_refresh_status vai retornar um erro invalidQuery. Para mais informações, consulte Mensagens de erro.
Listar jobs de atualização automática
Para listar jobs de atualização automática da visualização materializada, chame o método jobs.list. Para recuperar detalhes sobre os jobs, chame o método jobs.get. Também é possível consultar as visualizações INFORMATION_SCHEMA.JOBS_BY_* para recuperar detalhes do job. Os jobs de atualização automática contêm o prefixo materialized_view_refresh no código da tarefa e são iniciados por uma conta de administrador do BigQuery.
Exemplo:
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 monitorar o custo dos jobs de atualização e ajustar o intervalo de atualização automática, se necessário, veja os campos total_bytes_processed e total_slot_ms.
Por exemplo, se a taxa de ingestão na tabela base for relativamente pequena, convém atualizar a visualização com menos frequência. Se os dados subjacentes forem alterados rapidamente, convém atualizar com mais frequência.
Se as tabelas base ingerirem dados em pontos predefinidos no tempo, por exemplo, usando um pipeline noturno de extração, transformação e carregamento (ETL, na sigla em inglês), considere assumir o controle do cronograma de manutenção da visualização materializada da seguinte maneira:
Executar uma atualização manual como parte do pipeline de ETL ou configurar uma consulta programada em horários específicos do dia.
O truncamento de tabela, o truncamento de partição, a expiração da partição e as instruções de linguagem de manipulação de dados (DML, na sigla em inglês) UPDATE, DELETE e MERGE em uma tabela base podem invalidar as visualizações materializadas. Se a visualização materializada for particionada, as partições modificadas serão invalidadas. Caso contrário, toda a visualização materializada será invalidada. Por isso, convém agrupar suas instruções DML e realizar a atualização manual no final da consulta.
Para saber mais sobre preços de visualizações materializadas, consulte preços de visualizações materializadas.
Monitorar falhas na atualização de visualizações materializadas
É possível criar uma automação para monitorar atualizações de visualizações materializadas com falha e enviar alertas usando registros de auditoria do BigQuery no Cloud Logging. O BigQuery cria entradas de registro para jobs de atualização de visualizações materializadas, incluindo falhas. A Análise de registros no console do Google Cloud ajuda a recuperar, visualizar e analisar entradas de registro. Essas entradas são armazenadas em buckets de registros, que são os contêineres usados pelo Cloud Logging para armazenar seus dados de registros.
Para criar uma métrica e um alerta, siga estas etapas:
Console
Siga estas etapas para criar uma métrica com base em registros que envia um alerta quando mais de três atualizações de visualização materializada falham em um intervalo de 10 minutos.
Criar uma métrica com base em registros
- Para configurar o Explorador de registros, siga as instruções em Ver e analisar registros.
Na Análise de registros, confirme se a configuração Mostrar consulta está ativada.
Ao usar o console Google Cloud , o escopo do projeto é o único projeto selecionado no seletor de projetos do console Google Cloud . Para saber como adicionar outros projetos, consulte Adicionar projetos a um escopo de métricas.
No painel Consulta, cole a consulta a seguir para capturar todos os jobs de atualização automática de visualização materializada com falha no escopo de geração de registros do projeto atual:
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]"
Clique em Executar consulta.
Clique em Ações e selecione Criar métrica.
Para criar um alerta com base no número de erros, selecione Contador como tipo de métrica e insira um Nome da métrica com base em registros e uma Descrição para sua métrica. O campo Unidades pode ser deixado em branco.
Para definir o filtro de métricas na seção Seleção de filtro, aplique as seguintes configurações:
Use o menu Selecionar projeto ou bucket de registros para escolher se a métrica conta as entradas de registro no seu projeto Google Cloud ou apenas as entradas em um bucket de registros específico.
Crie um filtro que colete apenas as entradas de registros que você quer contar na métrica usando a linguagem de consulta de geração de registros. Também é possível usar expressões regulares para criar os filtros da métrica.
Para ver quais entradas de registro correspondem ao filtro, clique em Visualizar registros.
Clique em Adicionar rótulo.
Insira um Nome do rótulo e uma Descrição exclusivos para ajudar a identificar sua métrica. Deixe Tipo de rótulo como String, que é o padrão.
Em Nome do campo, insira a seguinte string:
protoPayload.metadata.jobChange.job.jobConfig.queryConfig.query
Em Expressão regular, insira a seguinte string:
CALL BQ.REFRESH_MATERIALIZED_VIEW\('(.*)'\)
Clique em Concluído e em Criar métrica.
Para mais informações sobre métricas de contador, consulte Configurar métricas de contador.
Crie um alerta
Siga estas etapas para criar uma política de alertas que especifica as condições e envia um e-mail quando três jobs de atualização de visualização materializada falham em um período de 10 minutos. Essa opção oferece mais flexibilidade ao configurar uma política de alertas. Se você criar uma métrica com base em registros diretamente, um alerta será enviado sempre que um erro de atualização de visualização materializada com falha estiver presente nos registros.
No console do Google Cloud , acesse a página Métricas com base em registros.
Ao lado da métrica com base em registros definida pelo usuário para atualizações de visualização materializada, clique em Mais ações > Criar alerta com base na métrica.
Em Selecionar uma métrica, escolha o nome da métrica especificada anteriormente em Nome da métrica com base em registros.
Em Adicionar filtros, adicione outro filtro ao alerta com base na convenção de nomenclatura da visualização materializada definida no campo Expressão regular.
Essa etapa é útil se você precisar definir um canal de notificação separado para várias equipes que usam o mesmo projeto, mas são divididas logicamente pela convenção de nomenclatura da visualização materializada. Para mais informações sobre critérios de alerta, consulte Filtrar dados com gráfico em "Selecionar métricas ao usar o Metrics Explorer".
Na configuração Janela contínua da seção Transformar dados, especifique um valor maior que 10 minutos para garantir que várias entradas de registro correspondentes ao seu filtro sejam contadas e clique em Próxima.
Especifique o Valor do limite,
3, por exemplo, e, se quiser, configure os campos Gatilho de alerta e Posição do limite. Clique em Próxima.Escolha um canal de notificação para alertas.
Clique em Criar política.
Quando o número de atualizações com falha da visualização materializada excede o limite, seu canal de notificação é alertado.
Terraform
É possível criar uma métrica personalizada, uma política de alertas, um canal de notificação e um escopo de geração de registros usando o Terraform. O exemplo do Terraform a seguir usa uma consulta para monitorar e registrar cada job de atualização de visualização materializada com falha.
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\\('(.*)'\\)\")" } }
O exemplo a seguir cria um alerta que pode ser usado para enviar um e-mail quando o número de jobs de atualização de visualização materializada com falha excede um limite.
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 mais exemplos, consulte:
Para mais informações sobre métricas de contador, consulte Visão geral das métricas com base em registros.
Monitorar uso de visualizações materializadas
Para ver o uso da visualização materializada de um job de consulta, chame o método jobs.get ou consulte a visualização INFORMATION_SCHEMA.JOBS_BY_* e confira o campo materialized_view_statistics, que mostra detalhes sobre o uso de visualizações materializadas pela consulta, incluindo:
- Se a visualização materializada foi usada.
- Se a visualização materializada não foi usada, o motivo da rejeição.
Exemplo:
SELECT job_id, materialized_view_statistics FROM region-US.INFORMATION_SCHEMA.JOBS_BY_PROJECT WHERE job_id = '<my-query-job-id>';
Para ver o uso de uma visualização materializada ao longo do tempo, consulte as visualizações INFORMATION_SCHEMA.JOBS_BY_*.
Por exemplo, a consulta a seguir retorna um resumo dos jobs de consulta recentes que usam a visualização 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;
Resolver problemas de consultas lentas com visualizações materializadas
Se a consulta usar visualizações materializadas e estiver sendo executada mais lentamente do que o esperado, faça o seguinte:
- Verifique se as visualizações materializadas pretendidas estão sendo usadas pela consulta. Para instruções detalhadas, consulte Monitorar o uso de visualizações materializadas.
- Verifique se a visualização materializada está sendo atualizada.
- Revise a definição de visualização materializada e os dados a que ela faz referência e considere as técnicas para otimizar o uso da visualização materializada.