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:

  1. Desativar atualização automática.

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

  1. Para configurar o Explorador de registros, siga as instruções em Ver e analisar registros.
  2. 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.

  3. 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]"
  4. Clique em Executar consulta.

  5. Clique em Ações e selecione Criar métrica.

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

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

  8. Clique em Adicionar rótulo.

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

  10. Em Nome do campo, insira a seguinte string:

    protoPayload.metadata.jobChange.job.jobConfig.queryConfig.query
  11. Em Expressão regular, insira a seguinte string:

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

  1. No console do Google Cloud , acesse a página Métricas com base em registros.

    Acessar "Métricas com base em registros"

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

  3. Em Selecionar uma métrica, escolha o nome da métrica especificada anteriormente em Nome da métrica com base em registros.

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

    Captura de tela mostrando a interface de adição de métricas com um filtro de visualização materializada selecionado

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

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

  7. Escolha um canal de notificação para alertas.

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

  1. 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.
  2. Verifique se a visualização materializada está sendo atualizada.
  3. 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.