Como exportar dados de tabelas

Esta página ensina como exportar e extrair dados de tabelas do BigQuery.

Depois de carregar os dados no BigQuery, eles podem ser exportados em diferentes formatos. O BigQuery pode exportar até 1 GB de dados para um único arquivo. Se você estiver exportando mais de 1 GB de dados, será preciso exportá-los para vários arquivos. Ao fazer isso, o tamanho dos arquivos será variado.

É possível usar um serviço como o Dataflow para ler dados no BigQuery, em vez de exportá-los manualmente. Para mais informações sobre como usar o Dataflow para ler e gravar no BigQuery, consulte E/S do BigQuery (em inglês) na documentação do Apache Beam.

Permissões necessárias

Para exportar dados para o Cloud Storage, você precisa de permissões para acessar a tabela do BigQuery que contém os dados, para executar um job de exportação e para gravar os dados no intervalo do Cloud Storage.

Permissões do BigQuery

  • Para exportar dados, é necessário ter, no mínimo, as permissões bigquery.tables.export. Os papéis predefinidos do IAM a seguir incluem permissões bigquery.tables.export:

    • bigquery.dataViewer
    • bigquery.dataOwner
    • bigquery.dataEditor
    • bigquery.admin
  • Para executar um job de exportação, é necessário ter, no mínimo, as permissões bigquery.jobs.create. Os papéis predefinidos do IAM a seguir tem as permissões bigquery.jobs.create:

    • bigquery.user
    • bigquery.jobUser
    • bigquery.admin

Permissões do Cloud Storage

  • Para gravar os dados em um bucket do Cloud Storage, é necessário ter as permissões storage.objects.create e storage.objects.delete. Os seguintes papéis predefinidos do IAM concedem as duas permissões:

    • storage.objectAdmin
    • storage.admin

Limitações de exportação

Ao exportar dados do BigQuery, observe os itens a seguir:

  • Não é possível exportar dados de tabela para um arquivo local, para o Planilhas e nem para o Drive. O único local de exportação aceito é o Cloud Storage. Para mais informações sobre como salvar resultados de consulta, acesse Como fazer o download e salvar resultados de consulta.
  • É possível exportar até 1 GB de dados da tabela para um único arquivo. Se você estiver exportando mais de 1 GB de dados, use um caractere curinga para exportar os dados para vários arquivos. Ao exportar dados para vários arquivos, o tamanho dos arquivos varia.
  • Não é possível exportar dados aninhados e repetidos no formato CSV. Dados aninhados e repetidos são compatíveis com as exportações Avro e JSON.
  • Quando você exporta dados no formato JSON, os tipos de dados INT64 (números inteiros) são codificados como strings JSON para preservar a precisão de 64 bits quando os dados são lidos por outros sistemas.
  • Não é possível exportar dados de várias tabelas em um único job de exportação.
  • Ao exportar dados usando o Console do Cloud ou a IU da Web clássica do BigQuery, só é possível escolher o tipo de compactação GZIP.

Considerações sobre local

Ao escolher um local para os dados, leve em consideração os seguintes itens:

  • Colocar os intervalos do Cloud Storage para exportar dados.
    • Ao exportar dados, o intervalo regional ou multirregional do Cloud Storage precisa estar no mesmo local que o conjunto de dados do BigQuery. Por exemplo, se o conjunto de dados do BigQuery estiver no local multirregional da UE, o bucket do Cloud Storage que contém os dados que você está exportando precisará estar em um local regional ou multirregional na UE.
    • Se o conjunto de dados estiver em um local regional, seu intervalo do Cloud Storage precisará ser um intervalo regional no mesmo local. Por exemplo, se o conjunto de dados estiver na região de Tóquio, seu intervalo do Cloud Storage precisará ser um intervalo regional em Tóquio.
    • Exceção: se o seu conjunto de dados estiver no local multirregional dos EUA, será possível exportar dados para um intervalo do Cloud Storage em qualquer local regional ou multirregional.
  • Desenvolver um plano de gerenciamento de dados.
    • Se você escolher um recurso de armazenamento regional, como um conjunto de dados do BigQuery ou um intervalo do Cloud Storage, será necessário desenvolver um plano para gerenciar geograficamente seus dados.

Para mais informações sobre locais do Cloud Storage, consulte Locais de intervalos na documentação do Cloud Storage.

Como mover dados do BigQuery entre locais

Não é possível alterar o local de um conjunto de dados após a criação, mas é possível fazer uma cópia dele. Não é possível mover um conjunto de dados de um local para outro, mas é possível mover (recriar) manualmente um conjunto de dados.

Como copiar conjuntos de dados

Para ver as etapas para essa ação, inclusive entre regiões, consulte Como copiar conjuntos de dados.

Como mover conjuntos de dados

Para mover manualmente um conjunto de dados de um local para outro, siga estas instruções:

  1. Exporte os dados das tabelas do BigQuery para um intervalo regional ou multirregional do Cloud Storage no mesmo local do conjunto de dados. Por exemplo, se o conjunto de dados estiver no local multirregional EU, exporte os dados para um intervalo regional ou multirregional no EU.

    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 intervalo do Cloud Storage para um intervalo regional ou multirregional no novo local. Por exemplo, se você estiver movendo os dados do local multirregional US para o local regional Tokyo, será necessário transferi-los para um intervalo regional em Tokyo. Para mais informações sobre como transferir objetos do Cloud Storage, consulte na documentação do Cloud Storage Como renomear, copiar e mover objetos.

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

  3. Depois de transferir os dados para um intervalo do Cloud Storage no novo local, crie um novo conjunto de dados do BigQuery no novo local. Em seguida, carregue os dados do intervalo do Cloud Storage no BigQuery.

    Você não será cobrado pelo carregamento dos dados no BigQuery, mas haverá cobranças pelo armazenamento no Cloud Storage até que eles ou o intervalo 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 às limitações 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.

Formatos de exportação e tipos de compactação

O BigQuery é compatível com os seguintes formatos de dados e tipos de compactação para dados exportados.

Formato de dados Tipos de compactação compatíveis Detalhes
CSV GZIP

É possível controlar o delimitador CSV nos dados exportados usando a sinalização da ferramenta de linha de comando --field_delimiter bq ou a configuration.extract.fieldDelimiter. .

Dados aninhados e repetidos não são compatíveis.

JSON GZIP Dados aninhados e repetidos são compatíveis.
Avro DEFLATE, SNAPPY

GZIP não é aceito para exportações do Avro.

Dados aninhados e repetidos são compatíveis.

Como exportar dados armazenados no BigQuery

Para exportar dados de tabela:

  • Use o Console do Cloud ou a IU da Web clássica do BigQuery
  • Como usar o comando bq extract na ferramenta de linha de comando bq
  • Envie um job extract por meio da API ou das bibliotecas cliente

Como exportar dados de tabelas

Para exportar dados de uma tabela do BigQuery, siga estas etapas:

Console

  1. Abra a página do BigQuery no Console do Cloud.

    Acessar a página do BigQuery

  2. No painel de navegação, na seção Recursos, expanda seu projeto e selecione um conjunto de dados. Encontre e clique na tabela que contém os dados que você vai exportar.

  3. No lado direito da janela, clique em Exportar e selecione Exportar para o Google Cloud Storage.

    Exportar dados

  4. Na caixa de diálogo Exportar tabela para o Google Cloud Storage, siga estas instruções:

    • Em Selecionar local do Google Cloud Storage, procure o bucket, a pasta ou o arquivo para o qual quer exportar os dados.
    • Em Formato de exportação, escolha o formato dos dados exportados: CSV, JSON (delimitado por nova linha) ou Avro.
    • Em Compactação, aceite o valor padrão, None, ou escolha GZIP. O formato Avro não pode ser usado com a compactação GZIP. Para compactar dados Avro, use a ferramenta de linha de comando bqou a API e especifique um dos tipos de compactação compatíveis com os dados Avro: DEFLATE ou SNAPPY.
    • Clique em Exportar para exportar a tabela.

Para verificar o andamento do job, procure um job de exportação no Histórico de jobs, na parte superior da navegação.

IU clássica

  1. Acesse a IU da Web do BigQuery.
    Acesse a IU da Web do BigQuery

  2. No painel de navegação, clique no conjunto de dados para expandi-lo.

  3. Localize e clique no ícone de seta para baixo imagem do ícone de seta para baixo ao lado da tabela que contém os dados que você está exportando.

  4. Selecione Exportar tabela para exibir a caixa de diálogo Exportar para o Google Cloud Storage.

  5. Na caixa de diálogo Exportar para o Google Cloud Storage:

    • Em Formato de exportação, escolha o formato dos dados exportados: CSV, JSON (delimitado por nova linha) ou Avro.
    • Em Compactação, aceite o valor padrão, None, ou escolha GZIP. O formato Avro não pode ser usado com a compactação GZIP. Para compactar dados Avro, use a ferramenta de linha de comando bqou a API e especifique um dos tipos de compactação compatíveis com os dados Avro: DEFLATE ou SNAPPY.
    • Na caixa de texto URI do Google Cloud Storage, insira um URI válido no formato gs://bucket_name/filename.ext, em que bucket_name é o nome do bucket do Cloud Storage e filename.ext é o nome e a extensão do arquivo de destino. O conjunto de dados do BigQuery e o intervalo do Cloud Storage precisam estar no mesmo local.
    • Clique em OK para exportar a tabela.

Durante a execução do job, (extraindo) aparece ao lado do nome da tabela na navegação. Verifique o andamento do job na parte superior da navegação, em Histórico do job, procurando um job de Extração.

bq

Use o comando bq extractcom a sinalização --destination_format.

Há também a opção de fornecer a sinalização --location e definir o valor do local.

Estas são outras sinalizações opcionais:

  • --compression: o tipo de compactação a ser usado para arquivos exportados.
  • --field_delimiter: o caractere que indica o limite entre as colunas no arquivo de saída para exportações de CSV. \t e tab são permitidos como delimitadores de tabulação.
  • --print_header: quando especificado, esse objeto imprime linhas de cabeçalho para formatos que têm cabeçalhos, como CSV.
bq --location=location extract \
--destination_format format \
--compression compression_type \
--field_delimiter delimiter \
--print_header=boolean \
project_id:dataset.table \
gs://bucket/filename.ext

Em que:

  • location é o nome do local. A sinalização --location é opcional. Por exemplo, se estiver usando o BigQuery na região de Tóquio, defina o valor da sinalização como asia-northeast1. É possível definir um valor padrão para o local usando o arquivo .bigqueryrc.
  • format é o formato dos dados exportados: CSV, NEWLINE_DELIMITED_JSON ou AVRO.
  • compression_type é um tipo de compactação compatível com o formato dos dados. CSV e NEWLINE_DELIMITED_JSON são compatíveis com GZIP. AVRO é compatível com DEFLATE e SNAPPY.
  • delimiter é o caractere que indica o limite entre as colunas nas exportações de CSV. \t e tab são nomes aceitos para a tabulação.
  • boolean é true ou false. Quando definido como true, as linhas de cabeçalho serão impressas nos dados exportados se o formato de dados for compatível com cabeçalhos. O valor padrão é true.
  • project_id é o ID do projeto;
  • dataset é o nome do conjunto de dados de origem;
  • table é a tabela que você está exportando;
  • bucket é o nome do bucket do Cloud Storage para o qual você está exportando os dados. O conjunto de dados do BigQuery e o intervalo do Cloud Storage precisam estar no mesmo local.
  • filename.ext é o nome e a extensão do arquivo de dados exportado. Exporte para vários arquivos com um caractere curinga.

Exemplos:

Por exemplo, o comando a seguir exporta mydataset.mytable para um arquivo gzip compactado chamado myfile.csv. myfile.csv é armazenado em um intervalo do Cloud Storage chamado example-bucket.

bq extract \
--compression GZIP \
'mydataset.mytable' \
gs://example-bucket/myfile.csv

O formato de destino padrão é CSV. Para exportar para JSON ou Avro, use a sinalização destination_format, que precisa ser definida como NEWLINE_DELIMITED_JSON ou AVRO. Por exemplo:

bq extract \
--destination_format NEWLINE_DELIMITED_JSON \
'mydataset.mytable' \
gs://example-bucket/myfile.json

O comando a seguir exporta mydataset.mytable em um arquivo Avro, que é compactado usando o Snappy. O nome do arquivo é myfile.avro. myfile.avro é exportado para um intervalo do Cloud Storage chamado example-bucket.

bq extract \
--destination_format AVRO \
--compression SNAPPY \
'mydataset.mytable' \
gs://example-bucket/myfile.avro

API

Para exportar dados, crie um job extract e preencha a configuração do job.

(Opcional) Especifique seu local na propriedade location, na seção jobReference do recurso do job.

  1. Crie um job de extração que aponte para os dados de origem do BigQuery e para o destino do Cloud Storage.

  2. Especifique a tabela de origem usando o objeto de configuração sourceTable, que contém o ID do projeto, o ID do conjunto de dados e o ID da tabela.

  3. A propriedade destination URI(s) precisa ser totalmente qualificada no formato gs://bucket/filename.ext. Cada URI contém um caractere curinga "*" após o nome do bucket.

  4. Defina a propriedade configuration.extract.destinationFormat para especificar o formato dos dados. Por exemplo, para exportar um arquivo JSON, defina essa propriedade com o valor NEWLINE_DELIMITED_JSON.

  5. Para verificar o status do job, chame jobs.get(job_id) com o ID do job retornado pela solicitação inicial.

    • status.state = DONE indica que o job foi concluído.
    • Se a propriedade status.errorResult aparecer, isso indica que houve falha na solicitação, e o objeto incluirá informações que descrevem o erro.
    • Se status.errorResult não aparecer, o job foi concluído com sucesso, mesmo se houver erros não fatais. Os erros não fatais são listados na propriedade status.errors do objeto do job retornado.

Observações sobre a API:

  • Como prática recomendada, gere um ID exclusivo e transmita-o como jobReference.jobId, ao chamar jobs.insert para criar um job. Essa abordagem é mais resistente a falhas de rede porque o cliente pode pesquisar ou tentar novamente com o ID do job conhecido.

  • Chamar jobs.insert em um determinado ID de job é idempotente, ou seja, é possível repetir o processo quantas vezes quiser com o mesmo ID e, no máximo, uma das operações será bem-sucedida.

C#

Antes de testar essa amostra, siga as instruções de configuração para 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# (em inglês).


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

public class BigQueryExtractTable
{
    public void ExtractTable(
        string projectId = "your-project-id",
        string bucketName = "your-bucket-name")
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        // Define a destination URI. Use a single wildcard URI if you think
        // your exported data will be larger than the 1 GB maximum value.
        string destinationUri = $"gs://{bucketName}/shakespeare-*.csv";
        BigQueryJob job = client.CreateExtractJob(
            projectId: "bigquery-public-data",
            datasetId: "samples",
            tableId: "shakespeare",
            destinationUri: destinationUri
        );
        job = job.PollUntilCompleted().ThrowOnAnyError();  // Waits for the job to complete.
        Console.Write($"Exported table to {destinationUri}.");
    }
}

Go

Antes de testar essa amostra, siga as instruções de configuração para 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 (em inglês).

import (
	"context"
	"fmt"

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

// exportTableAsCompressedCSV demonstrates using an export job to
// write the contents of a table into Cloud Storage as CSV.
func exportTableAsCSV(projectID, gcsURI string) error {
	// projectID := "my-project-id"
	// gcsUri := "gs://mybucket/shakespeare.csv"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	srcProject := "bigquery-public-data"
	srcDataset := "samples"
	srcTable := "shakespeare"

	gcsRef := bigquery.NewGCSReference(gcsURI)
	gcsRef.FieldDelimiter = ","

	extractor := client.DatasetInProject(srcProject, srcDataset).Table(srcTable).ExtractorTo(gcsRef)
	extractor.DisableHeader = true
	// You can choose to run the job in a specific location for more complex data locality scenarios.
	// Ex: In this example, source dataset and GCS bucket are in the US.
	extractor.Location = "US"

	job, err := extractor.Run(ctx)
	if err != nil {
		return err
	}
	status, err := job.Wait(ctx)
	if err != nil {
		return err
	}
	if err := status.Err(); err != nil {
		return err
	}
	return nil
}

Java

Antes de testar essa amostra, siga as instruções de configuração para 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.

Ver no GitHub (em inglês) Feedback
import com.google.cloud.RetryOption;
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.Table;
import com.google.cloud.bigquery.TableId;
import org.threeten.bp.Duration;

public class ExtractTableToCsv {

  public static void runExtractTableToCsv() {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "bigquery-public-data";
    String datasetName = "samples";
    String tableName = "shakespeare";
    String bucketName = "my-bucket";
    String destinationUri = "gs://" + bucketName + "/path/to/file";
    // For more information on export formats available see:
    // https://cloud.google.com/bigquery/docs/exporting-data#export_formats_and_compression_types
    // For more information on Job see:
    // https://googleapis.dev/java/google-cloud-clients/latest/index.html?com/google/cloud/bigquery/package-summary.html

    String dataFormat = "CSV";
    extractTableToCsv(projectId, datasetName, tableName, destinationUri, dataFormat);
  }

  // Exports datasetName:tableName to destinationUri as raw CSV
  public static void extractTableToCsv(
      String projectId,
      String datasetName,
      String tableName,
      String destinationUri,
      String dataFormat) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      TableId tableId = TableId.of(projectId, datasetName, tableName);
      Table table = bigquery.getTable(tableId);

      Job job = table.extract(dataFormat, destinationUri);

      // Blocks until this job completes its execution, either failing or succeeding.
      Job completedJob =
          job.waitFor(
              RetryOption.initialRetryDelay(Duration.ofSeconds(1)),
              RetryOption.totalTimeout(Duration.ofMinutes(3)));
      if (completedJob == null) {
        System.out.println("Job not executed since it no longer exists.");
        return;
      } else if (completedJob.getStatus().getError() != null) {
        System.out.println(
            "BigQuery was unable to extract due to an error: \n" + job.getStatus().getError());
        return;
      }
      System.out.println(
          "Table export successful. Check in GCS bucket for the " + dataFormat + " file.");
    } catch (BigQueryException | InterruptedException e) {
      System.out.println("Table extraction job was interrupted. \n" + e.toString());
    }
  }
}

Node.js

Antes de testar essa amostra, siga as instruções de configuração para 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 (em inglês).

Ver no GitHub (em inglês) Feedback
// Import the Google Cloud client libraries
const {BigQuery} = require('@google-cloud/bigquery');
const {Storage} = require('@google-cloud/storage');

const bigquery = new BigQuery();
const storage = new Storage();

async function extractTableToGCS() {
  // Exports my_dataset:my_table to gcs://my-bucket/my-file as raw CSV.

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const datasetId = "my_dataset";
  // const tableId = "my_table";
  // const bucketName = "my-bucket";
  // const filename = "file.csv";

  // Location must match that of the source table.
  const options = {
    location: 'US',
  };

  // Export data from the table into a Google Cloud Storage file
  const [job] = await bigquery
    .dataset(datasetId)
    .table(tableId)
    .extract(storage.bucket(bucketName).file(filename), options);

  console.log(`Job ${job.id} created.`);

  // Check the job's status for errors
  const errors = job.status.errors;
  if (errors && errors.length > 0) {
    throw errors;
  }
}

PHP

Antes de testar esta amostra, siga as instruções de configuração para 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 (em inglês).

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';
// $bucketName = 'The Cloud Storage bucket Name';

$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$dataset = $bigQuery->dataset($datasetId);
$table = $dataset->table($tableId);
$destinationUri = "gs://{$bucketName}/{$tableId}.json";
// Define the format to use. If the format is not specified, 'CSV' will be used.
$format = 'NEWLINE_DELIMITED_JSON';
// Create the extract job
$extractConfig = $table->extract($destinationUri)->destinationFormat($format);
// Run the job
$job = $table->runJob($extractConfig);  // Waits for the job to complete
printf('Exported %s to %s' . PHP_EOL, $table->id(), $destinationUri);

Python

Antes de testar essa amostra, siga as instruções de configuração para 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.

Ver no GitHub (em inglês) Feedback
# from google.cloud import bigquery
# client = bigquery.Client()
# bucket_name = 'my-bucket'
project = "bigquery-public-data"
dataset_id = "samples"
table_id = "shakespeare"

destination_uri = "gs://{}/{}".format(bucket_name, "shakespeare.csv")
dataset_ref = bigquery.DatasetReference(project, dataset_id)
table_ref = dataset_ref.table(table_id)

extract_job = client.extract_table(
    table_ref,
    destination_uri,
    # Location must match that of the source table.
    location="US",
)  # API request
extract_job.result()  # Waits for job to complete.

print(
    "Exported {}:{}.{} to {}".format(project, dataset_id, table_id, destination_uri)
)

Ruby

Antes de testar esta amostra, siga as instruções de configuração para 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 (em inglês).

require "google/cloud/bigquery"

def extract_table bucket_name = "my-bucket",
                  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

  # Define a destination URI. Use a single wildcard URI if you think
  # your exported data will be larger than the 1 GB maximum value.
  destination_uri = "gs://#{bucket_name}/output-*.csv"

  extract_job = table.extract_job destination_uri do |config|
    # Location must match that of the source table.
    config.location = "US"
  end
  extract_job.wait_until_done! # Waits for the job to complete

  puts "Exported #{table.id} to #{destination_uri}"
end

Detalhes da exportação do Avro

No BigQuery, os dados formatados em Avro são expressos das seguintes maneiras:

  • Os arquivos de exportação resultantes são de contêiner Avro.
  • Cada linha do BigQuery é representada como um registro Avro. Os dados aninhados são representados por objetos de registro aninhados.
  • Os campos REQUIRED são representados como tipos Avro correspondentes. Por exemplo, um tipo INTEGER do BigQuery é mapeado para um tipo Avro LONG.
  • Os campos NULLABLE são representados como uma união Avro do tipo correspondente e "nulo".
  • Os campos REPEATED são representados como matrizes Avro.
  • Os tipos de dados TIMESTAMP são representados como tipos lógicos Avro timestamp-micros.
  • Os tipos de dados DATE são representados como tipos Avro INT por padrão, ou tipos lógicos Avro date se a sinalização --use_avro_logical_types for especificada.
  • Os tipos de dados TIME são representados como tipos Avro LONG por padrão, ou tipos lógicos Avro time-micros se a sinalização --use_avro_logical_types for especificada.
  • Os tipos de dados DATETIME são representados como tipos Avro STRING. A codificação segue as especificações RFC 3339 do Internet Engineering Task Force.

O formato Avro não pode ser usado com a compactação GZIP. Para compactar dados Avro, use a ferramenta de linha de comando bqou a API e especifique um dos tipos de compactação compatíveis com os dados Avro: DEFLATE ou SNAPPY.

Exportar dados para um ou mais arquivos

A propriedade destinationUris indica um ou mais locais e nomes de arquivos em que o BigQuery deve exportar seus arquivos.

O BigQuery aceita um único operador de caractere curinga (*) para cada URI. Esse caractere pode ser usado em qualquer posição do URI, exceto como parte do nome do intervalo. O uso do operador de caractere curinga faz com que o BigQuery crie vários arquivos fragmentados com base no padrão fornecido. Ele é substituído por um número de 12 dígitos preenchido à esquerda, começando por 0. Por exemplo, um URI com um caractere curinga no fim do nome do arquivo gera arquivos com 000000000000 anexado ao primeiro arquivo, 000000000001 anexado ao segundo e assim por diante.

A tabela abaixo descreve várias opções possíveis para a propriedade destinationUris:

opções para "destinationUris"
URI único

Use um único URI se você estiver exportando dados de tabela com 1 GB ou menos. Essa opção é o caso de uso mais comum, porque os dados exportados geralmente são menores que o valor máximo de 1 GB.

Definição da propriedade:

['gs://my-bucket/file-name.json']

Gera:


gs://my-bucket/file-name.json
URI com um único caractere curinga

Use um URI com um único caractere coringa para exportar dados maiores do que o valor máximo de 1 GB. Os dados são fragmentados pelo BigQuery entre vários arquivos com base no padrão fornecido. O tamanho dos arquivos exportados varia.

Se você usar um curinga em um componente do URI diferente do nome do arquivo, verifique se o componente do caminho não existe antes de exportar os dados.

Definição da propriedade:

['gs://my-bucket/file-name-*.json']

Gera:


gs://my-bucket/file-name-000000000000.json
gs://my-bucket/file-name-000000000001.json
gs://my-bucket/file-name-000000000002.json
...
Vários URIs com caracteres curinga

Para particionar a saída da exportação, use vários URIs com caracteres curinga. Essa opção pode ser útil se você estiver executando um job de processamento paralelo com um serviço como Dataproc . Determine quantos workers estarão disponíveis para processar o job e crie um URI para cada um. Cada local do URI no BigQuery é tratado como partição e um processamento paralelo é usado para fragmentar os dados entre vários arquivos para cada local. Use o padrão que quiser no nome do arquivo, desde que haja um único operador curinga em cada URI, que cada URI seja exclusivo e que a quantidade de URIs não exceda a política de cotas.

Quando você transmite mais de um URI com caractere curinga, o BigQuery cria um arquivo especial no final de cada partição que indica o arquivo final no conjunto. O nome desse arquivo indica o número de fragmentos criados pelo BigQuery.

Por exemplo, se o URI com caractere curinga for gs://my-bucket/file- name-<worker number>-*.json e o BigQuery criar 80 arquivos fragmentados, o nome do arquivo de registro zero será gs://my-bucket/file-name-<worker number>-000000000080.json. Com esse nome de arquivo, você determina que foram criados 80 arquivos fragmentados no BigQuery (com nome 000000000000-000000000079).

Um arquivo de registro zero pode conter mais de 0 byte dependendo do formato de dados. Isso ocorre, por exemplo, quando dados no formato CSV são exportados com um cabeçalho de coluna.

Padrão de string:

gs://my-bucket/file-name-<worker number>-*.json

Definição da propriedade:


['gs://my-bucket/file-name-1-*.json',
'gs://my-bucket/file-name-2-*.json',
'gs://my-bucket/file-name-3-*.json']

Gera:

Neste exemplo, presume-se que foram criados 80 arquivos fragmentados no BigQuery para cada partição.


gs://my-bucket/file-name-1-000000000000.json
gs://my-bucket/file-name-1-000000000001.json
...
gs://my-bucket/file-name-1-000000000080.json
gs://my-bucket/file-name-2-000000000000.json
gs://my-bucket/file-name-2-000000000001.json
...
gs://my-bucket/file-name-2-000000000080.json
gs://my-bucket/file-name-3-000000000000.json
gs://my-bucket/file-name-3-000000000001.json
...
gs://my-bucket/file-name-3-000000000080.json

Extrair tabela compactada

Go

Antes de testar essa amostra, siga as instruções de configuração para 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 Go.

import (
	"context"
	"fmt"

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

// exportTableAsCompressedCSV demonstrates using an export job to
// write the contents of a table into Cloud Storage as compressed CSV.
func exportTableAsCompressedCSV(projectID, gcsURI string) error {
	// projectID := "my-project-id"
	// gcsUri := "gs://mybucket/shakespeare.csv"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	srcProject := "bigquery-public-data"
	srcDataset := "samples"
	srcTable := "shakespeare"

	gcsRef := bigquery.NewGCSReference(gcsURI)
	gcsRef.Compression = bigquery.Gzip

	extractor := client.DatasetInProject(srcProject, srcDataset).Table(srcTable).ExtractorTo(gcsRef)
	extractor.DisableHeader = true
	// You can choose to run the job in a specific location for more complex data locality scenarios.
	// Ex: In this example, source dataset and GCS bucket are in the US.
	extractor.Location = "US"

	job, err := extractor.Run(ctx)
	if err != nil {
		return err
	}
	status, err := job.Wait(ctx)
	if err != nil {
		return err
	}
	if err := status.Err(); err != nil {
		return err
	}
	return nil
}

Java

Antes de testar essa amostra, siga as instruções de configuração para 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.

Ver no GitHub (em inglês) Feedback
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.ExtractJobConfiguration;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobInfo;
import com.google.cloud.bigquery.TableId;

// Sample to extract a compressed table
public class ExtractTableCompressed {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String projectName = "MY_PROJECT_NAME";
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    String bucketName = "MY-BUCKET-NAME";
    String destinationUri = "gs://" + bucketName + "/path/to/file";
    // For more information on export formats available see:
    // https://cloud.google.com/bigquery/docs/exporting-data#export_formats_and_compression_types
    String compressed = "gzip";
    // For more information on Job see:
    // https://googleapis.dev/java/google-cloud-clients/latest/index.html?com/google/cloud/bigquery/package-summary.html
    String dataFormat = "CSV";

    extractTableCompressed(
        projectName, datasetName, tableName, destinationUri, dataFormat, compressed);
  }

  public static void extractTableCompressed(
      String projectName,
      String datasetName,
      String tableName,
      String destinationUri,
      String dataFormat,
      String compressed) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      TableId tableId = TableId.of(projectName, datasetName, tableName);

      ExtractJobConfiguration extractConfig =
          ExtractJobConfiguration.newBuilder(tableId, destinationUri)
              .setCompression(compressed)
              .setFormat(dataFormat)
              .build();

      Job job = bigquery.create(JobInfo.of(extractConfig));

      // Blocks until this job completes its execution, either failing or succeeding.
      Job completedJob = job.waitFor();
      if (completedJob == null) {
        System.out.println("Job not executed since it no longer exists.");
        return;
      } else if (completedJob.getStatus().getError() != null) {
        System.out.println(
            "BigQuery was unable to extract due to an error: \n" + job.getStatus().getError());
        return;
      }
      System.out.println("Table extract compressed successful");
    } catch (BigQueryException | InterruptedException e) {
      System.out.println("Table extraction job was interrupted. \n" + e.toString());
    }
  }
}

Node.js

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

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

const bigquery = new BigQuery();
const storage = new Storage();

async function extractTableCompressed() {
  // Exports my_dataset:my_table to gcs://my-bucket/my-file as a compressed file.

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const datasetId = "my_dataset";
  // const tableId = "my_table";
  // const bucketName = "my-bucket";
  // const filename = "file.csv";

  // Location must match that of the source table.
  const options = {
    location: 'US',
    gzip: true,
  };

  // Export data from the table into a Google Cloud Storage file
  const [job] = await bigquery
    .dataset(datasetId)
    .table(tableId)
    .extract(storage.bucket(bucketName).file(filename), options);

  console.log(`Job ${job.id} created.`);

  // Check the job's status for errors
  const errors = job.status.errors;
  if (errors && errors.length > 0) {
    throw errors;
  }
}

Python

Antes de testar essa amostra, siga as instruções de configuração para 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.

Ver no GitHub (em inglês) Feedback
# from google.cloud import bigquery
# client = bigquery.Client()
# bucket_name = 'my-bucket'

destination_uri = "gs://{}/{}".format(bucket_name, "shakespeare.csv.gz")
dataset_ref = bigquery.DatasetReference(project, dataset_id)
table_ref = dataset_ref.table("shakespeare")
job_config = bigquery.job.ExtractJobConfig()
job_config.compression = bigquery.Compression.GZIP

extract_job = client.extract_table(
    table_ref,
    destination_uri,
    # Location must match that of the source table.
    location="US",
    job_config=job_config,
)  # API request
extract_job.result()  # Waits for job to complete.

Política de cotas

Para mais informações sobre cotas de jobs de exportação, consulte Exportar jobs na página "Cotas e limites".

Preços

No momento, não há cobrança pela exportação de dados do BigQuery, mas as exportações estão sujeitas às Cotas e limites do BigQuery. Para mais informações sobre preços do BigQuery, consulte a página de Preços.

Depois que os dados forem exportados, você será cobrado pelo armazenamento deles no Cloud Storage. Para mais informações sobre preços do Cloud Storage, consulte a página de Preços do Cloud Storage.

A seguir