Faça a gestão das vistas lógicas

Este documento descreve como gerir as vistas no BigQuery. Pode gerir as suas vistas do BigQuery das seguintes formas:

Antes de começar

Conceder funções de gestão de identidade e de 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 aplicável) estão listadas na secção "Autorizações necessárias" da tarefa.

Atualize uma vista

Depois de criar uma visualização de propriedade, pode atualizar as seguintes propriedades da visualização de propriedade:

Autorizações necessárias

Para atualizar uma visualização de propriedade, precisa das seguintes autorizações de IAM:

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

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

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

Além disso, se tiver a autorização bigquery.datasets.create, pode atualizar tabelas e vistas nos conjuntos de dados que criar.

Para atualizar a consulta SQL da vista, também tem de ter autorizações para consultar quaisquer tabelas referenciadas pela consulta SQL da vista.

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

Atualizar a consulta SQL de uma vista

Pode atualizar a consulta SQL usada para definir uma vista:

  • Usar a Google Cloud consola
  • Usar o comando bq update da ferramenta de linhas de comando bq
  • Chamar o método da API tables.patch
  • Usar as bibliotecas de cliente

Pode alterar o dialeto SQL de SQL antigo para GoogleSQL na API ou na ferramenta de linha de comandos bq. Não pode atualizar uma vista de SQL antigo para GoogleSQL na Google Cloud consola.

Para atualizar uma consulta SQL de uma vista:

Consola

  1. No painel Explorador, expanda o projeto e o conjunto de dados e, de seguida, selecione a vista.

  2. Clique no separador Detalhes.

  3. Acima da caixa Consulta, clique no botão Editar consulta. Clique em Abrir na caixa de diálogo apresentada.

    Editar consulta

  4. Edite a consulta SQL na caixa do Editor de consultas e, de seguida, clique em Guardar vista.

    Guardar vista

  5. Certifique-se de que todos os campos estão corretos na caixa de diálogo Guardar vista e, de seguida, clique em Guardar.

bq

Emita o comando bq update com a flag --view. Para usar o GoogleSQL ou para atualizar o dialeto de consulta do SQL antigo para o GoogleSQL, inclua a flag --use_legacy_sql e defina-a como false.

Se a sua consulta fizer referência a recursos de funções definidas pelo utilizador externos armazenados no Cloud Storage ou em ficheiros locais, use a flag --view_udf_resource para especificar esses recursos. A sinalização --view_udf_resource não é demonstrada aqui. Para mais informações sobre a utilização de UDFs, consulte o artigo Funções definidas pelo utilizador do GoogleSQL.

Se estiver a atualizar uma vista num projeto que não seja o seu projeto predefinido, adicione o ID do projeto ao nome do conjunto de dados no seguinte formato: project_id:dataset.

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

Substitua o seguinte:

  • path_to_file: o URI ou o caminho do sistema de ficheiros local para um ficheiro de código a ser carregado e avaliado imediatamente como um recurso de função definida pelo utilizador usado pela vista. Repita a flag para especificar vários ficheiros.
  • query: uma consulta GoogleSQL válida
  • project_id: o ID do seu projeto
  • dataset: o nome do conjunto de dados que contém a vista que está a atualizar
  • view: o nome da vista que está a atualizar

Exemplos

Introduza o seguinte comando para atualizar a consulta SQL de uma vista denominada myview em mydataset. mydataset está no seu projeto predefinido. A consulta de exemplo usada para atualizar os dados de consultas de visualização do conjunto de dados público USA Name Data.

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

Introduza o seguinte comando para atualizar a consulta SQL de uma vista denominada myview em mydataset. mydataset está em myotherproject e não no seu projeto predefinido. A consulta de exemplo usada para atualizar os dados de consultas de visualização do conjunto de dados público USA Name Data.

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

Pode atualizar uma vista chamando o método tables.patch com um recurso de tabela que contenha uma propriedade view atualizada. Uma vez que o método tables.update substitui o recurso de tabela completo, o método tables.patch é o preferido.

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.

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

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.

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

Antes de experimentar este exemplo, siga as Node.jsinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Node.js 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.

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

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.

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

Atualizar o tempo de validade de uma visualização

Pode definir um tempo de validade predefinido da tabela ao nível do conjunto de dados (que afeta as tabelas e as vistas) ou pode definir o tempo de validade de uma vista quando a vista é criada. Se definir a expiração quando a vista é criada, a expiração da tabela predefinida do conjunto de dados é ignorada. Se não definir uma validade da tabela predefinida ao nível do conjunto de dados e não definir uma validade quando a visualização é criada, a visualização nunca expira e tem de a eliminar manualmente.

Em qualquer altura após a criação da visualização de propriedade, pode atualizar a hora de expiração da visualização de propriedade:

  • Usar a Google Cloud consola
  • Usando uma declaração de linguagem de definição de dados (LDD) escrita na sintaxe do GoogleSQL
  • Usar o comando bq update da ferramenta de linhas de comando bq
  • Chamar o método da API tables.patch
  • Usar as bibliotecas de cliente

Para atualizar a hora de validade de uma vista:

Consola

  1. No painel de navegação, selecione a vista.

  2. Na página de detalhes, clique no separador Detalhes.

  3. À direita de Ver informações, clique no ícone de edição (lápis).

  4. Na caixa de diálogo Ver informações, para Ver validade, clique em Especificar data.

  5. No seletor de data, introduza a data e a hora de validade e, de seguida, clique em OK.

  6. Clique em Atualizar. A hora de validade atualizada é apresentada na secção Ver informações.

SQL

Use a ALTER VIEW SET OPTIONS declaração DDL:

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

    Aceda ao BigQuery

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

     ALTER VIEW DATASET_ID.MY_VIEW
     SET OPTIONS (
      expiration_timestamp = TIMESTAMP('NEW_TIMESTAMP'));

    Substitua o seguinte:

    • DATASET_ID: o ID do conjunto de dados que contém a sua vista
    • MY_VIEW: o nome da vista a ser atualizada
    • NEW_TIMESTAMP: um valor de DATA/HORA

  3. Clique em Executar.

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

bq

Emita o comando bq update com a flag --expiration. Se estiver a atualizar uma vista num projeto que não seja o seu projeto predefinido, adicione o ID do projeto ao nome do conjunto de dados no seguinte formato: project_id:dataset.

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

Substitua o seguinte:

  • integer: o tempo de vida predefinido (em segundos) da tabela. O valor mínimo é de 3600 segundos (uma hora). O tempo de expiração é avaliado como a hora atual mais o valor inteiro.
  • project_id: o ID do seu projeto
  • dataset: o nome do conjunto de dados que contém a vista que está a atualizar
  • view: o nome da vista que está a atualizar

Exemplos

Introduza o seguinte comando para atualizar a hora de validade de myview em mydataset para 5 dias (432 000 segundos). mydataset está no seu projeto predefinido.

bq update \
    --expiration 432000 \
    mydataset.myview

Introduza o seguinte comando para atualizar a hora de validade de myview em mydataset para 5 dias (432 000 segundos). mydataset está em myotherproject, não no seu projeto predefinido.

bq update \
    --expiration 432000 \
    myotherproject:mydataset.myview

API

Chame o método tables.patch e use a propriedade expirationTime no recurso table. Uma vez que o método tables.update substitui todo o recurso de tabela, o método tables.patch é preferível. Quando usa a API REST, a expiração da vista é expressa em milissegundos.

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.

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

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.

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

Antes de experimentar este exemplo, siga as Node.jsinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Node.js 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.

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

A atualização da expiração de uma vista é o mesmo processo que a atualização da expiração de uma tabela.

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.

from google.cloud import bigquery

client = bigquery.Client()

# TODO(dev): Change table_id to the full name of the table you want to update.
table_id = "your-project.your_dataset.your_table_name"

# TODO(dev): Set table to expire for desired days days from now.
expiration = datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(
    days=5
)
table = client.get_table(table_id)  # Make an API request.
table.expires = expiration
table = client.update_table(table, ["expires"])  # API request

print(f"Updated {table_id}, expires {table.expires}.")

Atualizar a descrição de uma vista

Pode atualizar a descrição de uma vista:

  • Usar a Google Cloud consola
  • Usando uma declaração de linguagem de definição de dados (LDD) escrita na sintaxe do GoogleSQL
  • Usar o comando bq update da ferramenta de linhas de comando bq
  • Chamar o método da API tables.patch
  • Usar as bibliotecas de cliente

Para atualizar a descrição de uma vista:

Consola

Não pode adicionar uma descrição quando cria uma vista através da consola Google Cloud . Depois de criar a visualização de propriedade, pode adicionar uma descrição na página Detalhes.

  1. No painel Explorador, expanda o projeto e o conjunto de dados e, de seguida, selecione a vista.

  2. Clique no separador Detalhes.

  3. Clique no ícone de lápis junto a Descrição.

    Edite a descrição da vista

  4. Introduza uma descrição na caixa de diálogo. Clique em Atualizar para guardar a nova descrição.

SQL

Use a ALTER VIEW SET OPTIONS declaração DDL:

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

    Aceda ao BigQuery

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

     ALTER VIEW DATASET_ID.MY_VIEW
     SET OPTIONS (
      description = 'NEW_DESCRIPTION');

    Substitua o seguinte:

    • DATASET_ID: o ID do conjunto de dados que contém a sua vista
    • MY_VIEW: o nome da vista a ser atualizada
    • NEW_DESCRIPTION: a nova descrição da vista

  3. Clique em Executar.

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

bq

Emita o comando bq update com a flag --description. Se estiver a atualizar uma vista num projeto que não seja o projeto predefinido, adicione o ID do projeto ao nome do conjunto de dados no seguinte formato: [PROJECT_ID]:[DATASET].

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

Substitua o seguinte:

  • description: o texto que descreve a vista entre aspas
  • project_id: o ID do seu projeto.
  • dataset: o nome do conjunto de dados que contém a vista que está a atualizar
  • view: o nome da vista que está a atualizar

Exemplos

Introduza o seguinte comando para alterar a descrição de myview em mydataset para "Description of myview". mydataset está no seu projeto predefinido.

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

Introduza o seguinte comando para alterar a descrição de myview em mydataset para "Descrição de myview". mydataset está em myotherproject, não no seu projeto predefinido.

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

API

Chame o método tables.patch e use a propriedade description para atualizar a descrição da vista no recurso de tabela. Uma vez que o método tables.update substitui todo o recurso de tabela, o método tables.patch é preferível.

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.

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

A atualização da descrição de uma vista é o mesmo processo que a atualização da descrição de uma tabela.

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.

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

Antes de experimentar este exemplo, siga as Node.jsinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Node.js 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.

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

A atualização da descrição de uma vista é o mesmo processo que a atualização da descrição de uma tabela.

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.

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

Copiar visualizações

Pode copiar uma vista através da Google Cloud consola.

Não pode copiar uma vista através da ferramenta de linha de comandos bq, da API REST nem das bibliotecas de cliente, mas pode copiar uma vista no conjunto de dados de destino.

Autorizações necessárias

Para copiar uma vista na consola Google Cloud , precisa de autorizações de IAM nos conjuntos de dados de origem e de destino.

  • No conjunto de dados de origem, precisa do seguinte:

    • bigquery.tables.get
    • bigquery.tables.getData (necessário para aceder às tabelas referenciadas pela consulta SQL da vista)
  • No conjunto de dados de destino, precisa do seguinte:

    • bigquery.tables.create (permite-lhe criar uma cópia da vista no conjunto de dados de destino)

Cada uma das seguintes funções de IAM predefinidas inclui as autorizações de que precisa para copiar uma visualização de propriedade:

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

Além disso, se tiver a autorização bigquery.datasets.create, pode copiar visualizações nos conjuntos de dados que criar. Também precisa de acesso ao conjunto de dados de destino, a menos que o tenha criado.

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

Copie uma visualização de propriedade

Para copiar uma visualização de propriedade:

  1. No painel Explorador, expanda o projeto e o conjunto de dados e, de seguida, selecione a vista.

  2. No painel de detalhes, clique em Copiar vista.

  3. Na caixa de diálogo Copiar visualização de propriedade:

    • Na secção Origem, verifique se o Nome do projeto, o Nome do conjunto de dados e o Nome da tabela estão corretos.
    • Na secção Destino:

      • Para Nome do projeto, escolha o projeto para o qual está a copiar a vista.
      • Para Nome do conjunto de dados, escolha o conjunto de dados que vai conter a visualização copiada.
      • Em Nome da tabela, introduza o nome da vista. Pode mudar o nome da vista introduzindo um novo nome na caixa. Se introduzir um novo nome, este tem de seguir as regras de nomenclatura de vistas.

      Caixa de diálogo de cópia da vista

    • Clique em Copiar.

Aplicam-se limites para tarefas de cópia. Para mais informações, consulte o artigo Quotas e limites.

Mude o nome de uma vista

Atualmente, só pode mudar o nome de uma vista quando usa a Google Cloud consola para copiar a vista. Para ver instruções sobre como mudar o nome de uma visualização de propriedade quando a copia, consulte o artigo Copiar uma visualização de propriedade.

Não pode alterar o nome de uma vista existente através da ferramenta de linha de comandos bq, da API nem das bibliotecas de cliente. Em alternativa, tem de recriar a vista de propriedade com o novo nome.

Elimine visualizações

Pode eliminar uma vista da seguinte forma:

  • Usar a Google Cloud consola
  • Usar o comando bq rm da ferramenta de linhas de comando bq
  • Chamar o método da API tables.delete

Atualmente, usando qualquer método disponível, só pode eliminar uma vista de cada vez.

Para eliminar automaticamente as visualizações de propriedade após um período especificado, defina o prazo de validade predefinido ao nível do conjunto de dados ou defina o prazo de validade quando criar a visualização de propriedade.

Quando elimina uma vista autorizada, pode demorar até 24 horas para remover a vista eliminada da lista de vistas autorizadas do conjunto de dados de origem.

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

Autorizações necessárias

Para eliminar uma vista, precisa das seguintes autorizações 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:

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

Além disso, se tiver a autorização bigquery.datasets.create, pode eliminar vistas nos conjuntos de dados que criar.

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

Elimine uma vista

Para eliminar uma vista:

Consola

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

    Aceda ao BigQuery

  2. No painel Explorador, expanda o projeto e o conjunto de dados e, de seguida, selecione a vista.

  3. No painel de detalhes, clique em Eliminar vista.

  4. Escreva "delete" na caixa de diálogo e clique em Eliminar para confirmar.

SQL

Use a DROP VIEW declaração DDL:

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

    Aceda ao BigQuery

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

    DROP VIEW mydataset.myview;

    Substitua o seguinte:

    • DATASET_ID: o ID do conjunto de dados que contém a sua vista
    • MY_VIEW: o nome da vista a ser atualizada
    • NEW_DESCRIPTION: a nova descrição da vista

  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 com a flag --table (ou o atalho -t) para eliminar uma vista. Quando usa a ferramenta de linhas de comando bq para remover uma vista, tem de confirmar a ação. Pode usar a flag --force (ou o atalho -f) para ignorar a confirmação.

Se a visualização de propriedade estiver num conjunto de dados num projeto que não seja o seu projeto predefinido, adicione o ID do projeto ao nome do conjunto de dados no seguinte formato: project_id:dataset.

bq rm \
-f \
-t \
project_id:dataset.view

Onde:

  • project_id é o ID do seu projeto.
  • dataset é o nome do conjunto de dados que contém a tabela.
  • view é o nome da vista que está a eliminar.

Exemplos:

Pode usar a ferramenta de linhas de comando bq para executar comandos bq.

Na Google Cloud consola, ative o Cloud Shell.

Ative o Cloud Shell

Introduza o seguinte comando para eliminar myview de mydataset. mydataset está no seu projeto predefinido.

bq rm -t mydataset.myview

Introduza o seguinte comando para eliminar myview de mydataset. mydataset está em myotherproject e não no seu projeto predefinido.

bq rm -t myotherproject:mydataset.myview

Introduza o seguinte comando para eliminar myview de mydataset. mydataset está no seu projeto predefinido. O comando usa o atalho -f para ignorar a confirmação.

bq rm -f -t mydataset.myview

API

Chame o método da API tables.delete e especifique a visualização de propriedade a eliminar através do parâmetro tableId.

C#

Antes de experimentar este exemplo, siga as C#instruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API C# 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.


using Google.Cloud.BigQuery.V2;
using System;

public class BigQueryDeleteTable
{
    public void DeleteTable(
        string projectId = "your-project-id",
        string datasetId = "your_dataset_id",
        string tableId = "your_table_id"
    )
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        client.DeleteTable(datasetId, tableId);
        Console.WriteLine($"Table {tableId} deleted.");
    }
}

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.

import (
	"context"
	"fmt"

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

// deleteTable demonstrates deletion of a BigQuery table.
func deleteTable(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()

	table := client.Dataset(datasetID).Table(tableID)
	if err := table.Delete(ctx); err != nil {
		return err
	}
	return nil
}

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.

TableId tableId = TableId.of(projectId, datasetName, tableName);
boolean deleted = bigquery.delete(tableId);
if (deleted) {
  // the table was deleted
} else {
  // the table was not found
}

Node.js

Antes de experimentar este exemplo, siga as Node.jsinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Node.js 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.

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

async function deleteTable() {
  // Deletes "my_table" from "my_dataset".

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const datasetId = "my_dataset";
  // const tableId = "my_table";

  // Delete the table
  await bigquery
    .dataset(datasetId)
    .table(tableId)
    .delete();

  console.log(`Table ${tableId} deleted.`);
}

PHP

Antes de experimentar este exemplo, siga as PHPinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API PHP 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.

use Google\Cloud\BigQuery\BigQueryClient;

/** Uncomment and populate these variables in your code */
// $projectId = 'The Google project ID';
// $datasetId = 'The BigQuery dataset ID';
// $tableId = 'The BigQuery table ID';

$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$dataset = $bigQuery->dataset($datasetId);
$table = $dataset->table($tableId);
$table->delete();
printf('Deleted table %s.%s' . PHP_EOL, $datasetId, $tableId);

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.


from google.cloud import bigquery

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

# TODO(developer): Set table_id to the ID of the table to fetch.
# table_id = 'your-project.your_dataset.your_table'

# If the table does not exist, delete_table raises
# google.api_core.exceptions.NotFound unless not_found_ok is True.
client.delete_table(table_id, not_found_ok=True)  # Make an API request.
print("Deleted table '{}'.".format(table_id))

Ruby

Antes de experimentar este exemplo, siga as Rubyinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Ruby 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.

require "google/cloud/bigquery"

def delete_table dataset_id = "my_dataset_id", table_id = "my_table_id"
  bigquery = Google::Cloud::Bigquery.new
  dataset  = bigquery.dataset dataset_id
  table    = dataset.table table_id

  table.delete

  puts "Table #{table_id} deleted."
end

Restaure uma vista

Não pode restaurar uma vista eliminada diretamente, mas existem soluções alternativas para determinados cenários:

  • Se uma vista for eliminada porque o conjunto de dados principal foi eliminado, pode anular a eliminação do conjunto de dados para recuperar a vista.
  • Se uma vista for eliminada explicitamente, pode recriar a vista usando a última consulta que foi usada para criar ou atualizar a vista. Pode encontrar a definição da consulta da operação de criação ou atualização da vista nos registos.

Ver segurança

Para controlar o acesso a vistas no BigQuery, consulte o artigo Vistas autorizadas.

O que se segue?