Gerenciar conjuntos de dados

Neste documento, descrevemos como copiar conjuntos de dados, recriar conjuntos de dados em outro local, proteger conjuntos de dados, excluir conjuntos de dados, restaurar tabelas de conjuntos de dados excluídos e cancelar a exclusão de conjuntos de dados no BigQuery.

Como administrador do BigQuery, é possível organizar e controlar o acesso às tabelas e visualizações que os analistas usam. Para mais informações sobre conjuntos de dados, consulte Introdução aos conjuntos de dados.

Não é possível alterar o nome de um conjunto de dados atual ou realocar um conjunto de dados após a criação. Como alternativa para alterar o nome do conjunto de dados, é possível copiar um conjunto de dados e alterar o nome do conjunto de dados de destino. Para realocar um conjunto de dados, siga um dos seguintes métodos:

Funções exigidas

Nesta seção, descrevemos os papéis e as permissões necessários para gerenciar conjuntos de dados. Se o conjunto de dados de origem ou de destino estiver no mesmo projeto que está sendo usado para a cópia, não serão necessárias permissões ou papéis extras nesse conjunto de dados.

Para conseguir as permissões necessárias para gerenciar conjuntos de dados, peça ao administrador para conceder a você os seguintes papéis do IAM:

Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Esses papéis predefinidos contêm as permissões necessárias para gerenciar conjuntos de dados. Para conferir as permissões exatas necessárias, expanda a seção Permissões necessárias:

Permissões necessárias

As seguintes permissões são necessárias para gerenciar conjuntos de dados:

  • Copiar um conjunto de dados:
    • bigquery.transfers.update no projeto de destino
    • bigquery.jobs.create no projeto de destino
    • bigquery.datasets.get nos conjuntos de dados de origem e de destino
    • bigquery.tables.list nos conjuntos de dados de origem e de destino
    • bigquery.datasets.update no conjunto de dados de destino
    • bigquery.tables.create no conjunto de dados de destino
  • Excluir um conjunto de dados:
    • bigquery.datasets.delete no projeto
    • bigquery.tables.delete no projeto
  • Restaurar um conjunto de dados excluído:
    • bigquery.datasets.create no projeto
    • bigquery.datasets.get no conjunto de dados

Essas permissões também podem ser concedidas com funções personalizadas ou outros papéis predefinidos.

Para mais informações sobre os papéis e as permissões do IAM no BigQuery, consulte Introdução ao IAM.

Copiar conjuntos de dados

É possível copiar um conjunto de dados, incluindo dados particionados em uma região ou entre regiões, sem extrair, mover ou recarregar esses dados no BigQuery. O BigQuery usa o serviço de transferência de dados do BigQuery no back-end para copiar conjuntos de dados. Para considerações de localização ao transferir dados, consulte Local e transferências de dados.

Para cada configuração de cópia de conjunto de dados, é possível executar uma transferência por vez. Execuções de transferência adicionais são enfileiradas. Se você estiver usando o console do Google Cloud, poderá programar cópias recorrentes e configurar um e-mail ou notificações do Pub/Sub com o serviço de transferência de dados do BigQuery.

Limitações

As seguintes limitações se aplicam quando você copia conjuntos de dados:

  • Não é possível copiar os seguintes recursos de um conjunto de dados de origem:

    • Visualizações.
    • Rotinas, incluindo UDFs.
    • Tabelas externas.
    • Tabelas de captura de dados alterados (CDC), caso o job de cópia esteja entre regiões. É possível copiar tabelas de CDC dentro da mesma região.
    • O job de cópia de tabelas entre regiões não é compatível com tabelas criptografadas com chaves criptografadas gerenciadas pelo cliente (CMEK) quando o conjunto de dados de destino não é criptografado com CMEK e não há uma CMEK fornecida. É possível copiar tabelas com criptografia padrão entre regiões.

      É possível copiar todas as tabelas criptografadas na mesma região, incluindo aquelas criptografadas com CMEK.

  • Não é possível usar os seguintes recursos como conjuntos de dados de destino para jobs de cópia:

    • Armazenamento otimizado para gravação.
    • Conjunto de dados criptografado com CMEK se o job de cópia estiver entre regiões e a tabela de origem não for criptografada com CMEK.

      No entanto, as tabelas criptografadas com CMEK são permitidas como tabelas de destino quando copiadas na mesma região.

  • A frequência mínima entre jobs de cópia é de 12 horas.

  • Não é possível anexar dados a uma tabela particionada no conjunto de dados de destino.

  • Se houver uma tabela nos conjuntos de dados de origem e de destino e a tabela de origem não tiver sido alterada desde a última cópia bem-sucedida, ela será ignorada. A tabela de origem será ignorada mesmo se a caixa de seleção Substituir tabelas de destino estiver marcada.

  • Ao truncar tabelas no conjunto de dados de destino, o job de cópia do conjunto de dados não detecta as alterações feitas nos recursos no conjunto de dados de destino antes de iniciar o job de cópia. O job de cópia de conjunto de dados substitui todos os dados no conjunto de dados de destino, incluindo as tabelas e o esquema.

  • A tabela de destino pode não refletir as alterações feitas nas tabelas de origem após o início de um job de cópia.

  • Não é possível copiar um conjunto de dados nas regiões do BigQuery Omni.

  • Para copiar um conjunto de dados para um projeto em outro perímetro de serviço do VPC Service Controls, defina as seguintes regras de saída:

    • Na configuração do perímetro de serviço do VPC Service Controls do projeto de destino, o principal do IAM precisa ter os seguintes métodos:

      • bigquery.datasets.get
      • bigquery.tables.list
      • bigquery.tables.get,
      • bigquery.tables.getData
    • Na configuração do perímetro de serviço do VPC Service Controls do projeto de origem, o principal do IAM que está sendo usado precisa ter o método definido como All Methods.

Copiar um conjunto de dados

Selecione uma das seguintes opções:

Console

  1. Ative o serviço de transferência de dados do BigQuery para o conjunto de dados de destino.

    Ativar a API BigQuery Data Transfer Service.

  2. Verifique se você tem os papéis necessários.

    Se você pretende configurar notificações de execução de transferência do Pub/Sub (opção 2 mais adiante nestas etapas), precisará ter a permissão pubsub.topics.setIamPolicy.

    Se você só configurar notificações por e-mail, as permissões do Pub/Sub não serão necessárias. Para mais informações, consulte as Notificações de execução do serviço de transferência de dados do BigQuery.

  3. Crie um conjunto de dados do BigQuery na mesma região ou em uma diferente do conjunto de dados de origem.

Opção 1: usar a função de cópia do BigQuery

Para criar uma transferência única, use a função de cópia do BigQuery:

  1. Acessar a página do BigQuery.

    Ir para o BigQuery

  2. No painel Explorer, expanda o projeto e selecione um conjunto de dados.

  3. Na seção Informações do conjunto de dados, clique em Copiar e faça o seguinte:

    1. No campo Conjunto de dados, crie um novo conjunto de dados ou selecione um código do conjunto de dados na lista.

      Os nomes dos conjuntos de dados em um projeto precisam ser exclusivos. O projeto e o conjunto de dados podem estar em regiões diferentes, mas nem todas as regiões são compatíveis com a cópia de conjuntos de dados entre regiões.

      No campo Local, é exibido o local do conjunto de dados de origem.

    2. Opcional: para substituir os dados e o esquema das tabelas de destino pelas tabelas de origem, marque a caixa de seleção Substituir tabelas de destino. As tabelas de origem e de destino precisam ter o mesmo esquema de particionamento.

    3. Para copiar o conjunto de dados, clique em Copiar.

Opção 2: usar o serviço de transferência de dados do BigQuery

Para programar cópias recorrentes e configurar notificações por e-mail ou do Pub/Sub, use o serviço de transferência de dados do BigQuery no console do Google Cloud do projeto de destino:

  1. Acesse a página Transferências de dados.

    Acesse Transferências de dados

  2. Clique em Criar uma transferência.

  3. Na lista Origem, selecione Cópia do conjunto de dados.

  4. No campo Nome de exibição, digite um nome para a execução da transferência.

  5. Na seção Opções de programação, realize estas ações:

    1. Em Frequência de repetição, escolha uma opção para a frequência de execução da transferência:

      Se você selecionar Personalizado, insira uma frequência personalizada, por exemplo, every day 00:00. Para mais informações, consulte Formatar a programação.

    2. Em Data e hora de início, insira a data e a hora para iniciar a transferência. Se você escolher Iniciar agora, essa opção ficará desativada.

  6. Na seção Configurações de destino, selecione um conjunto de dados de destino para armazenar os dados de transferência. Também é possível clicar em CRIAR NOVO CONJUNTO DE DADOS para criar um novo conjunto de dados antes de selecioná-lo para esta transferência.

  7. Na seção Detalhes da fonte de dados, insira as seguintes informações:

    1. Em Conjunto de dados de origem, digite o ID do conjunto de dados que você quer copiar.
    2. Em Projeto de origem, insira o ID do projeto do conjunto de dados de origem.
  8. Para substituir os dados e o esquema das tabelas de destino pelas tabelas de origem, marque a caixa de seleção Substituir tabelas de destino. As tabelas de origem e de destino precisam ter o mesmo esquema de particionamento.

  9. No menu Conta de serviço, selecione uma conta de serviço nas contas de serviço associadas ao seu projeto do Google Cloud. É possível associar uma conta de serviço à transferência em vez de usar suas credenciais de usuário. Para mais informações sobre o uso de contas de serviço com transferências de dados, consulte Usar contas de serviço.

    • Se você fez login com uma identidade federada, é necessário uma conta de serviço para criar uma transferência. Se você fez login com uma Conta do Google, uma conta de serviço para a transferência é opcional.
    • A conta de serviço precisa ter os papéis necessários.
  10. Opcional: na seção Opções de notificação, faça o seguinte:

    • Para ativar as notificações por e-mail, clique no botão de alternância. Quando você ativa essa opção, o proprietário da configuração de transferência recebe uma notificação por e-mail quando uma execução de transferência falha.
    • Para ativar as notificações do Pub/Sub, clique no botão de alternância e selecione um nome de tópico na lista ou clique em Criar um tópico. Essa opção configura notificações de execução do Pub/Sub para a transferência.
  11. Clique em Salvar.

bq

  1. Ative o serviço de transferência de dados do BigQuery para o conjunto de dados de destino.

  2. Verifique se você tem os papéis necessários.

  3. Para criar um conjunto de dados do BigQuery, use o comando bq mk com as sinalizações de criação de conjunto de dados --dataset e location:

    bq mk \
      --dataset \
      --location=LOCATION \
      PROJECT:DATASET

    Substitua:

    • LOCATION: o local em que você quer copiar o conjunto de dados
    • PROJECT: o ID do projeto do conjunto de dados de destino
    • DATASET: o nome do conjunto de dados de destino
  4. Para copiar um conjunto de dados, use o comando bq mk com as sinalizações de criação de transferência --transfer_config e --data_source. Defina a flag --data_source como cross_region_copy. Para uma lista completa de valores válidos para a sinalização --data_source, consulte as sinalizações de configuração de transferência na referência da ferramenta de linha de comando bq.

    bq mk \
      --transfer_config \
      --project_id=PROJECT \
      --data_source=cross_region_copy \
      --target_dataset=DATASET \
      --display_name=NAME \
     --service_account_name=SERCICE_ACCOUNT \
      --params='PARAMETERS'

    Substitua:

    • NAME: o nome de exibição do job de cópia ou da configuração de transferência.

    • SERVICE_ACCOUNT: o nome da conta de serviço usado para autenticar a transferência. A conta de serviço precisa pertencer ao mesmo project_id usado para criar a transferência e ter todas as permissões necessárias.

    • PARAMETERS: os parâmetros da configuração de transferência no formato JSON

      Os parâmetros de uma configuração de cópia de conjunto de dados incluem o seguinte:

      • source_dataset_id: o ID do conjunto de dados de origem que você quer copiar
      • source_project_id: o ID do projeto que contém o conjunto de dados de origem
      • overwrite_destination_table: uma flag opcional que permite truncar as tabelas de uma cópia anterior e atualizar todos os dados

      As tabelas de origem e de destino precisam ter o mesmo esquema de particionamento.

    Os seguintes exemplos mostram a formatação dos parâmetros com base no ambiente do sistema:

    • Linux: use aspas simples para delimitar a string JSON. Por exemplo:

      '{"source_dataset_id":"mydataset","source_project_id":"mysourceproject","overwrite_destination_table":"true"}'
      
    • Linha de comando do Windows: use aspas duplas para delimitar a string JSON e faça o escape de aspas duplas na string com uma barra invertida. Por exemplo:

      "{\"source_dataset_id\":\"mydataset\",\"source_project_id\":\"mysourceproject\",\"overwrite_destination_table\":\"true\"}"
      
    • PowerShell: use aspas simples para delimitar a string JSON e faça o escape das aspas duplas na string com uma barra invertida. Por exemplo:

      '{\"source_dataset_id\":\"mydataset\",\"source_project_id\":\"mysourceproject\",\"overwrite_destination_table\":\"true\"}'
      

    Por exemplo, o comando a seguir cria uma configuração de cópia de conjunto de dados chamada My Transfer com um conjunto de dados de destino chamado mydataset e um projeto com o ID myproject.

    bq mk \
      --transfer_config \
      --project_id=myproject \
      --data_source=cross_region_copy \
      --target_dataset=mydataset \
      --display_name='My Transfer' \
      --params='{
          "source_dataset_id":"123_demo_eu",
          "source_project_id":"mysourceproject",
          "overwrite_destination_table":"true"
          }'

API

  1. Ative o serviço de transferência de dados do BigQuery para o conjunto de dados de destino.

  2. Verifique se você tem os papéis necessários.

  3. Para criar um conjunto de dados do BigQuery, chame o método datasets.insert com um recurso de conjunto de dados definido.

  4. Para copiar um conjunto de dados, use o método projects.locations.transferConfigs.create e forneça uma instância do recurso TransferConfig.

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

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.

import com.google.api.gax.rpc.ApiException;
import com.google.cloud.bigquery.datatransfer.v1.CreateTransferConfigRequest;
import com.google.cloud.bigquery.datatransfer.v1.DataTransferServiceClient;
import com.google.cloud.bigquery.datatransfer.v1.ProjectName;
import com.google.cloud.bigquery.datatransfer.v1.TransferConfig;
import com.google.protobuf.Struct;
import com.google.protobuf.Value;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

// Sample to copy dataset from another gcp project
public class CopyDataset {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    final String destinationProjectId = "MY_DESTINATION_PROJECT_ID";
    final String destinationDatasetId = "MY_DESTINATION_DATASET_ID";
    final String sourceProjectId = "MY_SOURCE_PROJECT_ID";
    final String sourceDatasetId = "MY_SOURCE_DATASET_ID";
    Map<String, Value> params = new HashMap<>();
    params.put("source_project_id", Value.newBuilder().setStringValue(sourceProjectId).build());
    params.put("source_dataset_id", Value.newBuilder().setStringValue(sourceDatasetId).build());
    TransferConfig transferConfig =
        TransferConfig.newBuilder()
            .setDestinationDatasetId(destinationDatasetId)
            .setDisplayName("Your Dataset Copy Name")
            .setDataSourceId("cross_region_copy")
            .setParams(Struct.newBuilder().putAllFields(params).build())
            .setSchedule("every 24 hours")
            .build();
    copyDataset(destinationProjectId, transferConfig);
  }

  public static void copyDataset(String projectId, TransferConfig transferConfig)
      throws IOException {
    try (DataTransferServiceClient dataTransferServiceClient = DataTransferServiceClient.create()) {
      ProjectName parent = ProjectName.of(projectId);
      CreateTransferConfigRequest request =
          CreateTransferConfigRequest.newBuilder()
              .setParent(parent.toString())
              .setTransferConfig(transferConfig)
              .build();
      TransferConfig config = dataTransferServiceClient.createTransferConfig(request);
      System.out.println("Copy dataset created successfully :" + config.getName());
    } catch (ApiException ex) {
      System.out.print("Copy dataset was not created." + ex.toString());
    }
  }
}

Python

Antes de testar esta amostra, siga as instruções de configuração do Python 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 em Python.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.

Instale o cliente Python para a API Data Transfer do BigQuery com pip install google-cloud-bigquery-datatransfer. Em seguida, crie uma configuração de transferência para copiar o conjunto de dados.
from google.cloud import bigquery_datatransfer

transfer_client = bigquery_datatransfer.DataTransferServiceClient()

destination_project_id = "my-destination-project"
destination_dataset_id = "my_destination_dataset"
source_project_id = "my-source-project"
source_dataset_id = "my_source_dataset"
transfer_config = bigquery_datatransfer.TransferConfig(
    destination_dataset_id=destination_dataset_id,
    display_name="Your Dataset Copy Name",
    data_source_id="cross_region_copy",
    params={
        "source_project_id": source_project_id,
        "source_dataset_id": source_dataset_id,
    },
    schedule="every 24 hours",
)
transfer_config = transfer_client.create_transfer_config(
    parent=transfer_client.common_project_path(destination_project_id),
    transfer_config=transfer_config,
)
print(f"Created transfer config: {transfer_config.name}")

Para evitar custos extras de armazenamento, considere a exclusão do conjunto de dados antigo.

Consultar jobs de cópia de conjunto de dados

Para consultar o status e os detalhes de um job de cópia de conjunto de dados no console do Google Cloud, faça o seguinte:

  1. No console do Google Cloud, acesse a página Transferências de dados.

    Acesse Transferências de dados

  2. Selecione uma transferência em que você quer visualizar os detalhes e faça o seguinte:

    1. Na página Detalhes da transferência, selecione uma execução de transferência.

    2. Para atualizar, clique em Atualizar.

Recriar conjuntos de dados em outro local

Para mover manualmente um conjunto de dados de um local para outro, siga estas etapas:

  1. Exporte os dados das tabelas do BigQuery para um bucket do Cloud Storage no mesmo local que o conjunto de dados ou em um local contido no local do conjunto de dados. Por exemplo, se o conjunto de dados estiver no local multirregional EU, será possível exportar os dados para o local europe-west1 da Bélgica, que faz parte da UE.

    Não há cobrança pela exportação de dados do BigQuery, mas são cobradas taxas pelo armazenamento dos dados exportados no Cloud Storage. As exportações do BigQuery estão sujeitas aos limites de jobs de exportação.

  2. Copie ou mova os dados do bucket do Cloud Storage de exportação para um novo bucket criado no local de destino. Por exemplo, se você estiver movendo os dados da multirregião US para a região asia-northeast1 de Tóquio, será necessário transferi-los para um bucket criado em Tóquio. Para informações sobre como transferir objetos do Cloud Storage, consulte Copiar, renomear e mover objetos na documentação do Cloud Storage.

    A transferência de dados entre regiões gera cobranças de saída de rede no Cloud Storage.

  3. Crie um conjunto de dados do BigQuery no novo local e carregue os dados do bucket do Cloud Storage nele.

    Você não será cobrado pelo carregamento dos dados no BigQuery, mas haverá cobranças pelo armazenamento dos dados no Cloud Storage até que os dados ou o bucket sejam excluídos. Também haverá cobrança pelo armazenamento de dados no BigQuery depois que eles forem carregados. O carregamento de dados no BigQuery está sujeito aos limites de jobs de carregamento.

Também é possível usar o Cloud Composer para mover e copiar grandes conjuntos de dados de maneira programática.

Para mais informações sobre como usar o Cloud Storage para armazenar e mover grandes conjuntos de dados, consulte Como usar o Cloud Storage com Big Data.

Proteger conjuntos de dados

Para controlar o acesso a conjuntos de dados no BigQuery, consulte Como controlar o acesso a conjuntos de dados. Para saber mais sobre criptografia de dados, consulte Criptografia em repouso.

Excluir conjuntos de dados

Quando você exclui um conjunto de dados usando o console do Google Cloud, as tabelas e visualizações no conjunto de dados, incluindo os dados, são excluídas. Ao excluir um conjunto de dados usando a ferramenta de linha de comando bq, use a sinalização -r para excluir as tabelas e visualizações.

Para excluir um conjunto de dados, selecione uma das seguintes opções:

Console

  1. Acessar a página do BigQuery.

    Ir para o BigQuery

  2. No painel Explorer, expanda o projeto e selecione um conjunto de dados.

  3. Expanda a opção Ações e clique em Excluir.

  4. Na caixa de diálogo Excluir conjunto de dados, digite delete no campo e clique em Excluir.

SQL

Para excluir um conjunto de dados, use a instrução DROP SCHEMA.

No exemplo a seguir, um conjunto de dados chamado mydataset é excluído:

  1. No Console do Google Cloud, acesse a página BigQuery.

    Ir para o BigQuery

  2. No editor de consultas, digite a seguinte instrução:

    DROP SCHEMA IF EXISTS mydataset;

    Por padrão, isso só funciona para excluir um conjunto de dados vazio. Para excluir um conjunto de dados e todo o conteúdo dele, use a palavra-chave CASCADE:

    DROP SCHEMA IF EXISTS mydataset CASCADE;

  3. Clique em Executar.

Para mais informações sobre como executar consultas, acesse Executar uma consulta interativa.

bq

Use o comando bq rm com a flag --dataset ou -d, que é opcional. Se o conjunto de dados contiver tabelas, você precisará usar a flag -r para remover todas as tabelas dele. Se você usar a flag -r, será possível omitir a flag --dataset ou -d.

Depois de executar o comando, o sistema pede confirmação. É possível usar a flag -f para ignorar a confirmação.

Para excluir uma tabela em um projeto diferente do padrão, adicione o ID do projeto ao nome do conjunto de dados no seguinte formato: PROJECT_ID:DATASET.

bq rm -r -f -d PROJECT_ID:DATASET

Substitua:

  • PROJECT_ID: ID do projeto
  • DATASET: o nome do conjunto de dados que você está excluindo

Exemplos:

Insira o comando a seguir para remover do projeto padrão um conjunto de dados chamado mydataset e todas as tabelas nele. O comando usa a flag -d.

bq rm -r -d mydataset

Quando solicitado, digite y e pressione Enter.

Digite o seguinte comando para remover mydataset e todas as respectivas tabelas de myotherproject. O comando não usa a flag opcional -d. A flag -f é usada para ignorar a confirmação.

bq rm -r -f myotherproject:mydataset

Use o comando bq ls para confirmar se o conjunto de dados foi excluído.

API

Chame o método datasets.delete para excluir o conjunto de dados e defina o parâmetro deleteContents como true para excluir as tabelas dele.

C#

O exemplo de código a seguir exclui um conjunto de dados vazio.

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 BigQuery em C#.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.

Instale o cliente Python para a API Data Transfer do BigQuery com pip install google-cloud-bigquery-datatransfer. Em seguida, crie uma configuração de transferência para copiar o conjunto de dados.

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

public class BigQueryDeleteDataset
{
    public void DeleteDataset(
        string projectId = "your-project-id",
        string datasetId = "your_empty_dataset"
    )
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        // Delete a dataset that does not contain any tables
        client.DeleteDataset(datasetId: datasetId);
        Console.WriteLine($"Dataset {datasetId} deleted.");
    }
}

No exemplo de código a seguir, um conjunto de dados e todo o conteúdo dele são excluídos:

// Copyright(c) 2018 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
//
// http://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.
//

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

public class BigQueryDeleteDatasetAndContents
{
    public void DeleteDatasetAndContents(
        string projectId = "your-project-id",
        string datasetId = "your_dataset_with_tables"
    )
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        // Use the DeleteDatasetOptions to delete a dataset and its contents
        client.DeleteDataset(
            datasetId: datasetId,
            options: new DeleteDatasetOptions() { DeleteContents = true }
        );
        Console.WriteLine($"Dataset {datasetId} and contents 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 BigQuery em Go.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.

Instale o cliente Python para a API Data Transfer do BigQuery com pip install google-cloud-bigquery-datatransfer. Em seguida, crie uma configuração de transferência para copiar o conjunto de dados.
import (
	"context"
	"fmt"

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

// deleteDataset demonstrates the deletion of an empty dataset.
func deleteDataset(projectID, datasetID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	ctx := context.Background()

	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	// To recursively delete a dataset and contents, use DeleteWithContents.
	if err := client.Dataset(datasetID).Delete(ctx); err != nil {
		return fmt.Errorf("Delete: %v", err)
	}
	return nil
}

Java

O exemplo de código a seguir exclui um conjunto de dados vazio.

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

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.

Instale o cliente Python para a API Data Transfer do BigQuery com pip install google-cloud-bigquery-datatransfer. Em seguida, crie uma configuração de transferência para copiar o conjunto de dados.
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQuery.DatasetDeleteOption;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.DatasetId;

public class DeleteDataset {

  public static void runDeleteDataset() {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    String datasetName = "MY_DATASET_NAME";
    deleteDataset(projectId, datasetName);
  }

  public static void deleteDataset(String projectId, String datasetName) {
    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();

      DatasetId datasetId = DatasetId.of(projectId, datasetName);
      boolean success = bigquery.delete(datasetId, DatasetDeleteOption.deleteContents());
      if (success) {
        System.out.println("Dataset deleted successfully");
      } else {
        System.out.println("Dataset was not found");
      }
    } catch (BigQueryException e) {
      System.out.println("Dataset was not deleted. \n" + e.toString());
    }
  }
}

No exemplo de código a seguir, um conjunto de dados e todo o conteúdo dele são excluídos:

/*
 * Copyright 2020 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
 *
 * http://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.
 */

package com.example.bigquery;

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.DatasetId;

// Sample to delete dataset with contents.
public class DeleteDatasetAndContents {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    String datasetName = "MY_DATASET_NAME";
    deleteDatasetAndContents(projectId, datasetName);
  }

  public static void deleteDatasetAndContents(String projectId, String datasetName) {
    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();

      DatasetId datasetId = DatasetId.of(projectId, datasetName);
      // Use the force parameter to delete a dataset and its contents
      boolean success = bigquery.delete(datasetId, BigQuery.DatasetDeleteOption.deleteContents());
      if (success) {
        System.out.println("Dataset deleted with contents successfully");
      } else {
        System.out.println("Dataset was not found");
      }
    } catch (BigQueryException e) {
      System.out.println("Dataset was not deleted with contents. \n" + e.toString());
    }
  }
}

Node.js

Antes de testar esta amostra, siga as instruções de configuração do Node.js 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 em Node.js.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.

Instale o cliente Python para a API Data Transfer do BigQuery com pip install google-cloud-bigquery-datatransfer. Em seguida, crie uma configuração de transferência para copiar o conjunto de dados.
// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function deleteDataset() {
  // Deletes a dataset named "my_dataset".

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

  // Create a reference to the existing dataset
  const dataset = bigquery.dataset(datasetId);

  // Delete the dataset and its contents
  await dataset.delete({force: true});
  console.log(`Dataset ${dataset.id} deleted.`);
}

PHP

Antes de testar esta amostra, siga as instruções de configuração do PHP 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 em PHP.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.

Instale o cliente Python para a API Data Transfer do BigQuery com pip install google-cloud-bigquery-datatransfer. Em seguida, crie uma configuração de transferência para copiar o conjunto de dados.
use Google\Cloud\BigQuery\BigQueryClient;

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

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

Python

Antes de testar esta amostra, siga as instruções de configuração do Python 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 em Python.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.

Instale o cliente Python para a API Data Transfer do BigQuery com pip install google-cloud-bigquery-datatransfer. Em seguida, crie uma configuração de transferência para copiar o conjunto de dados.

from google.cloud import bigquery

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

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

# Use the delete_contents parameter to delete a dataset and its contents.
# Use the not_found_ok parameter to not receive an error if the dataset has already been deleted.
client.delete_dataset(
    dataset_id, delete_contents=True, not_found_ok=True
)  # Make an API request.

print("Deleted dataset '{}'.".format(dataset_id))

Ruby

O exemplo de código a seguir exclui um conjunto de dados vazio.

Antes de testar esta amostra, siga as instruções de configuração do Ruby 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 em Ruby.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.

Instale o cliente Python para a API Data Transfer do BigQuery com pip install google-cloud-bigquery-datatransfer. Em seguida, crie uma configuração de transferência para copiar o conjunto de dados.
require "google/cloud/bigquery"

def delete_dataset dataset_id = "my_empty_dataset"
  bigquery = Google::Cloud::Bigquery.new

  # Delete a dataset that does not contain any tables
  dataset = bigquery.dataset dataset_id
  dataset.delete
  puts "Dataset #{dataset_id} deleted."
end

No exemplo de código a seguir, um conjunto de dados e todo o conteúdo dele são excluídos:

# Copyright 2020 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
#
#     http://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.
require "google/cloud/bigquery"

def delete_dataset_and_contents dataset_id = "my_dataset_with_tables"
  bigquery = Google::Cloud::Bigquery.new

  # Use the force parameter to delete a dataset and its contents
  dataset = bigquery.dataset dataset_id
  dataset.delete force: true
  puts "Dataset #{dataset_id} and contents deleted."
end

Restaurar tabelas de conjuntos de dados excluídos

É possível restaurar as tabelas de um conjunto de dados excluído que estejam dentro da janela de viagem no tempo dele. Para restaurar todo o conjunto de dados, consulte Cancelar exclusão de conjuntos de dados.

  1. Crie um conjunto de dados com o mesmo nome e no mesmo local do original.
  2. Escolha um carimbo de data/hora anterior à exclusão do conjunto de dados original usando um formato de milissegundos desde o período, por exemplo, 1418864998000.
  3. Copie a tabela originaldataset.table1 no momento 1418864998000 para o novo conjunto de dados:

    bq cp originaldataset.table1@1418864998000 mydataset.mytable
    

    Para encontrar os nomes das tabelas não vazias que estavam no conjunto de dados excluído, consulte a visualização INFORMATION_SCHEMA.TABLE_STORAGE do conjunto de dados dentro da janela de viagem no tempo.

Cancelar exclusão de conjuntos de dados

É possível cancelar a exclusão de um conjunto de dados para recuperá-lo para o estado em que ele estava quando foi excluído. Só é possível cancelar a exclusão dos conjuntos de dados que estão dentro da janela de viagem no tempo. Essa recuperação inclui todos os objetos contidos no conjunto de dados, as propriedades dele e as configurações de segurança. Para recursos que não são recuperados, consulte Cancelar exclusão de limitações do conjunto de dados.

Cancelar exclusão das limitações do conjunto de dados

  • Os conjuntos de dados restaurados podem fazer referência a principais de segurança que não existem mais.
  • As referências a um conjunto de dados excluído nos conjuntos de dados vinculados não são restauradas usando o cancelamento da exclusão. Os assinantes precisam se inscrever de novo para restaurar os links manualmente.
  • As tags de empresas não são restauradas com o cancelamento de exclusão.
  • É necessário atualizar manualmente as visualizações materializadas e autorizar novamente visualizações autorizadas, conjuntos de dados autorizados. e rotinas autorizadas. Observe que, quando recursos autorizados (visualizações, conjuntos de dados e rotinas) são excluídos, a autorização leva até 24 horas para ser excluída. Portanto, se você cancelar a exclusão de um conjunto de dados com um recurso autorizado menos de 24 horas após a exclusão, talvez não seja necessária uma nova autorização. Como prática recomendada, sempre verifique a autorização depois de cancelar a exclusão de recursos.

Cancelar a exclusão de um conjunto de dados

Para cancelar exclusão de um conjunto de dados, selecione uma das seguintes opções:

SQL

Use a instrução de linguagem de definição de dados (DDL) UNDROP SCHEMA:

  1. No Console do Google Cloud, acesse a página BigQuery.

    Ir para o BigQuery

  2. No editor de consultas, digite a seguinte instrução:

    UNDROP SCHEMA DATASET_ID;

    Substitua DATASET_ID pelo conjunto de dados que você quer cancelar a exclusão.

  3. Especifique o local do conjunto de dados que você quer cancelar a exclusão.

  4. Clique em Executar.

Para informações sobre como executar consultas, consulte Como executar consultas interativas.

API

Chame o método datasets.undelete.

Quando você cancela a exclusão de um conjunto de dados, os seguintes erros podem ocorrer:

  • ALREADY_EXISTS: um conjunto de dados com o mesmo nome já existe na região em que você tentou cancelar a exclusão. Não é possível cancelar a exclusão para substituir ou mesclar conjuntos de dados.
  • NOT_FOUND: o conjunto de dados que você está tentando recuperar passou da janela de viagem no tempo, nunca existiu ou você não especificou o local correto do conjunto de dados.
  • ACCESS_DENIED: você não tem as permissões corretas para cancelar a exclusão deste conjunto de dados.

Cotas

Para informações sobre cotas de cópia, consulte Jobs de cópia. O uso de jobs de cópia está disponível no INFORMATION_SCHEMA. Para saber como consultar a visualização INFORMATION_SCHEMA.JOBS, consulte Visualização JOBS.

Preços

Para informações sobre preços de cópia de conjuntos de dados, consulte Preços de replicação de dados.

O BigQuery envia dados compactados para cópia entre regiões. Portanto, os dados faturados podem ser menores que o tamanho real do conjunto de dados. Para saber mais, acesse a página Preços do BigQuery.

A seguir