Faça a gestão das vistas materializadas

Este documento descreve como gerir vistas materializadas no BigQuery.

A gestão de vistas materializadas do BigQuery inclui as seguintes operações:

Para mais informações sobre as vistas materializadas, consulte o seguinte:

Antes de começar

Conceda funções de gestão de identidade e acesso (IAM) que dão aos utilizadores as autorizações necessárias para realizar cada tarefa neste documento. As autorizações necessárias para realizar uma tarefa (se existirem) estão listadas na secção "Autorizações necessárias" da tarefa.

Altere vistas materializadas

Pode alterar uma vista materializada através da Trusted Cloud consola ou da ferramenta de linha de comandos bq, usando a linguagem de definição de dados (DDL) com ALTER MATERIALIZED VIEW e SET OPTIONS. Para ver uma lista de opções de vistas materializadas, consulte materialized_view_set_options_list.

O exemplo seguinte mostra como definir enable_refresh como true. Ajuste conforme necessário para o seu exemplo de utilização.

Autorizações necessárias

Para alterar as vistas materializadas, precisa das autorizações de IAM bigquery.tables.get e bigquery.tables.update.

Cada uma das seguintes funções de IAM predefinidas inclui as autorizações de que precisa para alterar uma vista materializada:

  • bigquery.dataEditor
  • bigquery.dataOwner
  • bigquery.admin

Para mais informações sobre a gestão de identidades e acessos (IAM) do BigQuery, consulte o artigo Funções e autorizações predefinidas.

SQL

Para alterar uma vista materializada, use a ALTER MATERIALIZED VIEW SET OPTIONS declaração DDL:

  1. Na Trusted Cloud consola, aceda à página BigQuery.

    Aceda ao BigQuery

  2. No editor de consultas, introduza a seguinte declaração:

    ALTER MATERIALIZED VIEW PROJECT.DATASET.MATERIALIZED_VIEW
    SET OPTIONS (enable_refresh = true);

    Substitua o seguinte:

    • PROJECT: o nome do projeto que contém a vista materializada
    • DATASET: o nome do conjunto de dados que contém a visualização materializada
    • MATERIALIZED_VIEW: o nome da vista materializada que quer alterar

  3. Clique em Executar.

Para mais informações sobre como executar consultas, consulte o artigo Execute uma consulta interativa.

bq

Execute o comando bq update:

bq update \
--enable_refresh=true \
--refresh_interval_ms= \
PROJECT.DATASET.MATERIALIZED_VIEW

Java

Antes de experimentar este exemplo, siga as Javainstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Java BigQuery documentação de referência.

Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN environment como s3nsapis.fr.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.MaterializedViewDefinition;
import com.google.cloud.bigquery.Table;
import com.google.cloud.bigquery.TableId;

// Sample to update materialized view
public class UpdateMaterializedView {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String materializedViewName = "MY_MATERIALIZED_VIEW_NAME";
    updateMaterializedView(datasetName, materializedViewName);
  }

  public static void updateMaterializedView(String datasetName, String materializedViewName) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      TableId tableId = TableId.of(datasetName, materializedViewName);

      // Get existing materialized view
      Table table = bigquery.getTable(tableId);
      MaterializedViewDefinition materializedViewDefinition = table.getDefinition();
      // Update materialized view
      materializedViewDefinition
          .toBuilder()
          .setEnableRefresh(true)
          .setRefreshIntervalMs(1000L)
          .build();
      table.toBuilder().setDefinition(materializedViewDefinition).build().update();
      System.out.println("Materialized view updated successfully");
    } catch (BigQueryException e) {
      System.out.println("Materialized view was not updated. \n" + e.toString());
    }
  }
}

Liste as vistas materializadas

Pode listar as vistas materializadas através da Trusted Cloud consola, da ferramenta de linha de comandos bq ou da API BigQuery.

Autorizações necessárias

Para listar as vistas materializadas num conjunto de dados, precisa da autorização bigquery.tables.list IAM.

Cada uma das seguintes funções de IAM predefinidas inclui as autorizações de que precisa para listar vistas materializadas num conjunto de dados:

  • roles/bigquery.user
  • roles/bigquery.metadataViewer
  • roles/bigquery.dataViewer
  • roles/bigquery.dataOwner
  • roles/bigquery.dataEditor
  • roles/bigquery.admin

Para mais informações sobre as funções e as autorizações do IAM no IAM, consulte o artigo Funções e autorizações predefinidas.

O processo para listar vistas materializadas é idêntico ao processo para listar tabelas. Para listar as vistas materializadas num conjunto de dados:

Consola

  1. No painel Explorador, expanda o projeto e selecione um conjunto de dados.

  2. Percorra a lista para ver as tabelas no conjunto de dados. As tabelas, as vistas e as vistas materializadas são identificadas por ícones diferentes.

    Ícones de tabelas e vistas

bq

Emita o comando bq ls. A flag --format pode ser usada para controlar o resultado. Se estiver a listar vistas materializadas num projeto que não seja o seu projeto predefinido, adicione o ID do projeto ao conjunto de dados no seguinte formato: project_id:dataset.

bq ls --format=pretty project_id:dataset

Onde:

  • project_id é o ID do seu projeto.
  • dataset é o nome do conjunto de dados.

Quando executa o comando, o campo Type apresenta o tipo de tabela. Por exemplo:

+-------------------------+--------------------+----------------------+-------------------+
|         tableId         | Type               |        Labels        | Time Partitioning |
+-------------------------+--------------------+----------------------+-------------------+
| mytable                 | TABLE              | department:shipping  |                   |
| mymatview               | MATERIALIZED_VIEW  |                      |                   |
+-------------------------+--------------------+----------------------+-------------------+

Exemplos:

Introduza o seguinte comando para listar as vistas materializadas no conjunto de dados mydataset no seu projeto predefinido.

bq ls --format=pretty mydataset

Introduza o seguinte comando para listar as vistas materializadas no conjunto de dados mydataset em myotherproject.

bq ls --format=pretty myotherproject:mydataset

API

Para listar as vistas materializadas através da API, chame o método tables.list.

Go

Antes de experimentar este exemplo, siga as Goinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Go BigQuery documentação de referência.

Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN environment como s3nsapis.fr.

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/bigquery"
	"google.golang.org/api/iterator"
)

// listTables demonstrates iterating through the collection of tables in a given dataset.
func listTables(w io.Writer, projectID, datasetID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// tableID := "mytable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	ts := client.Dataset(datasetID).Tables(ctx)
	for {
		t, err := ts.Next()
		if err == iterator.Done {
			break
		}
		if err != nil {
			return err
		}
		fmt.Fprintf(w, "Table: %q\n", t.TableID)
	}
	return nil
}

Python

Antes de experimentar este exemplo, siga as Pythoninstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Python BigQuery documentação de referência.

Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN environment como s3nsapis.fr.


from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()

# TODO(developer): Set dataset_id to the ID of the dataset that contains
#                  the tables you are listing.
# dataset_id = 'your-project.your_dataset'

tables = client.list_tables(dataset_id)  # Make an API request.

print("Tables contained in '{}':".format(dataset_id))
for table in tables:
    print("{}.{}.{}".format(table.project, table.dataset_id, table.table_id))

Obtenha informações sobre vistas materializadas

Pode obter informações sobre uma vista materializada através de SQL, da ferramenta de linha de comandos bq ou da API BigQuery.

Autorizações necessárias

Para consultar informações sobre uma vista materializada, precisa das seguintes autorizações de gestão de identidade e acesso (IAM):

  • bigquery.tables.get
  • bigquery.tables.list
  • bigquery.routines.get
  • bigquery.routines.list

Cada uma das seguintes funções de IAM predefinidas inclui as autorizações anteriores:

  • roles/bigquery.metadataViewer
  • roles/bigquery.dataViewer
  • roles/bigquery.admin

Para mais informações sobre as autorizações do BigQuery, consulte o artigo Controlo de acesso com a IAM.

Para obter informações sobre uma vista materializada, incluindo quaisquer réplicas de vistas materializadas dependentes:

SQL

Para obter informações sobre as vistas materializadas, consulte a vista INFORMATION_SCHEMA.TABLES:

  1. Na Trusted Cloud consola, aceda à página BigQuery.

    Aceda ao BigQuery

  2. No editor de consultas, introduza a seguinte declaração:

    SELECT * FROM PROJECT_ID.DATASET_ID.INFORMATION_SCHEMA.TABLES
    WHERE table_type = 'MATERIALIZED VIEW';

    Substitua o seguinte:

    • PROJECT_ID: o nome do projeto que contém as vistas materializadas
    • DATASET_ID: o nome do conjunto de dados que contém as visualizações materializadas

  3. Clique em Executar.

Para mais informações sobre como executar consultas, consulte o artigo Execute uma consulta interativa.

bq

Use o comando bq show:

bq show --project=project_id --format=prettyjson dataset.materialized_view

Substitua o seguinte:

  • project_id: o ID do projeto. Só precisa de incluir esta flag para receber informações sobre uma vista materializada num projeto diferente do projeto predefinido.
  • dataset: o nome do conjunto de dados que contém a vista materializada.
  • materialized_view: o nome da vista materializada sobre a qual quer obter informações.

Exemplo:

Introduza o seguinte comando para mostrar informações sobre a vista materializada my_mv no conjunto de dados report_views no projeto myproject.

bq show --project=myproject --format=prettyjson report_views.my_mv

API

Para obter informações sobre a vista materializada através da API, chame o método tables.get.

Elimine vistas materializadas

Pode eliminar uma vista materializada através da Trusted Cloud consola, da ferramenta de linha de comandos bq ou da API.

A eliminação de uma vista materializada também elimina todas as autorizações associadas a esta vista materializada. Quando recria uma visualização materializada eliminada, também tem de reconfigurar manualmente todas as autorizações de acesso associadas anteriormente.

Autorizações necessárias

Para eliminar vistas materializadas, precisa da autorização de IAM.bigquery.tables.delete

Cada uma das seguintes funções de IAM predefinidas inclui as autorizações de que precisa para eliminar uma vista materializada:

  • bigquery.dataEditor
  • bigquery.dataOwner
  • bigquery.admin

Para mais informações sobre a gestão de identidades e acessos (IAM) do BigQuery, consulte o artigo Funções e autorizações predefinidas.

SQL

Para eliminar uma vista materializada, use a declaração DDL DROP MATERIALIZED VIEW:

  1. Na Trusted Cloud consola, aceda à página BigQuery.

    Aceda ao BigQuery

  2. No editor de consultas, introduza a seguinte declaração:

    DROP MATERIALIZED VIEW PROJECT.DATASET.MATERIALIZED_VIEW;

    Substitua o seguinte:

    • PROJECT: o nome do projeto que contém a vista materializada
    • DATASET: o nome do conjunto de dados que contém a visualização materializada
    • MATERIALIZED_VIEW: o nome da vista materializada que quer eliminar

  3. Clique em Executar.

Para mais informações sobre como executar consultas, consulte o artigo Execute uma consulta interativa.

bq

Use o comando bq rm para eliminar a vista materializada.

API

Chame o método tables.delete e especifique valores para os projectId, datasetId e tableId parâmetros:

  • Atribua o parâmetro projectId ao ID do seu projeto.
  • Atribua o parâmetro datasetId ao ID do conjunto de dados.
  • Atribua o parâmetro tableId ao ID da tabela da vista materializada que está a eliminar.

Java

Antes de experimentar este exemplo, siga as Javainstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Java BigQuery documentação de referência.

Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN environment como s3nsapis.fr.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.TableId;

// Sample to delete materialized view
public class DeleteMaterializedView {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String materializedViewName = "MY_MATERIALIZED_VIEW_NAME";
    deleteMaterializedView(datasetName, materializedViewName);
  }

  public static void deleteMaterializedView(String datasetName, String materializedViewName) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      TableId tableId = TableId.of(datasetName, materializedViewName);

      boolean success = bigquery.delete(tableId);
      if (success) {
        System.out.println("Materialized view deleted successfully");
      } else {
        System.out.println("Materialized view was not found");
      }
    } catch (BigQueryException e) {
      System.out.println("Materialized view was not found. \n" + e.toString());
    }
  }
}

Atualize vistas materializadas

A atualização de uma vista materializada atualiza os dados em cache da vista para refletir o estado atual das respetivas tabelas base.

Quando consulta uma vista materializada, o BigQuery devolve resultados de dados da vista materializada em cache e dados obtidos da tabela base. Sempre que possível, o BigQuery lê apenas as alterações desde a última vez que a vista foi atualizada. Embora os dados transmitidos recentemente possam não ser incluídos durante uma atualização da vista materializada, as consultas leem sempre os dados transmitidos, independentemente de ser usada uma vista materializada.

A devolução de resultados da consulta diretamente da tabela base incorre num custo de computação mais elevado do que a devolução de resultados de dados da vista materializada em cache. A atualização regular dos dados em cache da vista materializada reduz a quantidade de dados devolvidos diretamente da tabela base, o que reduz o custo de computação.

Esta secção descreve como fazer o seguinte:

Atualização automática

Pode ativar ou desativar a atualização automática em qualquer altura. A tarefa de atualização automática é realizada pela conta de serviço bigquery-adminbot@s3ns-system.system.gserviceaccount.com e aparece no histórico de tarefas do projeto de vista materializada.

Por predefinição, os dados em cache numa vista materializada são atualizados automaticamente a partir da tabela base no prazo de 5 a 30 minutos após uma alteração à tabela base, por exemplo, inserções ou eliminações de linhas.

Pode definir o limite de frequência de atualização para gerir a frequência das atualizações automáticas dos dados em cache e, assim, gerir os custos e o desempenho das consultas das vistas materializadas.

Ative e desative a atualização automática

Para desativar a atualização automática quando cria uma vista materializada, defina enable_refresh como false.

CREATE MATERIALIZED VIEW PROJECT.DATASET.MATERIALIZED_VIEW
PARTITION BY RANGE_BUCKET(column_name, buckets)
OPTIONS (enable_refresh = false)
AS SELECT ...

Para uma vista materializada existente, pode modificar o valor enable_refresh usando ALTER MATERIALIZED VIEW.

ALTER MATERIALIZED VIEW PROJECT.DATASET.MATERIALIZED_VIEW
SET OPTIONS (enable_refresh = true);

Defina o limite de frequência

Pode configurar um limite de frequência para a execução da atualização automática. Por predefinição, as vistas materializadas são atualizadas com uma frequência máxima de 30 minutos.

O limite de frequência de atualização pode ser alterado em qualquer altura.

Para definir um limite de frequência de atualização quando cria uma vista materializada, defina refresh_interval_minutes no DDL (ou refresh_interval_ms na API e na ferramenta de linha de comandos bq) para o valor pretendido.

CREATE MATERIALIZED VIEW PROJECT.DATASET.MATERIALIZED_VIEW
OPTIONS (enable_refresh = true, refresh_interval_minutes = 60)
AS SELECT ...

Da mesma forma, pode definir o limite de frequência quando modifica uma vista materializada. Este exemplo pressupõe que já ativou a atualização automática e que apenas quer alterar o limite de frequência:

ALTER MATERIALIZED VIEW PROJECT.DATASET.MATERIALIZED_VIEW
SET OPTIONS (refresh_interval_minutes = 60);

O limite de frequência de atualização mínimo é de 1 minuto. O limite de frequência de atualização máximo é de 7 dias.

Pode fazer uma atualização manual de uma vista materializada em qualquer altura, e a respetiva sincronização não está sujeita ao limite de frequência.

Dentro do possível

A atualização automática é realizada com base no melhor esforço. O BigQuery tenta iniciar uma atualização no prazo de 5 minutos após uma alteração na tabela base (se a atualização anterior tiver sido feita há mais de 30 minutos), mas não garante que a atualização seja iniciada nesse momento nem quando será concluída.

A atualização automática é tratada de forma semelhante a uma consulta com prioridade em lote. Se o projeto da vista materializada não tiver capacidade no momento, a atualização é atrasada. Se o projeto contiver muitas vistas cuja atualização se revelar dispendiosa, cada vista individual pode ter um atraso significativo relativamente às respetivas tabelas base.

Atualização manual

Pode atualizar manualmente uma vista materializada em qualquer altura.

Autorizações necessárias

Para atualizar manualmente as vistas materializadas, precisa das autorizações bigquery.tables.getData, bigquery.tables.update e bigquery.tables.updateData do IAM.

Cada uma das seguintes funções de IAM predefinidas inclui as autorizações de que precisa para atualizar manualmente uma vista materializada:

  • bigquery.dataEditor
  • bigquery.dataOwner
  • bigquery.admin

Para mais informações sobre a gestão de identidades e acessos (IAM) do BigQuery, consulte o artigo Funções e autorizações predefinidas.

Para atualizar os dados na vista materializada, chame o procedimento do sistema BQ.REFRESH_MATERIALIZED_VIEW. Quando este procedimento é chamado, o BigQuery identifica as alterações que ocorreram nas tabelas base e aplica essas alterações à vista materializada. A consulta a executar BQ.REFRESH_MATERIALIZED_VIEW termina quando a atualização estiver concluída.

CALL BQ.REFRESH_MATERIALIZED_VIEW('PROJECT.DATASET.MATERIALIZED_VIEW');

Monitorize vistas materializadas

Pode obter informações sobre vistas materializadas e tarefas de atualização de vistas materializadas através da API BigQuery. Para mais informações, consulte o artigo Monitorize vistas materializadas.