Como gerenciar tabela

Neste documento, você aprende a gerenciar tabelas no BigQuery das seguintes maneiras:

  • Atualizar uma tabela:
    • tempo de expiração
    • descrição
    • definição do esquema
    • rótulos
  • renomear (copiar) uma tabela;
  • copiar uma tabela;
  • excluir uma tabela;
  • restaurar uma tabela excluída.

Para mais detalhes sobre como criar e usar tabelas, consulte Como criar e usar tabelas. A página inclui como receber informações sobre tabelas, como listá-las e como controlar o acesso aos dados delas.

Como atualizar propriedades da tabela

É possível atualizar estas propriedades:

Permissões exigidas

Para atualizar as propriedades da tabela, é preciso ter acesso de WRITER no nível do conjunto de dados ou um papel de IAM para envolvidos no projeto que inclua as permissões bigquery.tables.update necessárias. Os seguintes papéis do IAM predefinidos para envolvidos no projeto incluem permissões bigquery.tables.update:

Além disso, como o papel bigquery.user tem permissões bigquery.datasets.create, um usuário atribuído ao papel bigquery.user pode atualizar qualquer tabela criada por ele no conjunto de dados. Quando um usuário com papel bigquery.user cria um conjunto de dados, ele recebe acesso OWNER ao conjunto de dados. O acesso OWNER concede ao usuário o controle total sobre o conjunto de dados e de todas as tabelas e visualizações nele.

Para saber mais sobre papéis e permissões do IAM no BigQuery, consulte Controle de acesso.

Como atualizar a descrição de uma tabela

É possível atualizar a descrição de uma tabela. Para fazer isso:

  • Use o Console do GCP ou a IU clássica da Web do BigQuery.
  • Use o comando bq update da CLI.
  • Chame o método de API tables.patch.

Para atualizar a descrição de uma tabela:

Console

Opção 1: alterar a descrição manualmente

Não é possível adicionar uma descrição ao criar uma tabela usando a IU da Web do BigQuery do console. Depois que a tabela for criada, será possível adicionar uma descrição na página Detalhes.

  1. No painel Recursos, selecione sua tabela.

  2. Abaixo do Editor de consultas, clique em Detalhes.

Editar esquema de tabela

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

Editar descrição

  1. Insira uma descrição na caixa e clique em Atualizar para salvar.

Opção 2: usar uma instrução DDL

Com as instruções de linguagem de definição de dados (DDL, na sigla em inglês), é possível criar e modificar tabelas e visualizações usando a sintaxe de consulta do SQL padrão.

Saiba mais sobre Como usar as instruções de Linguagem de Definição de Dados.

  1. Clique em Escrever nova consulta.

  2. Digite a instrução DDL na área de texto do Editor de consultas.

     #standardSQL
     ALTER TABLE mydataset.mytable
     SET OPTIONS (
       description="Description of mytable"
     )
     

IU clássica

Opção 1: alterar a descrição manualmente

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

  2. Na página Detalhes da tabela, clique em Detalhes.

  3. Na seção Descrição, clique em Descrever esta tabela para abrir a caixa de descrição.

  4. Digite uma descrição na caixa. Ao clicar fora da caixa, o texto é salvo.

    Descrição da tabela

Opção 2: usar uma instrução DDL

Com as instruções de linguagem de definição de dados (DDL, na sigla em inglês), é possível criar e modificar tabelas e visualizações usando a sintaxe de consulta do SQL padrão.

Saiba mais sobre Como usar as instruções de Linguagem de Definição de Dados.

  1. Clique em Escrever consulta.

  2. Digite a instrução de DDL na área de texto Nova consulta.

     #standardSQL
     ALTER TABLE mydataset.mytable
     SET OPTIONS (
       description="Description of mytable"
     )
     

CLI

Emita o comando bq update com a sinalização --description. Se você estiver atualizando uma tabela em um projeto diferente do padrão, adicione o código do projeto ao nome do conjunto de dados no seguinte formato: [PROJECT_ID]:[DATASET].

bq update --description "[DESCRIPTION]" [PROJECT_ID]:[DATASET].[TABLE]

Em que:

  • [DESCRIPTION] é o texto que descreve a tabela entre aspas;
  • [PROJECT_ID] é o código do projeto;
  • [DATASET] é o nome do conjunto de dados que contém a tabela que você está atualizando;
  • [TABLE] é o nome da tabela que você está atualizando.

Exemplos:

Insira o comando a seguir para alterar a descrição de mytable em mydataset para "Description of mytable". mydataset está no projeto padrão.

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

Insira o comando a seguir para alterar a descrição de mytable em mydataset para "Description of mytable". mydataset está em myotherproject, e não no projeto padrão.

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

API

Chame o método tables.patch e use a propriedade description no recurso de tabela para atualizar a descrição da tabela. Como o método tables.update substitui todo o recurso de tabela, o tables.patch é o método preferencial.

Go

Antes de testar esta amostra, siga as instruções de configuração do Go no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do BigQuery para Go.

// To run this sample, you will need to create (or reuse) a context and
// an instance of the bigquery client.  For example:
// import "cloud.google.com/go/bigquery"
// ctx := context.Background()
// client, err := bigquery.NewClient(ctx, "your-project-id")
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
}

Java

Antes de testar esta amostra, siga as instruções de configuração do Java no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery Java.

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

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

Python

Antes de testar esta amostra, siga as instruções de configuração do Python em Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery Python (em inglês).

Configure a propriedade Table.description e chame Client.update_table() para enviar a atualização à API.

# from google.cloud import bigquery
# client = bigquery.Client()
# table_ref = client.dataset('my_dataset').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."

Como atualizar o tempo de expiração da tabela

É possível configurar o tempo de expiração padrão da tabela no nível do conjunto de dados ou defini-lo quando a tabela for criada. Muitas vezes, ele é mencionado como "tempo de vida" ou TTL, na sigla em inglês.

Se você fizer isso durante a criação da tabela, a expiração padrão da tabela do conjunto de dados será ignorada. Se você não a configurar no nível do conjunto de dados e não defini-la quando a tabela for criada, a tabela nunca expirará, e você precisará excluí-la manualmente.

É possível atualizar o prazo de validade de uma tabela a qualquer momento após criá-la. Para fazer isso:

  • Use o Console do GCP ou a IU clássica da Web do BigQuery.
  • Use o comando bq update da CLI.
  • Chame o método de API tables.patch.

Para atualizar o prazo de validade de uma tabela:

Console

Opção 1: alterar o prazo de validade manualmente

Não é possível adicionar um prazo de validade ao criar uma tabela usando a IU da Web do BigQuery do console. Depois que a tabela for criada, será possível adicionar ou atualizar uma validade de tabela na página Detalhes da tabela.

  1. No painel Recursos, selecione sua tabela.

  2. Abaixo do Editor de consultas, clique em Detalhes.

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

  4. Em Validade da tabela, selecione Especificar data. Em seguida, selecione a data de validade usando o widget de calendário.

  5. Clique em Atualizar para salvar. O prazo de validade atualizado é exibido na seção Informações da tabela.

Opção 2: usar uma instrução DDL

Com as instruções de linguagem de definição de dados (DDL, na sigla em inglês), é possível criar e modificar tabelas e visualizações usando a sintaxe de consulta do SQL padrão.

Saiba mais sobre Como usar as instruções de Linguagem de Definição de Dados.

  1. Clique em Escrever nova consulta.

  2. Digite a instrução DDL na área de texto do Editor de consultas.

     #standardSQL
     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"
     )
     

IU clássica

Opção 1: alterar o prazo de validade manualmente

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

  2. Na página Detalhes da tabela, clique em Detalhes.

  3. Em Tempo de expiração, clique em Editar.

  4. Na caixa de diálogo Atualizar expiração, selecione Em e insira o tempo de expiração em dias.

  5. Clique em OK. O prazo de validade atualizado é exibido na página Detalhes.

    Validade da tabela

Opção 2: usar uma instrução DDL

Com as instruções de linguagem de definição de dados (DDL, na sigla em inglês), é possível criar e modificar tabelas e visualizações usando a sintaxe de consulta do SQL padrão.

Saiba mais sobre Como usar as instruções de Linguagem de Definição de Dados.

  1. Clique em Escrever consulta.

  2. Digite a instrução de DDL na área de texto Nova consulta.

     #standardSQL
     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"
     )
     

CLI

Emita o comando bq update com a sinalização --expiration. Se você estiver atualizando uma tabela em um projeto diferente do padrão, adicione o código do projeto ao nome do conjunto de dados no seguinte formato: [PROJECT_ID]:[DATASET].

bq update --expiration [INTEGER] [PROJECT_ID]:[DATASET].[TABLE]

Em que:

  • [INTEGER] é a vida útil padrão em segundos da tabela. O valor mínimo é de 3.600 segundos (uma hora). O prazo de validade é avaliado como a hora atual mais o valor inteiro;
  • [PROJECT_ID] é o código do projeto;
  • [DATASET] é o nome do conjunto de dados que contém a tabela que você está atualizando;
  • [TABLE] é o nome da tabela que você está atualizando.

Exemplos:

Insira o comando a seguir para atualizar o tempo de expiração de mytable em mydataset para cinco dias (432.000 segundos). mydataset está no projeto padrão.

bq update --expiration 432000 mydataset.mytable

Insira o comando a seguir para atualizar o tempo de expiração de mytable em mydataset para 5 dias (432.000 segundos). mydataset está em myotherproject, e não no projeto padrão.

bq update --expiration 432000 myotherproject:mydataset.mytable

API

Chame o método tables.patch e use a propriedade expirationTime no recurso de tabela para atualizar a expiração da tabela em milissegundos. Como o método tables.update substitui todo o recurso de tabela, o tables.patch é o método preferencial.

Go

Antes de testar esta amostra, siga as instruções de configuração do Go no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do BigQuery para Go.

// To run this sample, you will need to create (or reuse) a context and
// an instance of the bigquery client.  For example:
// import "cloud.google.com/go/bigquery"
// ctx := context.Background()
// client, err := bigquery.NewClient(ctx, "your-project-id")
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
}

Java

Antes de testar esta amostra, siga as instruções de configuração do Java no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery Java.

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

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

Python

Antes de testar esta amostra, siga as instruções de configuração do Python em Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery Python (em inglês).

Configure a propriedade Table.expires e chame Client.update_table() para enviar a atualização à API.

import datetime
import pytz

# from google.cloud import bigquery
# client = bigquery.Client()
# table_ref = client.dataset('my_dataset').table('my_table')
# table = client.get_table(table_ref)  # API request

assert table.expires is None

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

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

Como atualizar a definição de esquema de uma tabela

Para instruções sobre isso, consulte Como modificar esquemas de tabela.

Como renomear uma tabela

No momento, não é possível alterar o nome de uma tabela existente. Caso seja preciso, siga as etapas para copiar a tabela. Ao especificar a tabela de destino na operação de cópia, use o novo nome da tabela.

Como copiar uma tabela

Para copiar uma tabela:

  • Use o Console do GCP ou a IU da Web clássica do BigQuery.
  • use o comando bq cp da ferramenta de linha de comando;
  • Chame o método de API jobs.insert e configure um job de cópia

Permissões exigidas

No nível do conjunto de dados, copiar uma tabela requer acesso do READER ao conjunto de dados de origem que contém a tabela que está sendo copiada e acesso do WRITER ao conjunto de dados de destino.

Em vez de usar permissões no nível do conjunto de dados, utilize um papel de IAM para envolvidos no projeto que inclua as permissões bigquery.tables.create e bigquery.tables.getData. As permissões bigquery.tables.create são necessárias para criar a cópia da tabela no conjunto de dados de destino, e as permissões bigquery.tables.getData são necessárias para ler os dados na tabela a ser copiada.

Os papéis predefinidos do IAM no nível do projeto a seguir incluem ambas as permissões bigquery.tables.create e bigquery.tables.getData de todos os conjuntos de dados no projeto:

Além disso, como o papel bigquery.user tem permissões bigquery.datasets.create, um usuário com o papel bigquery.user pode ler os dados em qualquer tabela criada por ele e copiá-la em qualquer conjunto de dados também criado por ele. Quando um usuário atribuído ao papel bigquery.user cria um conjunto de dados, ele recebe acesso de OWNER ao conjunto. Com o acesso OWNER, o usuário tem controle total sobre o conjunto de dados e todas as tabelas nele.

Para mais informações sobre os papéis e as permissões do IAM no BigQuery, consulte Controle de acesso. Para mais informações sobre os papéis para conjuntos de dados, consulte Papéis primários para conjuntos de dados.

Limitações ao copiar tabelas

Os jobs de cópia de tabelas estão sujeitos às limitações a seguir:

  • Ao fazer a cópia, o nome da tabela de destino precisa aderir às mesmas convenções de nomenclatura da criação de tabelas.
  • As cópias de tabelas estão sujeitas às políticas de cota do BigQuery nos jobs de cópia.
  • Ao usar o Console do GCP ou a IU da Web clássica do BigQuery para copiar uma tabela, não é possível substituir uma tabela atual no conjunto de dados de destino. A tabela precisa ter um nome exclusivo nesse conjunto.
  • Ao copiar tabelas, o conjunto de dados de destino e o que contém a tabela a ser copiada precisam estar no mesmo local. Por exemplo, não é possível copiar uma tabela de um conjunto de dados que tem base na UE e gravá-la em um conjunto que tem base nos EUA.
  • A cópia de várias tabelas de origem em uma tabela de destino não é compatível com o Console do GCP nem com a IU da Web clássica do BigQuery.
  • Para copiar várias tabelas de origem para uma de destino usando a CLI ou a API, todas elas precisam ter esquemas idênticos.

Como copiar uma única tabela de origem

Para copiar uma tabela, faça o seguinte:

  • Use o Console do GCP ou a IU clássica da Web do BigQuery.
  • Use o comando bq cp da ferramenta de linha de comando.
  • Chame o método de API jobs.insert, configure um job de cópia e especifique a propriedade sourceTable.

O Console do GCP e a IU clássica da Web do BigQuery aceitam apenas uma tabela de origem e uma de destino em um job de cópia. Para copiar vários arquivos de origem para uma tabela de destino, você precisa usar a ferramenta de linha de comando ou a API.

Para copiar uma única tabela de origem:

Console

  1. Selecione a tabela que você quer copiar no painel Recursos. Abaixo do Editor de consultas, clique em Copiar tabela.

  2. Na caixa de diálogo Copiar tabela, em Destino, siga estas etapas:

    • Em Nome do projeto, escolha o projeto que armazenará a tabela copiada.
    • Em Nome do conjunto de dados, selecione o conjunto de dados em que você quer armazenar a tabela copiada. Os conjuntos de dados de origem e destino precisam estar no mesmo local.
    • Em Nome da tabela, insira um nome para a tabela nova. Ele precisa ser exclusivo no conjunto de dados de destino. O nome da tabela pode conter até 1.024 caracteres, sendo eles a-z, A-Z, 0-9 ou _ (caractere de sublinhado). Não é possível substituir uma tabela atual no conjunto de dados de destino por meio da IU da Web do BigQuery.
  3. Clique em Copiar para iniciar o job de cópia.

IU clássica

  1. Clique no ícone do menu de exibição seta para baixo ao lado da tabela que você quer copiar e clique em Copiar tabela.

  2. Na caixa de diálogo Copiar tabela:

    • Em Projeto de destino, escolha o projeto que armazenará a tabela copiada.
    • Em Conjunto de dados de destino, selecione o conjunto de dados em que você quer armazenar a tabela copiada. Os conjuntos de dados de origem e destino precisam estar no mesmo local.
    • Em Tabela de destino, insira um nome para a nova tabela. Ele precisa ser exclusivo no conjunto de dados de destino. O nome da tabela pode conter até 1.024 caracteres, sendo eles a-z, A-Z, 0-9 ou _ (caractere de sublinhado). Não é possível substituir uma tabela atual no conjunto de dados de destino por meio da IU da Web do BigQuery.

      Cópia da tabela

  3. Clique em OK para iniciar o job de cópia.

Linha de comando

Emita o comando bq cp. É possível usar sinalizações opcionais para controlar a disposição de gravação da tabela de destino:

  • -a ou --append_table anexa os dados da tabela de origem a uma tabela que existe no conjunto de dados de destino.
  • -f ou --force substitui uma tabela que existe no conjunto de dados de destino e não solicita confirmação.
  • -n ou --no_clobber retornará a mensagem de erro a seguir se houver uma tabela no conjunto de dados de destino: Table '[PROJECT_ID]:[DATASET].[TABLE]' already exists, skipping. Se -n não for especificado, o comportamento padrão é solicitar que você escolha se quer substituir a tabela de destino.
  • --destination_kms_key é a chave Cloud KMS gerenciada pelo cliente e usada para criptografar a tabela de destino.

--destination_kms_key não é demonstrado aqui. Para saber mais, consulte Como proteger dados com chaves Cloud KMS.

Se o conjunto de dados de origem ou de destino estiver em um projeto diferente do projeto padrão, adicione o código do projeto aos nomes dos conjuntos de dados no formato a seguir: [PROJECT_ID]:[DATASET].

Forneça a sinalização --location e defina o valor do local.

bq --location=[LOCATION] cp -a -f -n [PROJECT_ID]:[DATASET].[SOURCE_TABLE] [PROJECT_ID]:[DATASET].[DESTINATION_TABLE]

Em que:

  • [LOCATION] é o nome do local. A sinalização --location é opcional. Por exemplo, se você estiver usando o BigQuery na região de Tóquio, poderá definir o valor da sinalização como asia-northeast1. É possível definir um valor padrão para o local usando o arquivo .bigqueryrc;
  • [PROJECT_ID] é o código do projeto;
  • [DATASET] é o nome do conjunto de dados de origem ou de destino;
  • [SOURCE_TABLE] é a tabela que você está copiando;
  • [DESTINATION_TABLE] é o nome da tabela no conjunto de dados de destino.

Exemplos:

Insira o comando a seguir para copiar mydataset.mytable para mydataset2.mytable2. Ambos os conjuntos de dados estão no projeto padrão e foram criados no local multirregional US.

bq --location=US cp mydataset.mytable mydataset2.mytable2

Insira o comando a seguir para copiar mydataset.mytable e substituir uma tabela de destino com o mesmo nome. O conjunto de dados de origem está no projeto padrão. O conjunto de dados de destino está em myotherproject. O atalho -f é usado para substituir a tabela de destino sem um prompt. mydataset e myotherdataset foram criados no local multirregional US.

bq --location=US cp -f mydataset.mytable myotherproject:myotherdataset.mytable

Insira o comando a seguir para copiar mydataset.mytable e retornar um erro se o conjunto de dados de destino contiver uma tabela com o mesmo nome. O conjunto de dados de origem está no projeto padrão. O conjunto de dados de destino está em myotherproject. O atalho -n é usado para evitar a substituição de uma tabela com o mesmo nome. Ambos os conjuntos de dados foram criados no local multirregional US.

bq --location=US cp -n mydataset.mytable myotherproject:myotherdataset.mytable

Insira o comando a seguir para copiar mydataset.mytable e anexar os dados a uma tabela de destino com o mesmo nome. O conjunto de dados de origem está no projeto padrão. O conjunto de dados de destino está em myotherproject. O atalho -a é usado para anexar à tabela de destino. Ambos os conjuntos de dados foram criados no local multirregional US.

bq --location=US cp -a mydataset.mytable myotherproject:myotherdataset.mytable

Insira o comando a seguir para copiar mydataset.mytable para mydataset2.mytable2. Ambos os conjuntos de dados estão no projeto padrão. Ambos os conjuntos de dados foram criados na região asia-northeast1.

bq --location=asia-northeast1 cp mydataset.mytable mydataset2.mytable2

API

Para copiar uma tabela usando a API:

Basta chamar o método bigquery.jobs.insert e configurar um job de copy. Especifique o local na propriedade location na seção jobReference do recurso do job.

Especifique os valores a seguir na configuração do job:

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

em que sourceTable fornece informações sobre a tabela a ser copiada, destinationTable fornece informações sobre a tabela nova, createDisposition especifica se uma tabela nova precisará ser criada se não existir e writeDisposition especifica se será preciso substituir ou anexar a uma tabela atual.

C#

Antes de testar esta amostra, siga as instruções de configuração do C# no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do BigQuery para C#.

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.
        // 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 testar esta amostra, siga as instruções de configuração do Go no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do BigQuery para Go.

// To run this sample, you will need to create (or reuse) a context and
// an instance of the bigquery client.  For example:
// import "cloud.google.com/go/bigquery"
// ctx := context.Background()
// client, err := bigquery.NewClient(ctx, "your-project-id")
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
}

Java

Antes de testar esta amostra, siga as instruções de configuração do Java no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery Java.

TableId destinationId = TableId.of(dataset, tableName);
JobOption options = JobOption.fields(JobField.STATUS, JobField.USER_EMAIL);
Job job = table.copy(destinationId, options);
// Wait for the job to complete.
try {
  Job completedJob =
      job.waitFor(
          RetryOption.initialRetryDelay(Duration.ofSeconds(1)),
          RetryOption.totalTimeout(Duration.ofMinutes(3)));
  if (completedJob != null && completedJob.getStatus().getError() == null) {
    // Job completed successfully.
  } else {
    // Handle error case.
  }
} catch (InterruptedException e) {
  // Handle interrupted wait
}

Node.js

Antes de testar esta amostra, siga as instruções de configuração do Node.js em Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do BigQuery para Node.js.

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

/**
 * 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";

// Create a client
const bigqueryClient = new BigQuery();

async function copyTable() {
  // Copies src_dataset:src_table to dest_dataset:dest_table.

  // Copy the table contents into another table
  const [job] = await bigqueryClient
    .dataset(srcDatasetId)
    .table(srcTableId)
    .copy(bigqueryClient.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;
  }
}

copyTable();

PHP

Antes de testar esta amostra, siga as instruções de configuração do PHP em Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery PHP.

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 testar esta amostra, siga as instruções de configuração do Python em Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery Python (em inglês).

# from google.cloud import bigquery
# client = bigquery.Client()

source_dataset = client.dataset("samples", project="bigquery-public-data")
source_table_ref = source_dataset.table("shakespeare")

# dataset_id = 'my_dataset'
dest_table_ref = client.dataset(dataset_id).table("destination_table")

job = client.copy_table(
    source_table_ref,
    dest_table_ref,
    # Location must match that of the source and destination tables.
    location="US",
)  # API request

job.result()  # Waits for job to complete.

assert job.state == "DONE"
dest_table = client.get_table(dest_table_ref)  # API request
assert dest_table.num_rows > 0

Como copiar várias tabelas de origem

Para copiar várias tabelas de origem para uma tabela de destino:

  • use o comando bq cp da ferramenta de linha de comando;
  • chame o método jobs.insert, configure um job de cópia e especifique a propriedade sourceTables.

Todas as tabelas de origem precisam ter esquemas idênticos. Apenas uma tabela de destino é permitida.

As tabelas de origem precisam ser especificadas como uma lista separada por vírgulas. Não é possível usar caracteres curingas quando várias tabelas de origem são copiadas.

Para copiar várias tabelas de origem:

Linha de comando

Emita o comando bq cp e inclua várias tabelas de origem em uma lista separada por vírgulas. É possível usar sinalizações opcionais para controlar a disposição de gravação da tabela de destino:

  • -a ou --append_table anexa os dados das tabelas de origem a uma tabela atual no conjunto de dados de destino.
  • -f ou --force substitui uma tabela de destino atual no conjunto de dados de destino e não solicita confirmação.
  • -n ou --no_clobber retornará a mensagem de erro a seguir se houver uma tabela no conjunto de dados de destino: Table '[PROJECT_ID]:[DATASET].[TABLE]' already exists, skipping. Se -n não for especificado, o comportamento padrão é solicitar que você escolha se quer substituir a tabela de destino.
  • --destination_kms_key é a chave Cloud KMS gerenciada pelo cliente e usada para criptografar a tabela de destino.

--destination_kms_key não é demonstrado aqui. Para saber mais, consulte Como proteger dados com chaves Cloud KMS.

Se o conjunto de dados de origem ou de destino estiver em um projeto diferente do projeto padrão, adicione o código do projeto aos nomes dos conjuntos de dados no formato a seguir: [PROJECT_ID]:[DATASET].

Forneça a sinalização --location e defina o valor do local.

bq --location=[LOCATION] cp -a -f -n [PROJECT_ID]:[DATASET].[SOURCE_TABLE],[PROJECT_ID]:[DATASET].[SOURCE_TABLE] [PROJECT_ID]:[DATASET].[DESTINATION_TABLE]

Em que:

  • [LOCATION] é o nome do local. A sinalização --location é opcional. Por exemplo, se você estiver usando o BigQuery na região de Tóquio, poderá definir o valor da sinalização como asia-northeast1. É possível definir um valor padrão para o local usando o arquivo .bigqueryrc;
  • [PROJECT_ID] é o código do projeto;
  • [DATASET] é o nome do conjunto de dados de origem ou de destino;
  • [SOURCE_TABLE] é a tabela que você está copiando;
  • [DESTINATION_TABLE] é o nome da tabela no conjunto de dados de destino.

Exemplos:

Insira o comando a seguir para copiar mydataset.mytable e mydataset.mytable2 para mydataset2.tablecopy. Todos os conjuntos de dados estão no projeto padrão e foram criados no local multirregional US.

bq --location=US cp mydataset.mytable,mydataset.mytable2 mydataset2.tablecopy

Insira o comando a seguir para copiar mydataset.mytable e mydataset.mytable2 para myotherdataset.mytable e substituir uma tabela de destino com o mesmo nome. O conjunto de dados de destino está em myotherproject, e não no projeto padrão. O atalho -f é usado para substituir a tabela de destino sem enviar solicitação. Ambos os conjuntos de dados foram criados no local multirregional US.

bq --location=US cp -f mydataset.mytable,mydataset.mytable2 myotherproject:myotherdataset.mytable

Insira o comando a seguir para copiar myproject:mydataset.mytable e myproject:mydataset.mytable2 e retornar um erro se o conjunto de dados de destino contiver uma tabela com o mesmo nome. O conjunto de dados de destino está em myotherproject. O atalho -n é usado para evitar a substituição de uma tabela com o mesmo nome. Todos os conjuntos de dados foram criados no local multirregional US.

bq --location=US cp -n myproject:mydataset.mytable,myproject:mydataset.mytable2 myotherproject:myotherdataset.mytable

Insira o comando a seguir para copiar mydataset.mytable e mydataset.mytable2 e anexar os dados a uma tabela de destino com o mesmo nome. O conjunto de dados de origem está no projeto padrão. O de destino está em myotherproject. O atalho -a é usado para anexar à tabela de destino. Todos os conjuntos de dados foram criados no local multirregional US.

bq --location=US cp -a mydataset.mytable,mydataset.mytable2 myotherproject:myotherdataset.mytable

Insira o comando a seguir para copiar mydataset.mytable e mydataset.mytable2 para mydataset2.tablecopy. Todos os conjuntos de dados estão no projeto padrão e foram criados na região asia-northeast1.

bq --location=asia-northeast1 cp mydataset.mytable,mydataset.mytable2 mydataset2.tablecopy

API

Para copiar várias tabelas usando a API, chame o método jobs.insert, configure um job de cópia e especifique a propriedade sourceTables.

Especifique a região na propriedade location da seção jobReference do recurso do job.

Go

Antes de testar esta amostra, siga as instruções de configuração do Go no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do BigQuery para Go.

// To run this sample, you will need to create (or reuse) a context and
// an instance of the bigquery client.  For example:
// import "cloud.google.com/go/bigquery"
// ctx := context.Background()
// client, err := bigquery.NewClient(ctx, "your-project-id")
dataset := client.Dataset(datasetID)

srcTableIDs := []string{"table1", "table2"}
var tableRefs []*bigquery.Table
for _, v := range srcTableIDs {
	tableRefs = append(tableRefs, dataset.Table(v))
}
copier := dataset.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
}

Java

Antes de testar esta amostra, siga as instruções de configuração do Java no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery Java.

TableId destinationTable = TableId.of(datasetId, destinationTableId);
CopyJobConfiguration configuration =
    CopyJobConfiguration.newBuilder(
        destinationTable,
        Arrays.asList(
            TableId.of(datasetId, "table1"),
            TableId.of(datasetId, "table2")))
    .build();

// Copy the tables.
Job job = bigquery.create(JobInfo.of(configuration));
job = job.waitFor();

// Check the table
StandardTableDefinition table = bigquery.getTable(destinationTable).getDefinition();
System.out.println("State: " + job.getStatus().getState());
System.out.printf("Copied %d rows.\n", table.getNumRows());

Python

Antes de testar esta amostra, siga as instruções de configuração do Python em Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery Python (em inglês).

# from google.cloud import bigquery
# client = bigquery.Client()
# source_dataset_id = 'my_source_dataset'
# dest_dataset_id = 'my_destination_dataset'

table1_ref = client.dataset(source_dataset_id).table("table1")
table2_ref = client.dataset(source_dataset_id).table("table2")
dest_table_ref = client.dataset(dest_dataset_id).table("destination_table")

job = client.copy_table(
    [table1_ref, table2_ref],
    dest_table_ref,
    # Location must match that of the source and destination tables.
    location="US",
)  # API request
job.result()  # Waits for job to complete.

assert job.state == "DONE"
dest_table = client.get_table(dest_table_ref)  # API request
assert dest_table.num_rows > 0

Como excluir tabelas

Para excluir uma tabela:

  • Use o Console do GCP ou a IU clássica da Web do BigQuery.
  • use o comando bq rm da ferramenta de linha de comando;
  • Chame o método de API tables.delete

No momento, só é possível excluir uma tabela por vez.

Ao excluir uma tabela, todos os dados dela também são removidos. Para excluir tabelas automaticamente após um período de tempo especificado, defina a validade padrão da tabela para o conjunto de dados ou defina o prazo de validade ao criar a tabela.

Permissões exigidas

Para excluir uma tabela, é necessário ter o acesso OWNER no nível do conjunto de dados ou um papel do IAM para envolvidos no projeto que inclua permissões bigquery.tables.delete. Os papéis predefinidos do IAM para envolvidos no projeto a seguir incluem permissões bigquery.tables.delete:

Os usuários com um papel predefinido no nível do projeto podem excluir tabelas em qualquer conjunto de dados no projeto. Já aqueles com permissões de OWNER no nível do conjunto de dados podem excluir tabelas apenas nesse conjunto.

Além disso, como o papel bigquery.user tem permissões bigquery.datasets.create, um usuário com o papel bigquery.user pode excluir tabelas em conjuntos de dados criados por ele. Quando um usuário atribuído ao papel bigquery.user cria um conjunto de dados, ele recebe acesso de OWNER ao conjunto. Com o acesso de OWNER, o usuário tem controle total sobre o conjunto de dados e todas as tabelas nele.

Para mais informações sobre os papéis e as permissões do IAM no BigQuery, consulte Controle de acesso. Para mais informações sobre os papéis para conjuntos de dados, consulte Papéis primários para conjuntos de dados.

Como excluir uma tabela

Para excluir uma tabela:

Console

  1. Selecione sua tabela no painel Recursos. Abaixo do Editor de consultas, clique em Excluir tabela.
  2. Digite o nome da tabela na caixa de diálogo e clique em Excluir para confirmar.

IU clássica

  1. Clique no ícone de seta para baixo ícone de seta para baixo ao lado do nome da tabela na barra de navegação e clique em Excluir tabela.

  2. Quando solicitado, clique em OK para confirmar.

Linha de comando

Use o comando bq rm com a sinalização --table ou o atalho -t para excluir uma tabela. Ao utilizar a CLI para remover uma tabela, você precisa confirmar a ação. Use a sinalização --force ou o atalho -f para ignorar a confirmação.

Se a tabela estiver em um conjunto de dados em um projeto diferente do padrão, adicione o código do projeto ao nome do conjunto no seguinte formato: [PROJECT_ID]:[DATASET].

bq rm -f -t [PROJECT_ID]:[DATASET].[TABLE]

Em que:

  • [PROJECT_ID] é o código do projeto;
  • [DATASET] é o nome do conjunto de dados que contém a tabela;
  • [TABLE] é o nome da tabela que você está excluindo.

Exemplos:

Insira o comando a seguir para excluir mytable de mydataset. mydataset está no projeto padrão.

bq rm -t mydataset.mytable

Insira o comando a seguir para excluir mytable de mydataset. mydataset está em myotherproject, e não no projeto padrão.

bq rm -t myotherproject:mydataset.mytable

Insira o comando a seguir para excluir mytable de mydataset. mydataset está no projeto padrão. O comando usa o atalho -f para ignorar a confirmação.

bq rm -f -t mydataset.mytable

API

Chame o método de API tables.delete e especifique a tabela a ser excluída usando o parâmetro tableId.

C#

Antes de testar esta amostra, siga as instruções de configuração do C# no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do BigQuery para C#.

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 testar esta amostra, siga as instruções de configuração do Go no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do BigQuery para Go.

// To run this sample, you will need to create (or reuse) a context and
// an instance of the bigquery client.  For example:
// import "cloud.google.com/go/bigquery"
// ctx := context.Background()
// client, err := bigquery.NewClient(ctx, "your-project-id")
table := client.Dataset(datasetID).Table(tableID)
if err := table.Delete(ctx); err != nil {
	return err
}

Java

Antes de testar esta amostra, siga as instruções de configuração do Java no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery Java.

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

Node.js

Antes de testar esta amostra, siga as instruções de configuração do Node.js em Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do BigQuery para Node.js.

// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/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";

  // Create a client
  const bigqueryClient = new BigQuery();

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

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

PHP

Antes de testar esta amostra, siga as instruções de configuração do PHP em Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery PHP.

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 testar esta amostra, siga as instruções de configuração do Python em Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery Python (em inglês).

from google.cloud import bigquery

# TODO(developer): 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)
print("Deleted table '{}'.".format(table_id))

Ruby

Antes de testar esta amostra, siga as instruções de configuração do Ruby em Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery Ruby (em inglês).

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

Como restaurar uma tabela excluída

É possível restaurar uma tabela em até dois dias após a exclusão. Ao aproveitar a funcionalidade do decorador de snapshot, é possível acessar uma tabela antes do evento de exclusão e, então, copiá-la. No entanto, há duas condições importantes a serem consideradas:

  • Não será possível fazer referência a uma tabela excluída se, após a exclusão, outra de mesmo código tiver sido criada no conjunto de dados.

  • Não será possível fazer referência a uma tabela excluída se, após o evento de exclusão, o conjunto de dados de encapsulamento também tiver sido excluído/recriado.

CLI

Para restaurar uma tabela por meio do SQL legado, use o decorador de instantâneo @<time>. Primeiro, determine um carimbo de data/hora UNIX em milissegundos de quando a tabela existia. Depois, copie a tabela desse carimbo de data/hora para uma nova tabela. A nova tabela precisa ter um nome diferente da excluída.

Por exemplo, digite o comando a seguir para copiar mydataset.mytable no momento 1418864998000 para uma nova tabela mydataset.newtable.

Forneça a sinalização --location e defina o valor do local.

bq --location=[LOCATION] cp mydataset.mytable@1418864998000 mydataset.newtable

Para mais informações, consulte Decoradores de tabela no SQL legado.

Go

// To run this sample, you will need to create (or reuse) a context and
// an instance of the bigquery client.  For example:
// import "cloud.google.com/go/bigquery"
// ctx := context.Background()
// client, err := bigquery.NewClient(ctx, "your-project-id")

ds := client.Dataset(datasetID)
if _, err := ds.Table(tableID).Metadata(ctx); err != nil {
	return err
}
// Record the current time.  We'll use this as the snapshot time
// for recovering the table.
snapTime := time.Now()

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

// Construct the restore-from tableID using a snapshot decorator.
snapshotTableID := fmt.Sprintf("%s@%d", tableID, snapTime.UnixNano()/1e6)
// Choose a new table ID for the recovered table data.
recoverTableID := fmt.Sprintf("%s_recovered", tableID)

// Construct and run a copy job.
copier := ds.Table(recoverTableID).CopierFrom(ds.Table(snapshotTableID))
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
}

Java

Antes de testar esta amostra, siga as instruções de configuração do Java no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery Java.

// String datasetId = "my_dataset";
String tableId = "oops_undelete_me";

// Record the current time.  We'll use this as the snapshot time
// for recovering the table.
long snapTime = Instant.now().getMillis();

// "Accidentally" delete the table.
bigquery.delete(TableId.of(datasetId, tableId));

// Construct the restore-from tableID using a snapshot decorator.
String snapshotTableId = String.format("%s@%d", tableId, snapTime);
// Choose a new table ID for the recovered table data.
String recoverTableId = String.format("%s_recovered", tableId);

// Construct and run a copy job.
CopyJobConfiguration configuration =
    CopyJobConfiguration.newBuilder(
        TableId.of(datasetId, recoverTableId),
        TableId.of(datasetId, snapshotTableId))
    .build();
Job job = bigquery.create(JobInfo.of(configuration));
job = job.waitFor();

// Check the table
StandardTableDefinition table = bigquery.getTable(
        TableId.of(datasetId, recoverTableId)).getDefinition();
System.out.println("State: " + job.getStatus().getState());
System.out.printf("Recovered %d rows.\n", table.getNumRows());

Python

Antes de testar esta amostra, siga as instruções de configuração do Python em Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery Python (em inglês).

# TODO(developer): Uncomment the lines below and replace with your values.
# import time
# from google.cloud import bigquery
# client = bigquery.Client()
# dataset_id = 'my_dataset'  # Replace with your dataset ID.
# table_id = 'my_table'      # Replace with your table ID.

table_ref = client.dataset(dataset_id).table(table_id)

# TODO(developer): Choose an appropriate snapshot point as epoch
# milliseconds. For this example, we choose the current time as we're about
# to delete the table immediately afterwards.
snapshot_epoch = int(time.time() * 1000)

# "Accidentally" delete the table.
client.delete_table(table_ref)  # API request

# Construct the restore-from table ID using a snapshot decorator.
snapshot_table_id = "{}@{}".format(table_id, snapshot_epoch)
source_table_ref = client.dataset(dataset_id).table(snapshot_table_id)

# Choose a new table ID for the recovered table data.
recovered_table_id = "{}_recovered".format(table_id)
dest_table_ref = client.dataset(dataset_id).table(recovered_table_id)

# Construct and run a copy job.
job = client.copy_table(
    source_table_ref,
    dest_table_ref,
    # Location must match that of the source and destination tables.
    location="US",
)  # API request

job.result()  # Waits for job to complete.

print(
    "Copied data from deleted table {} to {}".format(table_id, recovered_table_id)
)

A seguir

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Precisa de ajuda? Acesse nossa página de suporte.