Gerenciar conjuntos de dados

Neste documento, descrevemos como recriar conjuntos de dados em outro local, proteger conjuntos de dados, excluir conjuntos de dados e restaurar tabelas de conjuntos de dados excluídos no BigQuery. Para informações sobre como restaurar (ou cancelar a exclusão) de um conjunto de dados excluído, consulte Restaurar conjuntos de dados excluídos.

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.

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.

Excluir um conjunto de dados

Conceda essas funções para excluir um conjunto de dados.

Para receber as permissões necessárias para excluir conjuntos de dados, peça ao administrador para conceder a você o papel do IAM de Proprietário de dados do BigQuery (roles/bigquery.dataOwner) no projeto. Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Esse papel predefinido contém as permissões necessárias para excluir conjuntos de dados. Para acessar 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 excluir conjuntos de dados:

  • bigquery.datasets.delete no projeto
  • bigquery.tables.delete no projeto

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

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.

    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 extraçã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 Serviço gerenciado para Apache Airflow 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 Cloud de Confiance , as tabelas e visualizações no conjunto de dados, incluindo os dados, são excluídas automaticamente. No entanto, ao usar qualquer outro método, você precisa esvaziar o conjunto de dados primeiro ou especificar flags, parâmetros ou palavras-chave correspondentes que forcem a remoção do conteúdo do conjunto de dados.

Se você tentar excluir um conjunto de dados não vazio sem as flags ou parâmetros adequados, a operação vai falhar com o seguinte erro: Dataset project:dataset is still in use.

A exclusão de um conjunto de dados cria uma entrada de registro de auditoria para a exclusão. Ele não cria entradas de registro separadas para cada tabela excluída no conjunto de dados.

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

Console

  1. Acessar a página do BigQuery.

    Acessar o BigQuery

  2. No painel à esquerda, clique em Explorer:

    Botão destacado para o painel "Explorer".

  3. No painel Explorer, expanda o projeto, clique em Conjuntos de dados e selecione o conjunto de dados.

  4. No painel de detalhes, clique em Excluir.

  5. 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 Cloud de Confiance , acesse a página BigQuery.

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

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

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.

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

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.

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

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.

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

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.

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

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.

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

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.

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

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 Restaurar conjuntos de dados excluídos.

  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.

Restaurar conjuntos de dados excluídos

Para saber como restaurar (ou cancelar a exclusão) um conjunto de dados excluído, consulte Restaurar conjuntos de dados excluídos.

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, acesse 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