Monitorize vistas materializadas

Pode monitorizar a vista materializada através de ferramentas que incluem o esquema de informações e a monitorização de registos.

Para criar uma lista de vistas materializadas, consulte o artigo Liste as vistas materializadas.

Vista do esquema de informações da vista materializada

Para descobrir vistas materializadas, consulte a tabela INFORMATION_SCHEMA.TABLES view. Para obter as propriedades de uma visualização materializada, consulte a visualização INFORMATION_SCHEMA.TABLE_OPTIONS.

As vistas materializadas não são apresentadas na tabela INFORMATION_SCHEMA.VIEWS vistas.

Atualização automática do monitor

Esta secção descreve como ver os detalhes da atualização das vistas materializadas.

Veja o estado da última atualização

Para obter o estado atual das vistas materializadas, chame o método tables.get ou consulte a vista INFORMATION_SCHEMA.MATERIALIZED_VIEWS.

Por 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, a última tarefa de atualização automática falhou. Os pedidos de atualização manual não são refletidos aqui. As alterações às tabelas base podem invalidar uma definição de vista materializada, o que resulta num erro durante a atualização automática. Para mais informações, consulte o artigo Atualizações incrementais. Por exemplo, se uma coluna referenciada pela vista materializada for removida da tabela base, o campo last_refresh_status devolve um erro invalidQuery. Para mais informações, consulte o artigo Mensagens de erro.

Liste tarefas de atualização automática

Para listar tarefas de atualização automática de vistas materializadas, chame o método jobs.list. Para obter detalhes sobre as tarefas, chame o método jobs.get. Também pode consultar as visualizações de INFORMATION_SCHEMA.JOBS_BY_* para obter detalhes do trabalho. As tarefas de atualização automática contêm o prefixo materialized_view_refresh no ID da tarefa e são iniciadas por uma conta de administrador do BigQuery.

Por 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 monitorizar o custo das tarefas 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 carregamento nas tabelas base for relativamente pequena, faz sentido atualizar a vista com menos frequência. Se os dados subjacentes mudarem rapidamente, faz sentido atualizá-los com maior frequência.

Se as tabelas de base introduzem dados em pontos predefinidos no tempo, como através de um pipeline de extração, transformação e carregamento (ETL) noturno, considere assumir o controlo do horário de manutenção da vista materializada da seguinte forma:

  1. Desative a atualização automática.

  2. Faça uma atualização manual, quer como parte do pipeline de ETL, quer configurando uma consulta agendada em horas específicas do dia.

O truncamento de tabelas, o truncamento de partições, a expiração de partições e as declarações de linguagem de manipulação de dados (DML) UPDATE, DELETE e MERGE numa tabela base podem invalidar as respetivas vistas materializadas. Se a vista materializada for particionada, as partições modificadas são invalidadas; caso contrário, toda a vista materializada é invalidada. Por conseguinte, é recomendável agrupar as suas declarações DML e fazer a atualização manual no final da consulta.

Para mais informações sobre os preços das vistas materializadas, consulte os preços das vistas materializadas.

Monitorize a atualização de vistas materializadas com falhas

Pode criar uma automatização para monitorizar as atualizações de visualizações materializadas com falhas e enviar alertas através dos registos de auditoria do BigQuery no Cloud Logging. O BigQuery cria entradas de registo para tarefas de atualização de vistas materializadas, incluindo falhas. O Explorador de registos na Google Cloud consola ajuda a obter, ver e analisar entradas de registo. Estas entradas são armazenadas em contentores de registo, que são os contentores que o Cloud Logging usa para armazenar os seus dados de registo.

Para criar uma métrica e um alerta, siga estes passos:

Consola

Siga estes passos para criar uma métrica baseada em registos que envia um alerta quando mais de três atualizações da vista materializada falham num intervalo de 10 minutos.

Crie uma métrica baseada em registos

  1. Para configurar o Explorador de registos, siga as instruções em Ver e analisar registos.
  2. No Explorador de registos, confirme que a definição Mostrar consulta está ativada.

    Quando usa a Google Cloud consola, o âmbito do projeto é o projeto único selecionado no seletor de projetos da Google Cloud consola. Para saber como adicionar projetos adicionais, consulte o artigo Adicione projetos a um âmbito de métricas.

  3. No painel Consulta, cole a seguinte consulta para capturar todas as tarefas de atualização da vista materializada automática com falhas no âmbito de registo 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, de seguida, selecione Criar métrica.

  6. Para criar um alerta com base no número de erros, selecione Contador no tipo de métrica e introduza um nome de métrica baseada em registos e uma descrição para a sua métrica. O campo Unidades pode ficar em branco.

  7. Para definir o filtro de métricas na secção Seleção de filtros, aplique as seguintes definições:

    • Use o menu Selecionar projeto ou contentor de registos para escolher se a métrica conta as entradas de registo no seu Google Cloud projeto ou apenas as entradas de registo num contentor de registos específico.

    • Crie um filtro que recolha apenas as entradas do registo que quer contar na sua métrica através da linguagem de consulta de registo. Também pode usar expressões regulares para criar os filtros da sua métrica.

    • Para ver que entradas de registo correspondem ao seu filtro, clique em Pré-visualizar registos.

  8. Clique em Adicionar etiqueta.

  9. Introduza um Nome da etiqueta e uma Descrição únicos para ajudar a identificar a métrica. Deixe o Tipo de etiqueta como String, a predefinição.

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

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

    CALL BQ.REFRESH_MATERIALIZED_VIEW\('(.*)'\)
  12. Clique em Concluído e, de seguida, em Criar métrica.

Para mais informações sobre as métricas de contador, consulte o artigo Configure métricas de contador.

Crie um alerta

Conclua os passos seguintes para criar uma política de alerta que especifique as condições e envie um email quando três tarefas de atualização da vista materializada falharem num período de dez minutos. Esta opção oferece maior flexibilidade ao configurar uma política de alertas. Se criar uma métrica baseada em registos diretamente, é enviado um alerta sempre que um erro de atualização da vista materializada falhada estiver presente nos registos.

  1. Na Google Cloud consola, aceda à página Métricas baseadas em registos.

    Aceda às métricas baseadas em registos

  2. Junto à métrica baseada em registos definida pelo utilizador para atualizações da vista materializada, clique em Mais ações > Criar alerta a partir da métrica.

  3. Em Selecionar uma métrica, selecione o nome da métrica que especificou anteriormente para Nome da métrica baseada em registos.

  4. Em Adicionar filtros, adicione um filtro adicional ao alerta com base na convenção de nomenclatura da vista materializada definida no campo Expressão regular.

    Este passo é útil se precisar de definir um canal de notificação separado para várias equipas que usam o mesmo projeto, mas estão logicamente divididas pela convenção de nomenclatura da vista materializada. Para mais informações sobre os critérios de alerta, consulte Filtrar dados representados em gráficos em "Selecionar métricas quando usar o explorador de métricas".

    Captura de ecrã que mostra a interface de adição de métricas com um filtro de vista materializada selecionado

  5. Na definição Janela contínua da secção Transformar dados, especifique um valor superior a 10 minutos para garantir que são contabilizadas várias entradas de registo que correspondam ao seu filtro e clique em Seguinte.

  6. Especifique o Valor do limite, por exemplo, 3, e, opcionalmente, configure os campos Acionador de alerta e Posição do limite. Clique em Seguinte.

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

  8. Clique em Criar política.

Quando o número de atualizações da vista materializada com falhas excede o limite, o seu canal de notificação é alertado.

Terraform

Pode criar uma métrica personalizada, uma política de alerta, um canal de notificação e um âmbito de registo através do Terraform. O exemplo do Terraform seguinte usa uma consulta para monitorizar e registar cada tarefa de atualização da vista materializada com falhas.

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 seguinte cria um alerta que pode ser usado para enviar um email quando o número de tarefas de atualização da vista materializada com falhas 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 ver exemplos adicionais, consulte o seguinte:

Para mais informações sobre métricas de contador, consulte o artigo Vista geral das métricas baseadas em registos.

Monitorize a utilização da vista materializada

Para ver a utilização da vista materializada para uma tarefa de consulta, pode chamar o método jobs.get ou consultar a vista INFORMATION_SCHEMA.JOBS_BY_* e ver o campo materialized_view_statistics, que fornece detalhes sobre a utilização de vistas materializadas pela consulta, incluindo os seguintes detalhes:

Por exemplo:

SELECT
  job_id, materialized_view_statistics
FROM
  region-US.INFORMATION_SCHEMA.JOBS_BY_PROJECT
WHERE
  job_id = '<my-query-job-id>';

Para ver a utilização de uma vista materializada ao longo do tempo, consulte as vistas INFORMATION_SCHEMA.JOBS_BY_*.

Por exemplo, a seguinte consulta devolve um resumo dos trabalhos de consulta recentes que usam a 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;

Resolva problemas de consultas lentas com vistas materializadas

Se a sua consulta usar vistas materializadas e estiver a ser executada mais lentamente do que o esperado, faça o seguinte:

  1. Verifique se as vistas materializadas pretendidas estão a ser usadas pela consulta. Para instruções detalhadas, consulte o artigo Monitorize a utilização da vista materializada.
  2. Verifique a atualidade da vista materializada.
  3. Reveja a definição da vista materializada e os dados a que faz referência e considere técnicas para otimizar a utilização da vista materializada.