Faça a gestão de tabelas

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

Para obter informações sobre como restaurar (ou anular a eliminação) de uma tabela eliminada, consulte o artigo Restaure tabelas eliminadas.

Para mais informações sobre a criação e a utilização de tabelas, incluindo a obtenção de informações sobre tabelas, a apresentação de tabelas e o controlo do acesso aos dados das tabelas, consulte o artigo Criar e usar tabelas.

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.

Atualize as propriedades da tabela

Pode atualizar os seguintes elementos de uma tabela:

Autorizações necessárias

Para receber as autorizações de que precisa para atualizar as propriedades das tabelas, peça ao seu administrador para lhe conceder a função do IAM Editor de dados (roles/bigquery.dataEditor) numa tabela. Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Esta função predefinida contém as autorizações necessárias para atualizar as propriedades da tabela. Para ver as autorizações exatas que são necessárias, expanda a secção Autorizações necessárias:

Autorizações necessárias

São necessárias as seguintes autorizações para atualizar as propriedades da tabela:

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

Também pode conseguir estas autorizações com funções personalizadas ou outras funções predefinidas.

Além disso, se tiver a autorização bigquery.datasets.create, pode atualizar as propriedades das tabelas dos conjuntos de dados que criar.

Atualize a descrição de uma tabela

Pode atualizar a descrição de uma tabela das seguintes formas:

  • Usar a Trusted Cloud consola.
  • Usando uma declaração de linguagem de definição de dados (LDD) ALTER TABLE.
  • Usando o comando bq update da ferramenta de linhas de comando bq.
  • Chamar o método da API tables.patch.
  • Usando as bibliotecas cliente.
  • Gerar uma descrição com o Gemini no BigQuery.

Para atualizar a descrição de uma tabela:

Consola

Não pode adicionar uma descrição quando cria uma tabela através da Trusted Cloud consola. Depois de criar a tabela, 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 tabela.

  2. No painel de detalhes, clique em Detalhes.

  3. Na secção Descrição, clique no ícone de lápis para editar a descrição.

    Editar descrição.

  4. Introduza uma descrição na caixa e clique em Atualizar para guardar.

SQL

Use a declaração ALTER TABLE SET OPTIONS. O exemplo seguinte atualiza a descrição de uma tabela com o nome mytable:

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

    Aceda ao BigQuery

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

    ALTER TABLE mydataset.mytable
      SET OPTIONS (
        description = 'Description of mytable');

  3. Clique em Executar.

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

bq

  1. In the Trusted Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Trusted Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Emita o comando bq update com a flag --description. Se estiver a atualizar uma tabela 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.table

    Substitua o seguinte:

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

    Exemplos:

    Para alterar a descrição da tabela mytable no conjunto de dados mydataset para "Descrição de mytable", introduza o seguinte comando. O conjunto de dados mydataset está no seu projeto predefinido.

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

    Para alterar a descrição da tabela mytable no conjunto de dados mydataset para "Descrição de mytable", introduza o seguinte comando. O conjunto de dados mydataset está no projeto myotherproject e não no seu projeto predefinido.

    bq update \
    --description "Description of mytable" \
    myotherproject:mydataset.mytable
    
  3. API

    Chame o método tables.patch e use a propriedade description no recurso table para atualizar a descrição da tabela. 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.

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

    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

    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.Table;
    
    public class UpdateTableDescription {
    
      public static void runUpdateTableDescription() {
        // TODO(developer): Replace these variables before running the sample.
        String datasetName = "MY_DATASET_NAME";
        String tableName = "MY_TABLE_NAME";
        String newDescription = "this is the new table description";
        updateTableDescription(datasetName, tableName, newDescription);
      }
    
      public static void updateTableDescription(
          String datasetName, String tableName, String newDescription) {
        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();
    
          Table table = bigquery.getTable(datasetName, tableName);
          bigquery.update(table.toBuilder().setDescription(newDescription).build());
          System.out.println("Table description updated successfully to " + newDescription);
        } catch (BigQueryException e) {
          System.out.println("Table description was not updated \n" + e.toString());
        }
      }
    }

    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.

    Configure a propriedade Table.description e chame Client.update_table() para enviar a atualização para a API.
    # 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."

    Gemini

    Pode gerar uma descrição da tabela com o Gemini no BigQuery usando estatísticas de dados. As estatísticas de dados são uma forma automática de explorar, compreender e organizar os seus dados.

    Para mais informações sobre as estatísticas de dados, incluindo os passos de configuração, as funções do IAM necessárias e as práticas recomendadas para melhorar a precisão das estatísticas geradas, consulte o artigo Gere estatísticas de dados no BigQuery.

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

      Aceda ao BigQuery

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

    3. No painel de detalhes, clique no separador Esquema.

    4. Clique em Gerar.

      O Gemini gera uma descrição da tabela e estatísticas sobre a tabela. Demora alguns minutos até que as informações sejam preenchidas. Pode ver as estatísticas geradas no separador Estatísticas da tabela.

    5. Para editar e guardar a descrição da tabela gerada, faça o seguinte:

      1. Clique em Ver descrições das colunas.

        A descrição atual da tabela e a descrição gerada são apresentadas.

      2. Na secção Descrição da tabela, clique em Guardar nos detalhes.

      3. Para substituir a descrição atual pela descrição gerada, clique em Copiar descrição sugerida.

      4. Edite a descrição da tabela conforme necessário e, de seguida, clique em Guardar nos detalhes.

        A descrição da tabela é atualizada imediatamente.

      5. Para fechar o painel Pré-visualizar descrições, clique em Fechar.

Atualize a hora de validade de uma tabela

Pode definir um tempo de validade da tabela predefinido ao nível do conjunto de dados ou definir o tempo de validade de uma tabela quando esta é criada. O tempo de expiração de uma tabela é frequentemente designado "tempo de vida" ou TTL.

Quando uma tabela expira, é eliminada juntamente com todos os dados que contém. Se necessário, pode anular a eliminação da tabela expirada no período de viagem no tempo especificado para o conjunto de dados. Consulte o artigo Restaurar tabelas eliminadas para mais informações.

Se definir a data de validade quando a tabela é criada, a data de validade da tabela predefinida do conjunto de dados é ignorada. Se não definir uma validade predefinida da tabela ao nível do conjunto de dados e não definir uma validade da tabela quando a tabela é criada, a tabela nunca expira e tem de a eliminar manualmente.

Em qualquer altura após a criação da tabela, pode atualizar a hora de expiração da tabela das seguintes formas:

  • Usar a Trusted Cloud consola.
  • Usando uma declaração de linguagem de definição de dados (LDD) ALTER TABLE.
  • Usando o comando bq update da ferramenta de linhas de comando bq.
  • Chamar o método da API tables.patch.
  • Usando as bibliotecas cliente.

Para atualizar a hora de validade de uma tabela:

Consola

Não pode adicionar uma hora de validade quando cria uma tabela através da consolaTrusted Cloud . Depois de criar uma tabela, pode adicionar ou atualizar uma data de validade da tabela na página Detalhes da tabela.

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

  2. No painel de detalhes, clique em Detalhes.

  3. Clique no ícone de lápis junto a Informações da tabela

  4. Para Validade da tabela, selecione Especificar data. Em seguida, selecione a data de validade através do widget de calendário.

  5. Clique em Atualizar para guardar. A hora de validade atualizada é apresentada na secção Informações da tabela.

SQL

Use a declaração ALTER TABLE SET OPTIONS. O exemplo seguinte atualiza a hora de expiração de uma tabela denominada mytable:

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

    Aceda ao BigQuery

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

    ALTER TABLE mydataset.mytable
      SET OPTIONS (
        -- Sets table expiration to timestamp 2025-02-03 12:34:56
        expiration_timestamp = TIMESTAMP '2025-02-03 12:34:56');

  3. Clique em Executar.

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

bq

  1. In the Trusted Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Trusted Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Emita o comando bq update com a flag --expiration. Se estiver a atualizar uma tabela 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.table

    Substitua o seguinte:

    • integer: o tempo de vida predefinido (em segundos) para a tabela. O valor mínimo é de 3600 segundos (uma hora). O tempo de expiração é avaliado como a hora atual mais o valor inteiro. Se especificar 0, a expiração da tabela é removida e a tabela nunca expira. As tabelas sem data de validade têm de ser eliminadas manualmente.
    • project_id: o ID do seu projeto.
    • dataset: o nome do conjunto de dados que contém a tabela que está a atualizar.
    • table: o nome da tabela que está a atualizar.

    Exemplos:

    Para atualizar o tempo de validade da tabela mytable no conjunto de dados mydataset para 5 dias (432 000 segundos), introduza o seguinte comando. O conjunto de dados mydataset está no seu projeto predefinido.

    bq update --expiration 432000 mydataset.mytable
    

    Para atualizar o tempo de validade da tabela mytable no conjunto de dados mydataset para 5 dias (432 000 segundos), introduza o seguinte comando. O conjunto de dados mydataset está no projeto myotherproject e não no seu projeto predefinido.

    bq update --expiration 432000 myotherproject:mydataset.mytable
    
  3. API

    Chame o método tables.patch e use a propriedade expirationTime no recurso table para atualizar a validade da tabela em milissegundos. Uma vez que o método tables.update substitui todo o recurso de tabela, 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.

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

    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.

    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.Table;
    import java.util.concurrent.TimeUnit;
    
    public class UpdateTableExpiration {
    
      public static void runUpdateTableExpiration() {
        // TODO(developer): Replace these variables before running the sample.
        String datasetName = "MY_DATASET_NAME";
        String tableName = "MY_TABLE_NAME";
        // Update table expiration to one day.
        Long newExpiration = TimeUnit.MILLISECONDS.convert(1, TimeUnit.DAYS);
        updateTableExpiration(datasetName, tableName, newExpiration);
      }
    
      public static void updateTableExpiration(
          String datasetName, String tableName, Long newExpiration) {
        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();
    
          Table table = bigquery.getTable(datasetName, tableName);
          bigquery.update(table.toBuilder().setExpirationTime(newExpiration).build());
    
          System.out.println("Table expiration updated successfully to " + newExpiration);
        } catch (BigQueryException e) {
          System.out.println("Table expiration 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.

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

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

    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.

    Configure a propriedade Table.expires e chame Client.update_table() para enviar a atualização para a API.
    # Copyright 2022 Google LLC
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #     https://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    
    import datetime
    
    
    def update_table_expiration(table_id, expiration):
        orig_table_id = table_id
        orig_expiration = expiration
    
        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_id = orig_table_id
        expiration = orig_expiration
    
        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}.")
    

Para atualizar o tempo de validade da partição do conjunto de dados predefinido:

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.Dataset;
import java.util.concurrent.TimeUnit;

// Sample to update partition expiration on a dataset.
public class UpdateDatasetPartitionExpiration {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    // Set the default partition expiration (applies to new tables, only) in
    // milliseconds. This example sets the default expiration to 90 days.
    Long newExpiration = TimeUnit.MILLISECONDS.convert(90, TimeUnit.DAYS);
    updateDatasetPartitionExpiration(datasetName, newExpiration);
  }

  public static void updateDatasetPartitionExpiration(String datasetName, Long newExpiration) {
    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();

      Dataset dataset = bigquery.getDataset(datasetName);
      bigquery.update(dataset.toBuilder().setDefaultPartitionExpirationMs(newExpiration).build());
      System.out.println(
          "Dataset default partition expiration updated successfully to " + newExpiration);
    } catch (BigQueryException e) {
      System.out.println("Dataset partition expiration was not updated \n" + e.toString());
    }
  }
}

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.

# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.


def update_dataset_default_partition_expiration(dataset_id: str) -> None:

    from google.cloud import bigquery

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

    # TODO(developer): Set dataset_id to the ID of the dataset to fetch.
    # dataset_id = 'your-project.your_dataset'

    dataset = client.get_dataset(dataset_id)  # Make an API request.

    # Set the default partition expiration (applies to new tables, only) in
    # milliseconds. This example sets the default expiration to 90 days.
    dataset.default_partition_expiration_ms = 90 * 24 * 60 * 60 * 1000

    dataset = client.update_dataset(
        dataset, ["default_partition_expiration_ms"]
    )  # Make an API request.

    print(
        "Updated dataset {}.{} with new default partition expiration {}".format(
            dataset.project, dataset.dataset_id, dataset.default_partition_expiration_ms
        )
    )

Atualize o modo de arredondamento de uma tabela

Pode atualizar o modo de arredondamento predefinido de uma tabela através da declaração LDD ALTER TABLE SET OPTIONS. O exemplo seguinte atualiza o modo de arredondamento predefinido para mytable para ROUND_HALF_EVEN:

ALTER TABLE mydataset.mytable
SET OPTIONS (
  default_rounding_mode = "ROUND_HALF_EVEN");

Quando adiciona um campo NUMERIC ou BIGNUMERIC a uma tabela e não especifica um modo de arredondamento, o modo de arredondamento é automaticamente definido como o modo de arredondamento predefinido da tabela. Alterar o modo de arredondamento predefinido de uma tabela não altera o modo de arredondamento dos campos existentes.

Atualize a definição do esquema de uma tabela

Para mais informações sobre a atualização da definição do esquema de uma tabela, consulte o artigo Modificar esquemas de tabelas.

Mude o nome de uma tabela

Pode mudar o nome de uma tabela depois de a criar através da declaração ALTER TABLE RENAME TO. O exemplo seguinte muda o nome de mytable para mynewtable:

ALTER TABLE mydataset.mytable
RENAME TO mynewtable;

Limitações na mudança do nome das tabelas

  • Se quiser mudar o nome de uma tabela que tenha dados a serem transmitidos, tem de parar a transmissão, confirmar todas as transmissões pendentes e aguardar que o BigQuery indique que a transmissão não está a ser usada.
  • Normalmente, é possível mudar o nome de uma tabela 5 horas após a última operação de streaming, mas pode demorar mais tempo.
  • As ACLs de tabelas e as políticas de acesso ao nível da linha existentes são preservadas, mas as atualizações das ACLs de tabelas e das políticas de acesso ao nível da linha feitas durante a mudança do nome da tabela não são preservadas.
  • Não é possível mudar o nome de uma tabela e executar uma declaração DML nessa tabela em simultâneo.
  • A mudança do nome de uma tabela remove todas as etiquetas do catálogo de dados (descontinuadas) e os aspetos do catálogo universal do Dataplex na tabela.
  • Não pode mudar o nome de tabelas externas.

Copie uma tabela

Esta secção descreve como criar uma cópia completa de uma tabela. Para obter informações sobre outros tipos de cópias de tabelas, consulte os clones de tabelas e as capturas instantâneas de tabelas.

Pode copiar uma tabela das seguintes formas:

  • Use a Trusted Cloud consola.
  • Use o comando bq cp.
  • Use uma declaração de linguagem de definição de dados (LDD) CREATE TABLE COPY.
  • Chame o método da API jobs.insert e configure uma tarefa copy.
  • Use as bibliotecas cliente.

Limitações na cópia de tabelas

As tarefas de cópia de tabelas estão sujeitas às seguintes limitações:

  • Não pode parar uma operação de cópia de tabelas depois de a iniciar. Uma operação de cópia de tabelas é executada de forma assíncrona e não é interrompida mesmo quando cancela a tarefa. Também lhe é cobrada a transferência de dados para uma cópia de tabela entre regiões e o armazenamento na região de destino.
  • Quando copia uma tabela, o nome da tabela de destino tem de cumprir as mesmas convenções de nomenclatura que quando cria uma tabela.
  • As cópias de tabelas estão sujeitas aos limites do BigQuery nas tarefas de cópia.
  • A consola Trusted Cloud só suporta a cópia de uma tabela de cada vez. Não pode substituir uma tabela existente no conjunto de dados de destino. A tabela tem de ter um nome exclusivo no conjunto de dados de destino.
  • A cópia de várias tabelas de origem para uma tabela de destino não é suportada pela consola. Trusted Cloud
  • Quando copia várias tabelas de origem para uma tabela de destino através da API, da ferramenta de linha de comandos bq ou das bibliotecas cliente, todas as tabelas de origem têm de ter esquemas idênticos, incluindo qualquer particionamento ou agrupamento.

    Determinadas atualizações do esquema de tabelas, como a eliminação ou a mudança do nome de colunas, podem fazer com que as tabelas tenham esquemas aparentemente idênticos, mas representações internas diferentes. Isto pode fazer com que uma tarefa de cópia de tabelas falhe com o erro Maximum limit on diverging physical schemas reached. Neste caso, pode usar a declaração CREATE TABLE LIKE para garantir que o esquema da tabela de origem corresponde exatamente ao esquema da tabela de destino.

  • O tempo que o BigQuery demora a copiar tabelas pode variar significativamente entre diferentes execuções, porque o armazenamento subjacente é gerido dinamicamente.

  • Não pode copiar e anexar uma tabela de origem a uma tabela de destino que tenha mais colunas do que a tabela de origem e as colunas adicionais tenham valores predefinidos. Em alternativa, pode executar o comando INSERT destination_table SELECT * FROM source_table para copiar os dados.

  • Se a operação de cópia substituir uma tabela existente, o acesso ao nível da tabela para a tabela existente é mantido. As etiquetas da tabela de origem não são copiadas para a tabela substituída, enquanto as etiquetas da tabela existente são mantidas. No entanto, quando copia tabelas entre regiões, as etiquetas na tabela existente são removidas.

  • Se a operação de cópia criar uma nova tabela, o acesso ao nível da tabela para a nova tabela é determinado pelas políticas de acesso do conjunto de dados no qual a nova tabela é criada. Além disso, as etiquetas são copiadas da tabela de origem para a nova tabela.

  • Quando copia várias tabelas de origem para uma tabela de destino, todas as tabelas de origem têm de ter etiquetas idênticas.

Funções necessárias

Para realizar as tarefas neste documento, precisa das seguintes autorizações.

Funções para copiar tabelas e partições

Para obter as autorizações de que precisa para copiar tabelas e partições, peça ao seu administrador para lhe conceder a função de IAM de editor de dados (roles/bigquery.dataEditor) nos conjuntos de dados de origem e destino. Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Esta função predefinida contém as autorizações necessárias para copiar tabelas e partições. Para ver as autorizações exatas que são necessárias, expanda a secção Autorizações necessárias:

Autorizações necessárias

São necessárias as seguintes autorizações para copiar tabelas e partições:

  • bigquery.tables.getData nos conjuntos de dados de origem e de destino
  • bigquery.tables.get nos conjuntos de dados de origem e de destino
  • bigquery.tables.create no conjunto de dados de destino
  • bigquery.tables.update no conjunto de dados de destino

Também pode conseguir estas autorizações com funções personalizadas ou outras funções predefinidas.

Autorização para executar uma tarefa de cópia

Para receber a autorização de que precisa para executar uma tarefa de cópia, peça ao administrador para lhe conceder a função de IAM de utilizador de tarefas (roles/bigquery.jobUser) nos conjuntos de dados de origem e destino. Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Esta função predefinida contém a autorização bigquery.jobs.create , que é necessária para executar uma tarefa de cópia.

Também pode obter esta autorização com funções personalizadas ou outras funções predefinidas.

Copie uma única tabela de origem

Pode copiar uma única tabela das seguintes formas:

  • Usar a Trusted Cloud consola.
  • Usando o comando bq cp da ferramenta de linhas de comando bq.
  • Usando uma declaração de linguagem de definição de dados (LDD) CREATE TABLE COPY.
  • Chamar o método da API jobs.insert, configurar uma tarefa copy e especificar a propriedade sourceTable.
  • Usando as bibliotecas cliente.

A Trusted Cloud consola e a declaração CREATE TABLE COPY suportam apenas uma tabela de origem e uma tabela de destino numa tarefa de cópia. Para copiar vários ficheiros de origem para uma tabela de destino, tem de usar a ferramenta de linhas de comando bq ou a API.

Para copiar uma única tabela de origem:

Consola

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

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

  3. Na caixa de diálogo Copiar tabela, em Destino:

    • Para Nome do projeto, escolha o projeto que vai armazenar a tabela copiada.
    • Em Nome do conjunto de dados, selecione o conjunto de dados onde quer armazenar a tabela copiada. Os conjuntos de dados de origem e de destino têm de estar na mesma localização.
    • Em Nome da tabela, introduza um nome para a nova tabela. O nome tem de ser exclusivo no conjunto de dados de destino. Não pode substituir uma tabela existente no conjunto de dados de destino através da consola Trusted Cloud . Para mais informações sobre os requisitos dos nomes das tabelas, consulte o artigo Nomenclatura de tabelas.
  4. Clique em Copiar para iniciar a tarefa de cópia.

SQL

Use a declaração CREATE TABLE COPY para copiar uma tabela com o nome table1 para uma nova tabela com o nome table1copy:

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

    Aceda ao BigQuery

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

    CREATE TABLE myproject.mydataset.table1copy
    COPY myproject.mydataset.table1;

  3. Clique em Executar.

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

bq

  1. In the Trusted Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Trusted Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Emita o comando bq cp. As flags opcionais podem ser usadas para controlar a disposição de escrita da tabela de destino:

    • -a ou --append_table anexa os dados da tabela de origem a uma tabela existente no conjunto de dados de destino.
    • -f ou --force substitui uma tabela existente no conjunto de dados de destino e não lhe pede confirmação.
    • -n ou --no_clobber devolve a seguinte mensagem de erro se a tabela existir no conjunto de dados de destino: Table 'project_id:dataset.table' already exists, skipping. Se -n não for especificado, o comportamento predefinido é pedir-lhe que escolha se quer substituir a tabela de destino.
    • --destination_kms_key é a chave do Cloud KMS gerida pelo cliente usada para encriptar a tabela de destino.

    A funcionalidade --destination_kms_key não é demonstrada aqui. Consulte o artigo Proteger dados com chaves do Serviço de gestão de chaves na nuvem para mais informações.

    Se o conjunto de dados de origem ou de destino estiver num projeto diferente do seu projeto predefinido, adicione o ID do projeto aos nomes dos conjuntos de dados no seguinte formato: project_id:dataset.

    (Opcional) Forneça a flag --location e defina o valor para a sua localização.

    bq --location=location cp \
    -a -f -n \
    project_id:dataset.source_table \
    project_id:dataset.destination_table

    Substitua o seguinte:

    • location: o nome da sua localização. A flag --location é opcional. Por exemplo, se estiver a usar o BigQuery na região de Tóquio, pode definir o valor da flag como asia-northeast1. Pode predefinir um valor para a localização através do ficheiro .bigqueryrc.
    • project_id: o ID do seu projeto.
    • dataset: o nome do conjunto de dados de origem ou de destino.
    • source_table: a tabela que está a copiar.
    • destination_table: o nome da tabela no conjunto de dados de destino.

    Exemplos:

    Para copiar a tabela mydataset.mytable para a tabela mydataset2.mytable2, introduza o seguinte comando. Ambos os conjuntos de dados estão no seu projeto predefinido.

    bq cp mydataset.mytable mydataset2.mytable2
    

    Para copiar a tabela mydataset.mytable e substituir uma tabela de destino com o mesmo nome, introduza o seguinte comando. O conjunto de dados de origem está no seu projeto predefinido. O conjunto de dados de destino está no projeto myotherproject. O atalho -f é usado para substituir a tabela de destino sem um comando.

    bq cp -f \
    mydataset.mytable \
    myotherproject:myotherdataset.mytable

    Para copiar a tabela mydataset.mytable e devolver um erro se o conjunto de dados de destino contiver uma tabela com o mesmo nome, introduza o seguinte comando. O conjunto de dados de origem está no seu projeto predefinido. O conjunto de dados de destino está no projeto myotherproject. O atalho -n é usado para evitar substituir uma tabela com o mesmo nome.

    bq cp -n \
    mydataset.mytable \
    myotherproject:myotherdataset.mytable

    Para copiar a tabela mydataset.mytable e anexar os dados a uma tabela de destino com o mesmo nome, introduza o seguinte comando. O conjunto de dados de origem está no seu projeto predefinido. O conjunto de dados de destino está no projeto myotherproject. O atalho - a é usado para anexar à tabela de destino.

    bq cp -a mydataset.mytable myotherproject:myotherdataset.mytable
    
  3. API

    Pode copiar uma tabela existente através da API chamando o método bigquery.jobs.insert e configurando uma tarefa copy. Especifique a sua localização na propriedade location na secção jobReference do recurso de trabalho.

    Tem de especificar os seguintes valores na configuração da tarefa:

    "copy": {
          "sourceTable": {       // Required
            "projectId": string, // Required
            "datasetId": string, // Required
            "tableId": string    // Required
          },
          "destinationTable": {  // Required
            "projectId": string, // Required
            "datasetId": string, // Required
            "tableId": string    // Required
          },
          "createDisposition": string,  // Optional
          "writeDisposition": string,   // Optional
        },
    

    Onde sourceTable fornece informações sobre a tabela a copiar, destinationTable fornece informações sobre a nova tabela, createDisposition especifica se deve criar a tabela se não existir e writeDisposition especifica se deve substituir ou anexar a uma tabela existente.

    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.

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

    
    using Google.Apis.Bigquery.v2.Data;
    using Google.Cloud.BigQuery.V2;
    using System;
    
    public class BigQueryCopyTable
    {
        public void CopyTable(
            string projectId = "your-project-id",
            string destinationDatasetId = "your_dataset_id"
        )
        {
            BigQueryClient client = BigQueryClient.Create(projectId);
            TableReference sourceTableRef = new TableReference()
            {
                TableId = "shakespeare",
                DatasetId = "samples",
                ProjectId = "bigquery-public-data"
            };
            TableReference destinationTableRef = client.GetTableReference(
                destinationDatasetId, "destination_table");
            BigQueryJob job = client.CreateCopyJob(
                sourceTableRef, destinationTableRef)
                .PollUntilCompleted() // Wait for the job to complete.
                .ThrowOnAnyError();
    
            // Retrieve destination table
            BigQueryTable destinationTable = client.GetTable(destinationTableRef);
            Console.WriteLine(
                $"Copied {destinationTable.Resource.NumRows} rows from table "
                + $"{sourceTableRef.DatasetId}.{sourceTableRef.TableId} "
                + $"to {destinationTable.FullyQualifiedId}."
            );
        }
    }

    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"
    
    	"cloud.google.com/go/bigquery"
    )
    
    // copyTable demonstrates copying a table from a source to a destination, and
    // allowing the copy to overwrite existing data by using truncation.
    func copyTable(projectID, datasetID, srcID, dstID string) error {
    	// projectID := "my-project-id"
    	// datasetID := "mydataset"
    	// srcID := "sourcetable"
    	// dstID := "destinationtable"
    	ctx := context.Background()
    	client, err := bigquery.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("bigquery.NewClient: %v", err)
    	}
    	defer client.Close()
    
    	dataset := client.Dataset(datasetID)
    	copier := dataset.Table(dstID).CopierFrom(dataset.Table(srcID))
    	copier.WriteDisposition = bigquery.WriteTruncate
    	job, err := copier.Run(ctx)
    	if err != nil {
    		return err
    	}
    	status, err := job.Wait(ctx)
    	if err != nil {
    		return err
    	}
    	if err := status.Err(); 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.

    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.CopyJobConfiguration;
    import com.google.cloud.bigquery.Job;
    import com.google.cloud.bigquery.JobInfo;
    import com.google.cloud.bigquery.TableId;
    
    public class CopyTable {
    
      public static void runCopyTable() {
        // TODO(developer): Replace these variables before running the sample.
        String destinationDatasetName = "MY_DESTINATION_DATASET_NAME";
        String destinationTableId = "MY_DESTINATION_TABLE_NAME";
        String sourceDatasetName = "MY_SOURCE_DATASET_NAME";
        String sourceTableId = "MY_SOURCE_TABLE_NAME";
    
        copyTable(sourceDatasetName, sourceTableId, destinationDatasetName, destinationTableId);
      }
    
      public static void copyTable(
          String sourceDatasetName,
          String sourceTableId,
          String destinationDatasetName,
          String destinationTableId) {
        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 sourceTable = TableId.of(sourceDatasetName, sourceTableId);
          TableId destinationTable = TableId.of(destinationDatasetName, destinationTableId);
    
          // For more information on CopyJobConfiguration see:
          // https://googleapis.dev/java/google-cloud-clients/latest/com/google/cloud/bigquery/JobConfiguration.html
          CopyJobConfiguration configuration =
              CopyJobConfiguration.newBuilder(destinationTable, sourceTable).build();
    
          // For more information on Job see:
          // https://googleapis.dev/java/google-cloud-clients/latest/index.html?com/google/cloud/bigquery/package-summary.html
          Job job = bigquery.create(JobInfo.of(configuration));
    
          // Blocks until this job completes its execution, either failing or succeeding.
          Job completedJob = job.waitFor();
          if (completedJob == null) {
            System.out.println("Job not executed since it no longer exists.");
            return;
          } else if (completedJob.getStatus().getError() != null) {
            System.out.println(
                "BigQuery was unable to copy table due to an error: \n" + job.getStatus().getError());
            return;
          }
          System.out.println("Table copied successfully.");
        } catch (BigQueryException | InterruptedException e) {
          System.out.println("Table copying job was interrupted. \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.

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

    // Import the Google Cloud client library and create a client
    const {BigQuery} = require('@google-cloud/bigquery');
    const bigquery = new BigQuery();
    
    async function copyTable() {
      // Copies src_dataset:src_table to dest_dataset:dest_table.
    
      /**
       * TODO(developer): Uncomment the following lines before running the sample
       */
      // const srcDatasetId = "my_src_dataset";
      // const srcTableId = "my_src_table";
      // const destDatasetId = "my_dest_dataset";
      // const destTableId = "my_dest_table";
    
      // Copy the table contents into another table
      const [job] = await bigquery
        .dataset(srcDatasetId)
        .table(srcTableId)
        .copy(bigquery.dataset(destDatasetId).table(destTableId));
    
      console.log(`Job ${job.id} completed.`);
    
      // Check the job's status for errors
      const errors = job.status.errors;
      if (errors && errors.length > 0) {
        throw errors;
      }
    }

    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.

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

    use Google\Cloud\BigQuery\BigQueryClient;
    use Google\Cloud\Core\ExponentialBackoff;
    
    /** Uncomment and populate these variables in your code */
    // $projectId = 'The Google project ID';
    // $datasetId = 'The BigQuery dataset ID';
    // $sourceTableId   = 'The BigQuery table ID to copy from';
    // $destinationTableId = 'The BigQuery table ID to copy to';
    
    $bigQuery = new BigQueryClient([
        'projectId' => $projectId,
    ]);
    $dataset = $bigQuery->dataset($datasetId);
    $sourceTable = $dataset->table($sourceTableId);
    $destinationTable = $dataset->table($destinationTableId);
    $copyConfig = $sourceTable->copy($destinationTable);
    $job = $sourceTable->runJob($copyConfig);
    
    // poll the job until it is complete
    $backoff = new ExponentialBackoff(10);
    $backoff->execute(function () use ($job) {
        print('Waiting for job to complete' . PHP_EOL);
        $job->reload();
        if (!$job->isComplete()) {
            throw new Exception('Job has not yet completed', 500);
        }
    });
    // check if the job has errors
    if (isset($job->info()['status']['errorResult'])) {
        $error = $job->info()['status']['errorResult']['message'];
        printf('Error running job: %s' . PHP_EOL, $error);
    } else {
        print('Table copied successfully' . PHP_EOL);
    }

    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 source_table_id to the ID of the original table.
    # source_table_id = "your-project.source_dataset.source_table"
    
    # TODO(developer): Set destination_table_id to the ID of the destination table.
    # destination_table_id = "your-project.destination_dataset.destination_table"
    
    job = client.copy_table(source_table_id, destination_table_id)
    job.result()  # Wait for the job to complete.
    
    print("A copy of the table created.")

Copie várias tabelas de origem

Pode copiar várias tabelas de origem para uma tabela de destino das seguintes formas:

  • Usando o comando bq cp da ferramenta de linhas de comando bq.
  • Chamar o método jobs.insert, configurar uma tarefa copy e especificar a propriedade sourceTables.
  • Usando as bibliotecas cliente.

Todas as tabelas de origem têm de ter esquemas e etiquetas idênticos e só é permitida uma tabela de destino.

As tabelas de origem têm de ser especificadas como uma lista separada por vírgulas. Não pode usar carateres universais quando copia várias tabelas de origem.

Para copiar várias tabelas de origem, selecione uma das seguintes opções:

bq

  1. In the Trusted Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Trusted Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Emita o comando bq cp e inclua várias tabelas de origem como uma lista separada por vírgulas. As flags opcionais podem ser usadas para controlar a disposição de escrita da tabela de destino:

    • -a ou --append_table anexa os dados das tabelas de origem a uma tabela existente no conjunto de dados de destino.
    • -f ou --force substitui uma tabela de destino existente no conjunto de dados de destino e não lhe pede confirmação.
    • -n ou --no_clobber devolve a seguinte mensagem de erro se a tabela existir no conjunto de dados de destino: Table 'project_id:dataset.table' already exists, skipping. se -n não for especificado, o comportamento predefinido é pedir-lhe que escolha se quer substituir a tabela de destino.
    • --destination_kms_key é a chave do Cloud Key Management Service gerida pelo cliente usada para encriptar a tabela de destino.

    A funcionalidade --destination_kms_key não é demonstrada aqui. Consulte o artigo Proteger dados com chaves do Serviço de gestão de chaves na nuvem para mais informações.

    Se o conjunto de dados de origem ou de destino estiver num projeto diferente do seu projeto predefinido, adicione o ID do projeto aos nomes dos conjuntos de dados no seguinte formato: project_id:dataset.

    (Opcional) Forneça a flag --location e defina o valor para a sua localização.

    bq --location=location cp \
    -a -f -n \
    project_id:dataset.source_table,project_id:dataset.source_table \
    project_id:dataset.destination_table

    Substitua o seguinte:

    • location: o nome da sua localização. A flag --location é opcional. Por exemplo, se estiver a usar o BigQuery na região de Tóquio, pode definir o valor da flag como asia-northeast1. Pode predefinir um valor para a localização através do ficheiro .bigqueryrc.
    • project_id: o ID do seu projeto.
    • dataset: o nome do conjunto de dados de origem ou de destino.
    • source_table: a tabela que está a copiar.
    • destination_table: o nome da tabela no conjunto de dados de destino.

    Exemplos:

    Para copiar a tabela mydataset.mytable e a tabela mydataset.mytable2 para a tabela mydataset2.tablecopy, introduza o seguinte comando . Todos os conjuntos de dados estão no seu projeto predefinido.

    bq cp \
    mydataset.mytable,mydataset.mytable2 \
    mydataset2.tablecopy

    Para copiar a tabela mydataset.mytable e a tabela mydataset.mytable2 para a tabela myotherdataset.mytable e substituir uma tabela de destino com o mesmo nome, introduza o seguinte comando. O conjunto de dados de destino está no projeto myotherproject e não no seu projeto predefinido. O atalho -f é usado para substituir a tabela de destino sem um comando.

    bq cp -f \
    mydataset.mytable,mydataset.mytable2 \
    myotherproject:myotherdataset.mytable

    Para copiar a tabela myproject:mydataset.mytable e a tabela myproject:mydataset.mytable2 e devolver um erro se o conjunto de dados de destino contiver uma tabela com o mesmo nome, introduza o seguinte comando. O conjunto de dados de destino está no projeto myotherproject. O atalho -n é usado para evitar a substituição de uma tabela com o mesmo nome.

    bq cp -n \
    myproject:mydataset.mytable,myproject:mydataset.mytable2 \
    myotherproject:myotherdataset.mytable

    Para copiar a tabela mydataset.mytable e a tabela mydataset.mytable2 e anexar os dados a uma tabela de destino com o mesmo nome, introduza o seguinte comando. O conjunto de dados de origem está no seu projeto predefinido. O conjunto de dados de destino está no projeto myotherproject. O atalho -a é usado para anexar à tabela de destino.

    bq cp -a \
    mydataset.mytable,mydataset.mytable2 \
    myotherproject:myotherdataset.mytable
  3. API

    Para copiar várias tabelas através da API, chame o método jobs.insert, configure uma tarefa copy e especifique a propriedade sourceTables.

    Especifique a sua região na propriedade location na secção jobReference do recurso de trabalho.

    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"
    
    	"cloud.google.com/go/bigquery"
    )
    
    // copyMultiTable demonstrates using a copy job to copy multiple source tables into a single destination table.
    func copyMultiTable(projectID, srcDatasetID string, srcTableIDs []string, dstDatasetID, dstTableID string) error {
    	// projectID := "my-project-id"
    	// srcDatasetID := "sourcedataset"
    	// srcTableIDs := []string{"table1","table2"}
    	// dstDatasetID = "destinationdataset"
    	// dstTableID = "destinationtable"
    	ctx := context.Background()
    	client, err := bigquery.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("bigquery.NewClient: %v", err)
    	}
    	defer client.Close()
    
    	srcDataset := client.Dataset(srcDatasetID)
    	dstDataset := client.Dataset(dstDatasetID)
    	var tableRefs []*bigquery.Table
    	for _, v := range srcTableIDs {
    		tableRefs = append(tableRefs, srcDataset.Table(v))
    	}
    	copier := dstDataset.Table(dstTableID).CopierFrom(tableRefs...)
    	copier.WriteDisposition = bigquery.WriteTruncate
    	job, err := copier.Run(ctx)
    	if err != nil {
    		return err
    	}
    	status, err := job.Wait(ctx)
    	if err != nil {
    		return err
    	}
    	if err := status.Err(); 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.

    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.CopyJobConfiguration;
    import com.google.cloud.bigquery.Job;
    import com.google.cloud.bigquery.JobInfo;
    import com.google.cloud.bigquery.TableId;
    import java.util.Arrays;
    
    public class CopyMultipleTables {
    
      public static void runCopyMultipleTables() {
        // TODO(developer): Replace these variables before running the sample.
        String destinationDatasetName = "MY_DATASET_NAME";
        String destinationTableId = "MY_TABLE_NAME";
        copyMultipleTables(destinationDatasetName, destinationTableId);
      }
    
      public static void copyMultipleTables(String destinationDatasetName, String destinationTableId) {
        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 destinationTable = TableId.of(destinationDatasetName, destinationTableId);
    
          // For more information on CopyJobConfiguration see:
          // https://googleapis.dev/java/google-cloud-clients/latest/com/google/cloud/bigquery/JobConfiguration.html
          CopyJobConfiguration configuration =
              CopyJobConfiguration.newBuilder(
                      destinationTable,
                      Arrays.asList(
                          TableId.of(destinationDatasetName, "table1"),
                          TableId.of(destinationDatasetName, "table2")))
                  .build();
    
          // For more information on Job see:
          // https://googleapis.dev/java/google-cloud-clients/latest/index.html?com/google/cloud/bigquery/package-summary.html
          Job job = bigquery.create(JobInfo.of(configuration));
    
          // Blocks until this job completes its execution, either failing or succeeding.
          Job completedJob = job.waitFor();
          if (completedJob == null) {
            System.out.println("Job not executed since it no longer exists.");
            return;
          } else if (completedJob.getStatus().getError() != null) {
            System.out.println(
                "BigQuery was unable to copy tables due to an error: \n" + job.getStatus().getError());
            return;
          }
          System.out.println("Table copied successfully.");
        } catch (BigQueryException | InterruptedException e) {
          System.out.println("Table copying job was interrupted. \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.

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

    // Import the Google Cloud client library
    const {BigQuery} = require('@google-cloud/bigquery');
    const bigquery = new BigQuery();
    
    async function copyTableMultipleSource() {
      // Copy multiple source tables to a given destination.
    
      /**
       * TODO(developer): Uncomment the following lines before running the sample.
       */
      // const datasetId = "my_dataset";
      // sourceTable = 'my_table';
      // destinationTable = 'testing';
    
      // Create a client
      const dataset = bigquery.dataset(datasetId);
    
      const metadata = {
        createDisposition: 'CREATE_NEVER',
        writeDisposition: 'WRITE_TRUNCATE',
      };
    
      // Create table references
      const table = dataset.table(sourceTable);
      const yourTable = dataset.table(destinationTable);
    
      // Copy table
      const [apiResponse] = await table.copy(yourTable, metadata);
      console.log(apiResponse.configuration.copy);
    }

    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 dest_table_id to the ID of the destination table.
    # dest_table_id = "your-project.your_dataset.your_table_name"
    
    # TODO(developer): Set table_ids to the list of the IDs of the original tables.
    # table_ids = ["your-project.your_dataset.your_table_name", ...]
    
    job = client.copy_table(table_ids, dest_table_id)  # Make an API request.
    job.result()  # Wait for the job to complete.
    
    print("The tables {} have been appended to {}".format(table_ids, dest_table_id))

Copie tabelas entre regiões

Pode copiar uma tabela, uma cópia instantânea da tabela ou um clone da tabela de uma região do BigQuery ou de várias regiões para outra. Isto inclui todas as tabelas às quais foi aplicada a encriptação do Cloud KMS (CMEK) gerida pelo cliente.

A cópia de uma tabela entre regiões incorre em custos de transferência de dados adicionais de acordo com os preços do BigQuery. São incorridos custos adicionais mesmo que cancele a tarefa de cópia de tabelas entre regiões antes de esta ser concluída.

Para copiar uma tabela entre regiões, selecione uma das seguintes opções:

bq

  1. In the Trusted Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Trusted Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Execute o comando bq cp:

  3.    bq cp \
       -f -n \
       SOURCE_PROJECT:SOURCE_DATASET.SOURCE_TABLE \
       DESTINATION_PROJECT:DESTINATION_DATASET.DESTINATION_TABLE
       

    Substitua o seguinte:

    • SOURCE_PROJECT: ID do projeto de origem. Se o conjunto de dados de origem estiver num projeto diferente do seu projeto predefinido, adicione o ID do projeto ao nome do conjunto de dados de origem.

    • DESTINATION_PROJECT: ID do projeto de destino. Se o conjunto de dados de destino estiver num projeto diferente do seu projeto predefinido, adicione o ID do projeto ao nome do conjunto de dados de destino.

    • SOURCE_DATASET: o nome do conjunto de dados de origem.

    • DESTINATION_DATASET: o nome do conjunto de dados de destino.

    • SOURCE_TABLE: a tabela que está a copiar.

    • DESTINATION_TABLE: o nome da tabela no conjunto de dados de destino.

    O exemplo seguinte é um comando que copia a tabela mydataset_us.mytable da região múltipla us para a tabela mydataset_eu.mytable2 na região múltipla eu. Ambos os conjuntos de dados estão no projeto predefinido.

    bq cp --sync=false mydataset_us.mytable mydataset_eu.mytable2
    

    Para copiar uma tabela entre regiões para um conjunto de dados de destino com CMEK ativada, tem de ativar a CMEK na tabela com uma chave da região da tabela. A CMEK na tabela não tem de ser a mesma CMEK usada pelo conjunto de dados de destino. O exemplo seguinte copia uma tabela com CMEK para um conjunto de dados de destino através do comando bq cp.

    bq cp source-project-id:source-dataset-id.source-table-id destination-project-id:destination-dataset-id.destination-table-id
    

    Por outro lado, para copiar uma tabela com CMEK entre regiões para um conjunto de dados de destino, pode ativar a CMEK no conjunto de dados de destino com uma chave da região do conjunto de dados de destino. Também pode usar a flag destination_kms_keys no comando bq cp, conforme mostrado no exemplo seguinte:

    bq cp --destination_kms_key=projects/project_id/locations/eu/keyRings/eu_key/cryptoKeys/eu_region mydataset_us.mytable mydataset_eu.mytable2
    

    API

    Para copiar uma tabela entre regiões através da API, chame o método jobs.insert e configure uma tarefa copy.

    Especifique a sua região na propriedade location na secção jobReference do recurso de trabalho.

    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.

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

    
    using Google.Apis.Bigquery.v2.Data;
    using Google.Cloud.BigQuery.V2;
    using System;
    
    public class BigQueryCopyTable
    {
        public void CopyTable(
            string projectId = "your-project-id",
            string destinationDatasetId = "your_dataset_id"
        )
        {
            BigQueryClient client = BigQueryClient.Create(projectId);
            TableReference sourceTableRef = new TableReference()
            {
                TableId = "shakespeare",
                DatasetId = "samples",
                ProjectId = "bigquery-public-data"
            };
            TableReference destinationTableRef = client.GetTableReference(
                destinationDatasetId, "destination_table");
            BigQueryJob job = client.CreateCopyJob(
                sourceTableRef, destinationTableRef)
                .PollUntilCompleted() // Wait for the job to complete.
                .ThrowOnAnyError();
    
            // Retrieve destination table
            BigQueryTable destinationTable = client.GetTable(destinationTableRef);
            Console.WriteLine(
                $"Copied {destinationTable.Resource.NumRows} rows from table "
                + $"{sourceTableRef.DatasetId}.{sourceTableRef.TableId} "
                + $"to {destinationTable.FullyQualifiedId}."
            );
        }
    }

    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"
    
    	"cloud.google.com/go/bigquery"
    )
    
    // copyTable demonstrates copying a table from a source to a destination, and
    // allowing the copy to overwrite existing data by using truncation.
    func copyTable(projectID, datasetID, srcID, dstID string) error {
    	// projectID := "my-project-id"
    	// datasetID := "mydataset"
    	// srcID := "sourcetable"
    	// dstID := "destinationtable"
    	ctx := context.Background()
    	client, err := bigquery.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("bigquery.NewClient: %v", err)
    	}
    	defer client.Close()
    
    	dataset := client.Dataset(datasetID)
    	copier := dataset.Table(dstID).CopierFrom(dataset.Table(srcID))
    	copier.WriteDisposition = bigquery.WriteTruncate
    	job, err := copier.Run(ctx)
    	if err != nil {
    		return err
    	}
    	status, err := job.Wait(ctx)
    	if err != nil {
    		return err
    	}
    	if err := status.Err(); 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.

    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.CopyJobConfiguration;
    import com.google.cloud.bigquery.Job;
    import com.google.cloud.bigquery.JobInfo;
    import com.google.cloud.bigquery.TableId;
    
    public class CopyTable {
    
      public static void runCopyTable() {
        // TODO(developer): Replace these variables before running the sample.
        String destinationDatasetName = "MY_DESTINATION_DATASET_NAME";
        String destinationTableId = "MY_DESTINATION_TABLE_NAME";
        String sourceDatasetName = "MY_SOURCE_DATASET_NAME";
        String sourceTableId = "MY_SOURCE_TABLE_NAME";
    
        copyTable(sourceDatasetName, sourceTableId, destinationDatasetName, destinationTableId);
      }
    
      public static void copyTable(
          String sourceDatasetName,
          String sourceTableId,
          String destinationDatasetName,
          String destinationTableId) {
        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 sourceTable = TableId.of(sourceDatasetName, sourceTableId);
          TableId destinationTable = TableId.of(destinationDatasetName, destinationTableId);
    
          // For more information on CopyJobConfiguration see:
          // https://googleapis.dev/java/google-cloud-clients/latest/com/google/cloud/bigquery/JobConfiguration.html
          CopyJobConfiguration configuration =
              CopyJobConfiguration.newBuilder(destinationTable, sourceTable).build();
    
          // For more information on Job see:
          // https://googleapis.dev/java/google-cloud-clients/latest/index.html?com/google/cloud/bigquery/package-summary.html
          Job job = bigquery.create(JobInfo.of(configuration));
    
          // Blocks until this job completes its execution, either failing or succeeding.
          Job completedJob = job.waitFor();
          if (completedJob == null) {
            System.out.println("Job not executed since it no longer exists.");
            return;
          } else if (completedJob.getStatus().getError() != null) {
            System.out.println(
                "BigQuery was unable to copy table due to an error: \n" + job.getStatus().getError());
            return;
          }
          System.out.println("Table copied successfully.");
        } catch (BigQueryException | InterruptedException e) {
          System.out.println("Table copying job was interrupted. \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.

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

    // Import the Google Cloud client library and create a client
    const {BigQuery} = require('@google-cloud/bigquery');
    const bigquery = new BigQuery();
    
    async function copyTable() {
      // Copies src_dataset:src_table to dest_dataset:dest_table.
    
      /**
       * TODO(developer): Uncomment the following lines before running the sample
       */
      // const srcDatasetId = "my_src_dataset";
      // const srcTableId = "my_src_table";
      // const destDatasetId = "my_dest_dataset";
      // const destTableId = "my_dest_table";
    
      // Copy the table contents into another table
      const [job] = await bigquery
        .dataset(srcDatasetId)
        .table(srcTableId)
        .copy(bigquery.dataset(destDatasetId).table(destTableId));
    
      console.log(`Job ${job.id} completed.`);
    
      // Check the job's status for errors
      const errors = job.status.errors;
      if (errors && errors.length > 0) {
        throw errors;
      }
    }

    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.

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

    use Google\Cloud\BigQuery\BigQueryClient;
    use Google\Cloud\Core\ExponentialBackoff;
    
    /** Uncomment and populate these variables in your code */
    // $projectId = 'The Google project ID';
    // $datasetId = 'The BigQuery dataset ID';
    // $sourceTableId   = 'The BigQuery table ID to copy from';
    // $destinationTableId = 'The BigQuery table ID to copy to';
    
    $bigQuery = new BigQueryClient([
        'projectId' => $projectId,
    ]);
    $dataset = $bigQuery->dataset($datasetId);
    $sourceTable = $dataset->table($sourceTableId);
    $destinationTable = $dataset->table($destinationTableId);
    $copyConfig = $sourceTable->copy($destinationTable);
    $job = $sourceTable->runJob($copyConfig);
    
    // poll the job until it is complete
    $backoff = new ExponentialBackoff(10);
    $backoff->execute(function () use ($job) {
        print('Waiting for job to complete' . PHP_EOL);
        $job->reload();
        if (!$job->isComplete()) {
            throw new Exception('Job has not yet completed', 500);
        }
    });
    // check if the job has errors
    if (isset($job->info()['status']['errorResult'])) {
        $error = $job->info()['status']['errorResult']['message'];
        printf('Error running job: %s' . PHP_EOL, $error);
    } else {
        print('Table copied successfully' . PHP_EOL);
    }

    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 source_table_id to the ID of the original table.
    # source_table_id = "your-project.source_dataset.source_table"
    
    # TODO(developer): Set destination_table_id to the ID of the destination table.
    # destination_table_id = "your-project.destination_dataset.destination_table"
    
    job = client.copy_table(source_table_id, destination_table_id)
    job.result()  # Wait for the job to complete.
    
    print("A copy of the table created.")

Limitações

A cópia de uma tabela entre regiões está sujeita às seguintes limitações:

  • Não pode copiar uma tabela através da Trusted Cloud consola nem da declaração TABLE COPY DDL.
  • Não pode copiar uma tabela se existirem etiquetas de políticas na tabela de origem.
  • Não é possível copiar uma tabela se a tabela de origem tiver mais de 20 TiB físicos. Consulte obter informações sobre tabelas para ver o tamanho físico da tabela de origem. Além disso, a cópia de tabelas de origem com mais de 1 TiB físico entre regiões pode exigir várias tentativas para serem copiadas com êxito.
  • Não é possível copiar políticas de IAM associadas às tabelas. Pode aplicar as mesmas políticas ao destino após a conclusão da cópia.
  • Se a operação de cópia substituir uma tabela existente, as etiquetas na tabela existente são removidas.
  • Não é possível copiar várias tabelas de origem para uma única tabela de destino.
  • Não é possível copiar tabelas no modo de anexação.
  • As informações de viagem no tempo não são copiadas para a região de destino.
  • Quando copia um clone ou uma captura instantânea de uma tabela para uma nova região, é criada uma cópia completa da tabela. Isto implica custos de armazenamento adicionais.

Veja a utilização atual da quota

Pode ver a sua utilização atual de tarefas de consulta, carregamento, extração ou cópia executando uma consulta INFORMATION_SCHEMA para ver metadados sobre as tarefas executadas durante um período especificado. Pode comparar a sua utilização atual com o limite da quota para determinar a utilização da quota para um tipo específico de tarefa. A seguinte consulta de exemplo usa a vista INFORMATION_SCHEMA.JOBS para listar o número de tarefas de consulta, carregamento, extração e cópia por projeto:

SELECT
  sum(case  when job_type="QUERY" then 1 else 0 end) as QRY_CNT,
  sum(case  when job_type="LOAD" then 1 else 0 end) as LOAD_CNT,
  sum(case  when job_type="EXTRACT" then 1 else 0 end) as EXT_CNT,
  sum(case  when job_type="COPY" then 1 else 0 end) as CPY_CNT
FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
WHERE date(creation_time)= CURRENT_DATE()

Para ver os limites de quota para tarefas de cópia, consulte o artigo Quotas e limites – Tarefas de cópia.

Elimine tabelas

Pode eliminar uma tabela das seguintes formas:

  • Usar a Trusted Cloud consola.
  • Usando uma declaração de linguagem de definição de dados (LDD) DROP TABLE.
  • Usando o comando bq rm da ferramenta de linhas de comando bq.
  • Chamar o método da API tables.delete.
  • Usando as bibliotecas cliente.

Para eliminar todas as tabelas no conjunto de dados, elimine o conjunto de dados.

Quando elimina uma tabela, todos os dados na tabela também são eliminados. Para eliminar automaticamente as tabelas após um período especificado, defina a expiração predefinida da tabela para o conjunto de dados ou defina o prazo de validade quando criar a tabela.

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

Funções necessárias

Para receber as autorizações de que precisa para eliminar uma tabela, peça ao seu administrador para lhe conceder a função de IAM Editor de dados (roles/bigquery.dataEditor) no conjunto de dados. Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Esta função predefinida contém as autorizações necessárias para eliminar uma tabela. Para ver as autorizações exatas que são necessárias, expanda a secção Autorizações necessárias:

Autorizações necessárias

São necessárias as seguintes autorizações para eliminar uma tabela:

  • bigquery.tables.delete
  • bigquery.tables.get

Também pode conseguir estas autorizações com funções personalizadas ou outras funções predefinidas.

Elimine uma tabela

Para eliminar uma tabela:

Consola

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

  2. No painel de detalhes, clique em Eliminar tabela.

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

SQL

Use a declaração DROP TABLE. O exemplo seguinte elimina uma tabela com o nome mytable:

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

    Aceda ao BigQuery

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

    DROP TABLE mydataset.mytable;

  3. Clique em Executar.

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

bq

  1. In the Trusted Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Trusted Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Use o comando bq rm com a flag --table (ou o atalho -t) para eliminar uma tabela. Quando usa a ferramenta de linhas de comando bq para remover uma tabela, tem de confirmar a ação. Pode usar a flag --force (ou o atalho -f) para ignorar a confirmação.

    Se a tabela estiver num conjunto de dados num projeto diferente do 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.table

    Substitua o seguinte:

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

    Exemplos:

    Para eliminar a tabela mytable do conjunto de dados mydataset, introduza o seguinte comando. O conjunto de dados mydataset está no seu projeto predefinido.

    bq rm -t mydataset.mytable
    

    Para eliminar a tabela mytable do conjunto de dados mydataset, introduza o seguinte comando. O conjunto de dados mydataset está no projeto myotherproject e não no seu projeto predefinido.

    bq rm -t myotherproject:mydataset.mytable
    

    Para eliminar a tabela mytable do conjunto de dados mydataset, introduza o seguinte comando. O conjunto de dados mydataset está no seu projeto predefinido. O comando usa o atalho -f para ignorar a confirmação.

    bq rm -f -t mydataset.mytable
    
  3. API

    Chame o método da API tables.delete e especifique a tabela 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.

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

    
    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.

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

    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.

    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;
    
    public class DeleteTable {
    
      public static void runDeleteTable() {
        // TODO(developer): Replace these variables before running the sample.
        String datasetName = "MY_DATASET_NAME";
        String tableName = "MY_TABLE_NAME";
        deleteTable(datasetName, tableName);
      }
    
      public static void deleteTable(String datasetName, String tableName) {
        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();
          boolean success = bigquery.delete(TableId.of(datasetName, tableName));
          if (success) {
            System.out.println("Table deleted successfully");
          } else {
            System.out.println("Table was not found");
          }
        } catch (BigQueryException e) {
          System.out.println("Table was not deleted. \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.

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

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

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

    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.

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

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

    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 tabelas eliminadas

Para saber como restaurar ou anular a eliminação de tabelas eliminadas, consulte o artigo Restaure tabelas eliminadas.

Segurança da mesa

Para controlar o acesso a tabelas no BigQuery, consulte o artigo Controle o acesso a recursos com a IAM.

O que se segue?