Aggiornamento delle proprietà delle viste

Questo documento descrive come aggiornare le proprietà o i metadati della vista. Dopo aver creato una vista, puoi aggiornarne le proprietà:

Prima di iniziare

Concedi ruoli IAM (Identity and Access Management) che consentono agli utenti le autorizzazioni necessarie per eseguire ogni attività in questo documento.

Autorizzazioni obbligatorie

Per aggiornare una vista, devi disporre delle seguenti autorizzazioni IAM:

  • bigquery.tables.update
  • bigquery.tables.get

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

  • roles/bigquery.dataEditor
  • roles/bigquery.dataOwner
  • roles/bigquery.admin

Inoltre, se disponi dell'autorizzazione bigquery.datasets.create, puoi aggiornare tabelle e viste nei set di dati che crei.

Se aggiorni la query SQL di view-through, devi disporre anche delle autorizzazioni per eseguire query su qualsiasi tabella a cui fa riferimento la query SQL di view.

Per ulteriori informazioni su ruoli e autorizzazioni IAM in BigQuery, consulta la sezione Ruoli e autorizzazioni predefiniti.

Aggiornamento di una query SQL di visualizzazione

Puoi aggiornare la query SQL utilizzata per definire una vista:

  • Utilizzo di Cloud Console
  • Utilizzo del comando bq update dello strumento a riga di comando di bq
  • Chiamata al metodo API tables.patch
  • Utilizzo delle librerie client

Puoi cambiare il dialetto SQL da SQL precedente a SQL standard nell'API o nello strumento a riga di comando bq. Non puoi aggiornare una visualizzazione SQL precedente a SQL standard in Cloud Console.

Per aggiornare la query SQL di una vista:

Console

  1. Nel riquadro Explorer, espandi il progetto e il set di dati, quindi seleziona la visualizzazione.

  2. Fai clic sulla scheda Dettagli.

  3. Sopra la casella Query, fai clic sul pulsante Modifica query. Fai clic su Apri nella finestra di dialogo visualizzata.

    Modifica query

  4. Modifica la query SQL nella casella Editor query e fai clic su Salva visualizzazione.

    Salva vista

  5. Assicurati che tutti i campi siano corretti nella finestra di dialogo Salva visualizzazione, quindi fai clic su Salva.

bq

Esegui il comando bq update con il flag --view. Per utilizzare il linguaggio SQL standard o per aggiornare il dialetto delle query da SQL precedente a SQL standard, includi il flag --use_legacy_sql e impostalo su false.

Se la tua query fa riferimento a risorse funzione esterne definite dall'utente, archiviate in Cloud Storage o nei file locali, utilizza il flag --view_udf_resource per specificare tali risorse. Il flag --view_udf_resource non è mostrato qui. Per ulteriori informazioni sull'utilizzo delle funzioni UDF, consulta la sezione Funzioni definite dall'utente di SQL standard.

Se stai aggiornando una vista in un progetto diverso da quello predefinito, aggiungi l'ID progetto al nome del set di dati nel seguente formato: project_id:dataset.

bq update \
--use_legacy_sql=false \
--view_udf_resource=path_to_file \
--view='query' \
project_id:dataset.view

Dove:

  • path_to_file è il percorso del file system locale e dell'URI di un file di codice da caricare e valutare immediatamente come risorsa funzione definita dall'utente e utilizzata dalla vista. Ripeti il flag per specificare più file.
  • query è una query SQL standard valida.
  • project_id è l'ID progetto.
  • dataset è un set di dati che contiene la vista.
  • view è il nome della vista da aggiornare.

Esempi:

Inserisci il comando seguente per aggiornare la query SQL per una vista denominata myview in mydataset. mydataset è nel tuo progetto predefinito. La query di esempio utilizzata per aggiornare i dati delle query di visualizzazione dal set di dati pubblici USA Name.

bq update \
--use_legacy_sql=false \
--view \
'SELECT
  name,
  number
FROM
  `bigquery-public-data.usa_names.usa_1910_current`
WHERE
  gender = "M"
ORDER BY
  number DESC' \
mydataset.myview

Inserisci il comando seguente per aggiornare la query SQL per una vista denominata myview in mydataset. mydataset è in myotherproject, non è il tuo progetto predefinito. L'esempio di query utilizzato per aggiornare i dati delle query di visualizzazione dal set di dati pubblico USA Name.

bq update \
--use_legacy_sql=false \
--view \
'SELECT
  name,
  number
FROM
  `bigquery-public-data.usa_names.usa_1910_current`
WHERE
  gender = "M"
ORDER BY
  number DESC' \
myotherproject:mydataset.myview

API

Puoi aggiornare una visualizzazione chiamando il metodo tables.patch con una risorsa tabella che contiene una proprietà view aggiornata. Poiché il metodo tables.update sostituisce l'intera risorsa della tabella, è preferibile utilizzare il metodo tables.patch.

Go

Prima di provare questo esempio, segui le istruzioni per la configurazione di Go nella guida rapida di BigQuery che utilizza le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Go.

import (
	"context"
	"fmt"

	"cloud.google.com/go/bigquery"
)

// updateView demonstrates updating the query metadata that defines a logical view.
func updateView(projectID, datasetID, viewID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// viewID := "myview"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	view := client.Dataset(datasetID).Table(viewID)
	meta, err := view.Metadata(ctx)
	if err != nil {
		return err
	}

	newMeta := bigquery.TableMetadataToUpdate{
		// This example updates a view into the shakespeare dataset to exclude works named after kings.
		ViewQuery: "SELECT word, word_count, corpus, corpus_date FROM `bigquery-public-data.samples.shakespeare` WHERE corpus NOT LIKE '%king%'",
	}

	if _, err := view.Update(ctx, newMeta, meta.ETag); err != nil {
		return err
	}
	return nil
}

Java

Prima di provare questo esempio, segui le istruzioni di configurazione di Java nella Guida di BigQuery per l'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Java di BigQuery.

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

// Sample to update query on a view
public class UpdateViewQuery {

  public static void runUpdateViewQuery() {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    String viewName = "MY_VIEW_NAME";
    String updateQuery =
        String.format("SELECT TimestampField, StringField FROM %s.%s", datasetName, tableName);
    updateViewQuery(datasetName, viewName, updateQuery);
  }

  public static void updateViewQuery(String datasetName, String viewName, String query) {
    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();

      // Retrieve existing view metadata
      TableInfo viewMetadata = bigquery.getTable(TableId.of(datasetName, viewName));

      // Update view query
      ViewDefinition viewDefinition = viewMetadata.getDefinition();
      viewDefinition.toBuilder().setQuery(query).build();

      // Set metadata
      bigquery.update(viewMetadata.toBuilder().setDefinition(viewDefinition).build());

      System.out.println("View query updated successfully");
    } catch (BigQueryException e) {
      System.out.println("View query was not updated. \n" + e.toString());
    }
  }
}

Node.js

Prima di provare questo esempio, segui le istruzioni per la configurazione di Node.js nella guida rapida di BigQuery che utilizza le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Node.js di BigQuery.

// Import the Google Cloud client library and create a client
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function updateViewQuery() {
  // Updates a view named "my_existing_view" in "my_dataset".

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const datasetId = "my_existing_dataset"
  // const tableId = "my_existing_table"
  const dataset = await bigquery.dataset(datasetId);

  // This example updates a view into the USA names dataset to include state.
  const newViewQuery = `SELECT name, state
  FROM \`bigquery-public-data.usa_names.usa_1910_current\`
  LIMIT 10`;

  // Retrieve existing view
  const [view] = await dataset.table(tableId).get();

  // Retrieve existing view metadata
  const [metadata] = await view.getMetadata();

  // Update view query
  metadata.view = newViewQuery;

  // Set metadata
  await view.setMetadata(metadata);

  console.log(`View ${tableId} updated.`);
}

Python

Prima di provare questo esempio, segui le istruzioni di configurazione di Python nella guida rapida di BigQuery che utilizza le librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Python BigQuery.

from google.cloud import bigquery

client = bigquery.Client()

view_id = "my-project.my_dataset.my_view"
source_id = "my-project.my_dataset.my_table"
view = bigquery.Table(view_id)

# The source table in this example is created from a CSV file in Google
# Cloud Storage located at
# `gs://cloud-samples-data/bigquery/us-states/us-states.csv`. It contains
# 50 US states, while the view returns only those states with names
# starting with the letter 'M'.
view.view_query = f"SELECT name, post_abbr FROM `{source_id}` WHERE name LIKE 'M%'"

# Make an API request to update the query property of the view.
view = client.update_table(view, ["view_query"])
print(f"Updated {view.table_type}: {str(view.reference)}")

Aggiornamento della scadenza di una visualizzazione

Puoi impostare una scadenza predefinita per la tabella a livello di set di dati (che incide sia sulle tabelle che sulle viste) oppure puoi impostare la data e l'ora di scadenza di una vista creata. Se imposti la scadenza quando viene creata la vista, la scadenza predefinita della tabella del set di dati viene ignorata. Se non imposti una scadenza predefinita per la tabella a livello di set di dati e non ne imposti una dopo la creazione, la vista non scade mai e devi eliminarla manualmente.

Una volta creata la vista, puoi aggiornarla in qualsiasi momento:

  • Utilizzo del comando bq update dello strumento a riga di comando di bq
  • Chiamata al metodo API tables.patch
  • Utilizzo delle librerie client

Per aggiornare la data di scadenza di una vista:

Console

  1. Seleziona la visualizzazione nel riquadro di navigazione.

  2. Nella pagina Visualizza dettagli, fai clic sulla scheda Dettagli.

  3. A destra di Visualizza informazioni, fai clic sull'icona di modifica (a forma di matita).

  4. Nella finestra di dialogo Visualizza informazioni, per Visualizza scadenza, fai clic su Specifica data.

  5. Nel selettore della data, inserisci la data e l'ora di scadenza e fai clic su OK.

  6. Fai clic su Aggiorna. La scadenza aggiornata viene visualizzata nella sezione Visualizza informazioni.

SQL

Le istruzioni DDL (Data Definition Language) consentono di creare e modificare tabelle e viste utilizzando la sintassi delle query standard SQL.

Scopri di più sull'utilizzo delle dichiarazioni linguistice di definizione dei dati.

Per utilizzare un'istruzione DDL in Cloud Console:

  1. Fai clic su Crea nuova query.

  2. Digita l'istruzione DDL nell'area di testo Query Editor.

    ALTER VIEW mydataset.myview
    SET OPTIONS (
    -- Sets view expiration to timestamp 2025-02-03 12:34:56 in the America/Los Angeles time zone
    expiration_timestamp=TIMESTAMP("2025-02-03 12:34:56", "America/Los_Angeles")
    );
    
  3. Fai clic su Esegui query.

bq

Esegui il comando bq update con il flag --expiration. Se stai aggiornando una vista in un progetto diverso da quello predefinito, aggiungi l'ID progetto al nome del set di dati nel seguente formato: project_id:dataset.

bq update \
--expiration integer \
project_id:dataset.view

Dove:

  • integer è il lifetime value predefinito (in secondi) della tabella. Il valore minimo è 3600 secondi (un'ora). Per la scadenza viene utilizzata l'ora corrente più il valore intero.
  • project_id è l'ID progetto.
  • dataset è il nome del set di dati che contiene la visualizzazione in corso di aggiornamento.
  • view è il nome della vista che stai aggiornando.

Esempi:

Inserisci il comando seguente per aggiornare la scadenza di myview tra mydataset e 5 giorni (432000 secondi). mydataset è nel tuo progetto predefinito.

bq update --expiration 432000 mydataset.myview

Inserisci il comando seguente per aggiornare la scadenza di myview tra mydataset e 5 giorni (432000 secondi). mydataset è in myotherproject, non è il tuo progetto predefinito.

bq update --expiration 432000 myotherproject:mydataset.myview

API

Chiama il metodo tables.patch e utilizza la proprietà expirationTime nella risorsa tabella. Poiché il metodo tables.update sostituisce l'intera risorsa della tabella, è preferibile il metodo tables.patch. Quando utilizzi l'API REST, la scadenza della visualizzazione è espressa in millisecondi.

Go

Prima di provare questo esempio, segui le istruzioni per la configurazione di Go nella guida rapida di BigQuery che utilizza le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Go.

import (
	"context"
	"fmt"
	"time"

	"cloud.google.com/go/bigquery"
)

// updateTableExpiration demonstrates setting the table expiration of a table to a specific point in time
// in the future, at which time it will be deleted.
func updateTableExpiration(projectID, datasetID, tableID 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()

	tableRef := client.Dataset(datasetID).Table(tableID)
	meta, err := tableRef.Metadata(ctx)
	if err != nil {
		return err
	}
	update := bigquery.TableMetadataToUpdate{
		ExpirationTime: time.Now().Add(time.Duration(5*24) * time.Hour), // table expiration in 5 days.
	}
	if _, err = tableRef.Update(ctx, update, meta.ETag); err != nil {
		return err
	}
	return nil
}

Java

Prima di provare questo esempio, segui le istruzioni di configurazione di Java nella Guida di BigQuery per l'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Java di BigQuery.

Table beforeTable = bigquery.getTable(datasetName, tableName);

// Set table to expire 5 days from now.
long expirationMillis = DateTime.now().plusDays(5).getMillis();
TableInfo tableInfo = beforeTable.toBuilder()
        .setExpirationTime(expirationMillis)
        .build();
Table afterTable = bigquery.update(tableInfo);

Node.js

Prima di provare questo esempio, segui le istruzioni per la configurazione di Node.js nella guida rapida di BigQuery che utilizza le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Node.js di BigQuery.

// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function updateTableExpiration() {
  // Updates a table's expiration.

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const datasetId = 'my_dataset', // Existing dataset
  // const tableId = 'my_table', // Existing table
  // const expirationTime = Date.now() + 1000 * 60 * 60 * 24 * 5 // 5 days from current time in ms

  // Retreive current table metadata
  const table = bigquery.dataset(datasetId).table(tableId);
  const [metadata] = await table.getMetadata();

  // Set new table expiration to 5 days from current time
  metadata.expirationTime = expirationTime.toString();
  const [apiResponse] = await table.setMetadata(metadata);

  const newExpirationTime = apiResponse.expirationTime;
  console.log(`${tableId} expiration: ${newExpirationTime}`);
}

Python

L'aggiornamento della scadenza di una vista è lo stesso processo di aggiornamento della scadenza di una tabella.

Prima di provare questo esempio, segui le istruzioni di configurazione di Python nella guida rapida di BigQuery che utilizza le librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Python BigQuery.

import datetime
import pytz

# from google.cloud import bigquery
# client = bigquery.Client()
# project = client.project
# dataset_ref = bigquery.DatasetReference(project, dataset_id)
# table_ref = dataset_ref.table('my_table')
# table = client.get_table(table_ref)  # API request

assert table.expires is None

# set table to expire 5 days from now
expiration = datetime.datetime.now(pytz.utc) + datetime.timedelta(days=5)
table.expires = expiration
table = client.update_table(table, ["expires"])  # API request

# expiration is stored in milliseconds
margin = datetime.timedelta(microseconds=1000)
assert expiration - margin <= table.expires <= expiration + margin

Aggiornamento di una descrizione della vista

Puoi aggiornare la descrizione di una vista nei seguenti modi:

  • Utilizzo di Cloud Console
  • Utilizzo del comando bq update dello strumento a riga di comando di bq
  • Chiamata al metodo API tables.patch
  • Utilizzo delle librerie client

Per aggiornare la descrizione di una vista:

Console

Non puoi aggiungere una descrizione quando crei una vista utilizzando Cloud Console. Dopo aver creato la vista, puoi aggiungere una descrizione nella pagina Dettagli.

  1. Nel riquadro Explorer, espandi il progetto e il set di dati, quindi seleziona la visualizzazione.

  2. Fai clic sulla scheda Dettagli.

  3. Fai clic sull'icona a forma di matita accanto a Descrizione.

    Modifica descrizione della visualizzazione

  4. Inserisci una descrizione nella finestra di dialogo. Fai clic su Aggiorna per salvare la nuova descrizione.

SQL

Le istruzioni DDL (Data Definition Language) consentono di creare e modificare tabelle e viste utilizzando la sintassi delle query standard SQL.

Scopri di più sull'utilizzo delle dichiarazioni linguistice di definizione dei dati.

Per utilizzare un'istruzione DDL in Cloud Console:

  1. Fai clic su Crea nuova query.

  2. Digita l'istruzione DDL nell'area di testo Query Editor.

     ALTER VIEW mydataset.myview
     SET OPTIONS (
       description="Description of myview"
     );
     

  3. Fai clic su Esegui query.

bq

Esegui il comando bq update con il flag --description. Se stai aggiornando una vista in un progetto diverso da quello predefinito, aggiungi l'ID progetto al nome del set di dati nel seguente formato: [PROJECT_ID]:[DATASET].

bq update \
--description "description" \
project_id:dataset.view

Dove:

  • description è il testo che descrive la visualizzazione tra virgolette.
  • project_id è l'ID progetto.
  • dataset è il nome del set di dati che contiene la visualizzazione in corso di aggiornamento.
  • view è il nome della vista che stai aggiornando.

Esempi:

Inserisci il comando seguente per modificare la descrizione di myview in mydataset "Descrizione di myview." mydataset è nel tuo progetto predefinito.

bq update --description "Description of myview" mydataset.myview

Inserisci il comando seguente per modificare la descrizione di myview in mydataset in "Descrizione di myview." mydataset è in myotherproject, non è il tuo progetto predefinito.

bq update \
--description "Description of myview" \
myotherproject:mydataset.myview

API

Chiama il metodo tables.patch e utilizza la proprietà description per aggiornare la descrizione della vista nella risorsa della tabella. Poiché il metodo tables.update sostituisce l'intera risorsa della tabella, è preferibile il metodo tables.patch.

Go

Prima di provare questo esempio, segui le istruzioni per la configurazione di Go nella guida rapida di BigQuery che utilizza le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Go.

import (
	"context"
	"fmt"

	"cloud.google.com/go/bigquery"
)

// updateTableDescription demonstrates how to fetch a table's metadata and updates the Description metadata.
func updateTableDescription(projectID, datasetID, tableID 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()

	tableRef := client.Dataset(datasetID).Table(tableID)
	meta, err := tableRef.Metadata(ctx)
	if err != nil {
		return err
	}
	update := bigquery.TableMetadataToUpdate{
		Description: "Updated description.",
	}
	if _, err = tableRef.Update(ctx, update, meta.ETag); err != nil {
		return err
	}
	return nil
}

Java

L'aggiornamento della descrizione di una vista è lo stesso processo di aggiornamento della descrizione di una tabella.

Prima di provare questo esempio, segui le istruzioni di configurazione di Java nella Guida di BigQuery per l'utilizzo delle librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Java di BigQuery.

// String datasetName = "my_dataset_name";
// String tableName = "my_table_name";
// String newDescription = "new_description";

Table beforeTable = bigquery.getTable(datasetName, tableName);
TableInfo tableInfo = beforeTable.toBuilder()
    .setDescription(newDescription)
    .build();
Table afterTable = bigquery.update(tableInfo);

Node.js

Prima di provare questo esempio, segui le istruzioni per la configurazione di Node.js nella guida rapida di BigQuery che utilizza le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Node.js di BigQuery.

// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function updateTableDescription() {
  // Updates a table's description.

  // Retreive current table metadata
  const table = bigquery.dataset(datasetId).table(tableId);
  const [metadata] = await table.getMetadata();

  // Set new table description
  const description = 'New table description.';
  metadata.description = description;
  const [apiResponse] = await table.setMetadata(metadata);
  const newDescription = apiResponse.description;

  console.log(`${tableId} description: ${newDescription}`);
}

Python

L'aggiornamento della descrizione di una vista è lo stesso processo di aggiornamento della descrizione di una tabella.

Prima di provare questo esempio, segui le istruzioni di configurazione di Python nella guida rapida di BigQuery che utilizza le librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Python BigQuery.

# from google.cloud import bigquery
# client = bigquery.Client()
# project = client.project
# dataset_ref = bigquery.DatasetReference(project, dataset_id)
# table_ref = dataset_ref.table('my_table')
# table = client.get_table(table_ref)  # API request

assert table.description == "Original description."
table.description = "Updated description."

table = client.update_table(table, ["description"])  # API request

assert table.description == "Updated description."

Visualizza sicurezza

Per controllare l'accesso alle viste in BigQuery, consulta Controllare l'accesso alle viste.

Passaggi successivi