Gestisci le viste materializzate

Questo documento descrive come gestire le viste materializzate in in BigQuery.

La gestione delle viste materializzate in BigQuery include quanto segue: operations:

Per ulteriori informazioni sulle viste materializzate, consulta quanto segue:

Prima di iniziare

Concede ruoli IAM (Identity and Access Management) che concedono agli utenti le autorizzazioni necessarie per eseguire ciascuna attività in questo documento. Le autorizzazioni necessarie per eseguire sono elencate nella sezione "Autorizzazioni obbligatorie" dell'attività.

Modifica viste materializzate

Puoi modificare una vista materializzata tramite la console Google Cloud oppure a riga di comando bq, utilizzando il Data Definition Language (DDL) con ALTER MATERIALIZED VIEW e SET OPTIONS. Per un elenco delle opzioni della vista materializzata, vedi materialized_view_set_options_list.

Di seguito è riportato un esempio che imposta enable_refresh su true. Modifica come necessari per il tuo caso d'uso.

Autorizzazioni obbligatorie

Per modificare le viste materializzate, sono necessari i bigquery.tables.get e bigquery.tables.update autorizzazioni IAM.

Ciascuno dei seguenti ruoli IAM predefiniti include autorizzazioni necessarie per modificare una vista materializzata:

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

Per ulteriori informazioni Identity and Access Management (IAM) per BigQuery), consulta Ruoli e autorizzazioni predefiniti.

SQL

Per modificare una vista materializzata, utilizza il metodo ALTER MATERIALIZED VIEW SET OPTIONS Istruzione DDL:

  1. Nella console Google Cloud, vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nell'editor query, inserisci la seguente istruzione:

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

    Sostituisci quanto segue:

    • PROJECT: il nome del progetto che contiene la vista materializzata
    • DATASET: il nome del set di dati che contiene la vista materializzata
    • MATERIALIZED_VIEW: il nome del vista materializzata da modificare

  3. Fai clic su Esegui.

Per ulteriori informazioni su come eseguire le query, vedi Eseguire una query interattiva.

bq

Esegui il comando bq update:

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

Java

Prima di provare questo esempio, segui le istruzioni per la configurazione di Java nel Guida rapida di BigQuery con librerie client. Per ulteriori informazioni, consulta API Java BigQuery documentazione di riferimento.

Per eseguire l'autenticazione su BigQuery, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.

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());
    }
  }
}

Elenca viste materializzate

Puoi elencare le viste materializzate tramite la console Google Cloud, a riga di comando bq o l'API BigQuery.

Autorizzazioni obbligatorie

Per elencare le viste materializzate in un set di dati, è necessario bigquery.tables.list Autorizzazione IAM.

Ciascuno dei seguenti ruoli IAM predefiniti include autorizzazioni necessarie per elencare le viste materializzate in un set di dati:

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

Per ulteriori informazioni su ruoli e autorizzazioni IAM in IAM, vedi Ruoli e autorizzazioni predefiniti.

La procedura per elencare le viste materializzate è identica a quella per elencare le viste materializzate tabelle. Per elencare le viste materializzate in un set di dati:

Console

  1. Nel riquadro Spazio di esplorazione, espandi il progetto e seleziona un set di dati.

  2. Scorri l'elenco per visualizzare le tabelle nel set di dati. tabelle e le viste materializzate sono identificate da icone diverse.

    Icone di tabella e visualizzazione

bq

Esegui il comando bq ls. Il flag --format può essere utilizzato per controllare come output. Se stai elencando le viste materializzate in un progetto diverso da quello predefinito, aggiungi l'ID progetto al set di dati nel seguente formato: project_id:dataset.

bq ls --format=pretty project_id:dataset

Dove:

  • project_id è l'ID progetto.
  • dataset è il nome del set di dati.

Quando esegui il comando, nel campo Type viene visualizzato il tipo di tabella. Ad esempio:

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

Esempi:

Inserisci il seguente comando per elencare le viste materializzate nel set di dati mydataset nel progetto predefinito.

bq ls --format=pretty mydataset

Inserisci il seguente comando per elencare le viste materializzate nel set di dati mydataset a myotherproject.

bq ls --format=pretty myotherproject:mydataset

API

Per elencare le viste materializzate utilizzando l'API, chiama il metodo tables.list.

Vai

Prima di provare questo esempio, segui le istruzioni per la configurazione di Go nel Guida rapida di BigQuery con librerie client. Per ulteriori informazioni, consulta API Go BigQuery documentazione di riferimento.

Per eseguire l'autenticazione su BigQuery, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.

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

Prima di provare questo esempio, segui le istruzioni per la configurazione di Python nel Guida rapida di BigQuery con librerie client. Per ulteriori informazioni, consulta API Python BigQuery documentazione di riferimento.

Per eseguire l'autenticazione su BigQuery, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.


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

Ottieni informazioni sulle viste materializzate

Puoi ottenere informazioni su una vista materializzata utilizzando SQL, lo strumento a riga di comando bq, o l'API BigQuery.

Autorizzazioni obbligatorie

Per eseguire query sulle informazioni relative a una vista materializzata, è necessario quanto segue Autorizzazioni IAM (Identity and Access Management):

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

Ciascuno dei seguenti ruoli IAM predefiniti include autorizzazioni:

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

Per ulteriori informazioni sulle autorizzazioni BigQuery, consulta Controllo dell'accesso con IAM.

Per ottenere informazioni su una vista materializzata, incluse eventuali repliche viste materializzate:

SQL

Per ottenere informazioni sulle viste materializzate, esegui una query INFORMATION_SCHEMA.TABLES vista:

  1. Nella console Google Cloud, vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nell'editor query, inserisci la seguente istruzione:

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

    Sostituisci quanto segue:

    • PROJECT_ID: il nome del progetto che che contiene le viste materializzate
    • DATASET_ID: il nome del set di dati che che contiene le viste materializzate

  3. Fai clic su Esegui.

Per ulteriori informazioni su come eseguire le query, vedi Eseguire una query interattiva.

bq

Utilizza la Comando bq show:

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

Sostituisci quanto segue:

  • project_id: l'ID progetto. Devi solo includere questo per ottenere informazioni su una vista materializzata in un altro progetto rispetto al progetto predefinito.
  • dataset: il nome del set di dati che contiene vista materializzata.
  • materialized_view: il nome della vista materializzata che su cui desideri informazioni.

Esempio:

Inserisci il seguente comando per mostrare le informazioni sull'elemento visualizza my_mv nel set di dati report_views nel progetto myproject.

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

API

Per ottenere informazioni sulla vista materializzata utilizzando l'API, chiama il metodo tables.get.

Elimina viste materializzate

Puoi eliminare una vista materializzata tramite la console Google Cloud, a riga di comando bq o l'API.

L'eliminazione di una vista materializzata comporta anche l'eliminazione delle eventuali autorizzazioni associate vista materializzata. Quando ricrei una vista materializzata eliminata, devi anche riconfigurare manualmente le autorizzazioni di accesso associate in precedenza.

Autorizzazioni obbligatorie

Per eliminare le viste materializzate, è necessario bigquery.tables.delete Autorizzazione IAM.

Ciascuno dei seguenti ruoli IAM predefiniti include autorizzazioni necessarie per eliminare una vista materializzata:

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

Per ulteriori informazioni Identity and Access Management (IAM) per BigQuery), consulta Ruoli e autorizzazioni predefiniti.

SQL

Per eliminare una vista materializzata, utilizza il metodo DROP MATERIALIZED VIEW Istruzione DDL:

  1. Nella console Google Cloud, vai alla pagina BigQuery.

    Vai a BigQuery

  2. Nell'editor query, inserisci la seguente istruzione:

    DROP MATERIALIZED VIEW PROJECT.DATASET.MATERIALIZED_VIEW;
    

    Sostituisci quanto segue:

    • PROJECT: il nome del progetto che contiene la vista materializzata
    • DATASET: il nome del set di dati che contiene la vista materializzata
    • MATERIALIZED_VIEW: il nome del vista materializzata da eliminare

  3. Fai clic su Esegui.

Per ulteriori informazioni su come eseguire le query, vedi Eseguire una query interattiva.

bq

Usa il comando bq rm per eliminare la vista materializzata.

API

Chiama il tables.delete e specificare i valori per projectId, datasetId e tableId parametri:

  • Assegna il parametro projectId all'ID progetto.
  • Assegna il parametro datasetId all'ID del set di dati.
  • Assegna il parametro tableId all'ID tabella della vista materializzata che stai eliminando.

Java

Prima di provare questo esempio, segui le istruzioni per la configurazione di Java nel Guida rapida di BigQuery con librerie client. Per ulteriori informazioni, consulta API Java BigQuery documentazione di riferimento.

Per eseguire l'autenticazione su BigQuery, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per le librerie client.

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());
    }
  }
}

Aggiorna viste materializzate

L'aggiornamento di una vista materializzata aggiorna i risultati memorizzati nella cache della vista in modo che riflettano la stato corrente delle sue tabelle di base. Se possibile, BigQuery legge solo le modifiche dall'ultima volta che la vista è stata aggiornata. Di recente i dati trasmessi in flusso potrebbero non essere inclusi durante un aggiornamento della vista materializzata, le query leggono sempre i dati trasmessi in flusso indipendentemente dal fatto che una vista materializzata sia in uso. In questa sezione viene descritto come effettuare le seguenti operazioni:

Aggiornamento automatico

Per impostazione predefinita, le viste materializzate vengono aggiornate automaticamente entro 5 minuti dal alle tabelle di base, ma non più di ogni 30 minuti. Esempi delle modifiche includono l'inserimento o l'eliminazione di righe.

Puoi utilizzare la quota limite di aggiornamento per gestire i costi e le prestazioni delle query delle viste materializzate. Indipendentemente dal limite di aggiornamento, Le viste materializzate restituiscono sempre dati aggiornati.

L'aggiornamento automatico può essere attivato o disattivato in qualsiasi momento. L'aggiornamento automatico viene eseguito dal servizio bigquery-adminbot@system.gserviceaccount.com e compare nella cronologia dei job del progetto della vista materializzata.

Attiva e disattiva l'aggiornamento automatico

Per disattivare l'aggiornamento automatico quando crei una tabella, imposta enable_refresh su false.

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

Per una vista materializzata esistente, puoi modificare il valore enable_refresh utilizzando ALTER MATERIALIZED VIEW.

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

Impostare la quota limite

Puoi configurare una quota limite per la frequenza di esecuzione dell'aggiornamento automatico. Di per impostazione predefinita, le viste materializzate vengono aggiornate non più di ogni 30 minuti.

La quota limite di aggiornamento può essere modificata in qualsiasi momento.

Per impostare una quota limite di aggiornamento quando crei una vista materializzata, imposta refresh_interval_minutes in DDL (o refresh_interval_ms nell'API e bq), al valore desiderato.

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

Analogamente, puoi impostare la quota limite quando modifichi una tabella. Questo esempio presuppone che tu abbia già attivato l'aggiornamento automatico e voglia modificare quota limite:

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

La quota limite minima di aggiornamento è 1 minuto. La quota limite massima di aggiornamento è di 7 giorni.

Puoi eseguire un aggiornamento manuale di una vista materializzata in qualsiasi momento. non è soggetta alla quota limite.

Massimo sforzo

L'aggiornamento automatico viene eseguito secondo il criterio del "best effort". BigQuery tenta di avviare un aggiornamento entro 5 minuti da una modifica in la base (se l'aggiornamento precedente è stato eseguito prima di 30 minuti fa), ma non garantisce che l'aggiornamento venga avviato in quel momento, né una volta completato.

L'aggiornamento automatico viene trattato in modo simile a una query con batch la priorità. Se il progetto della vista materializzata non ha la capacità momento, l'aggiornamento è ritardato. Se il progetto contiene molte viste il cui aggiornamento risulta costosa, ogni singola visualizzazione potrebbe subire un notevole ritardo rispetto alle rispettive tabelle di base.

Aggiornamento manuale

Puoi aggiornare manualmente una vista materializzata in qualsiasi momento.

Autorizzazioni obbligatorie

Per aggiornare manualmente le viste materializzate, è necessario bigquery.tables.getData, bigquery.tables.update e bigquery.tables.updateData IAM autorizzazioni aggiuntive.

Ciascuno dei seguenti ruoli IAM predefiniti include autorizzazioni necessarie per aggiornare manualmente una vista materializzata:

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

Per ulteriori informazioni Identity and Access Management (IAM) per BigQuery), consulta Ruoli e autorizzazioni predefiniti.

Per aggiornare i dati nella vista materializzata, chiama il metodo BQ.REFRESH_MATERIALIZED_VIEW di sistema. Quando viene chiamata questa procedura, BigQuery identifica le modifiche apportate nell'interfaccia tabelle e applica le modifiche alla vista materializzata. La query da eseguire BQ.REFRESH_MATERIALIZED_VIEW termina al termine dell'aggiornamento.

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

Monitora le viste materializzate

Puoi ottenere informazioni sulle viste materializzate e materializzate di aggiornamento dei job usando l'API BigQuery. Per ulteriori informazioni, vedi Monitora le viste materializzate.