Carregar dados CSV a partir do Cloud Storage

Quando carrega dados CSV do Cloud Storage, pode carregá-los para uma nova tabela ou partição, ou pode anexá-los ou substituir uma tabela ou uma partição existente. Quando os dados são carregados para o BigQuery, são convertidos para o formato de colunas para o Capacitor (o formato de armazenamento do BigQuery).

Quando carrega dados do Cloud Storage para uma tabela do BigQuery, o conjunto de dados que contém a tabela tem de estar na mesma localização regional ou multirregional que o contentor do Cloud Storage.

Para obter informações sobre o carregamento de dados CSV a partir de um ficheiro local, consulte o artigo Carregar dados para o BigQuery a partir de uma origem de dados local.

Limitações

Está sujeito às seguintes limitações quando carrega dados para o BigQuery a partir de um contentor do Cloud Storage:

  • O BigQuery não garante a consistência dos dados para origens de dados externas. As alterações aos dados subjacentes durante a execução de uma consulta podem resultar num comportamento inesperado.
  • O BigQuery não suporta o controlo de versões de objetos do Cloud Storage. Se incluir um número de geração no URI do Cloud Storage, a tarefa de carregamento falha.

Quando carregar ficheiros CSV para o BigQuery, tenha em atenção o seguinte:

  • Os ficheiros CSV não suportam dados aninhados nem repetidos.
  • Remova os carateres de marca de ordem de bytes (BOM). Podem causar problemas inesperados.
  • Se usar a compressão gzip, o BigQuery não pode ler os dados em paralelo. O carregamento de dados CSV comprimidos no BigQuery é mais lento do que o carregamento de dados não comprimidos. Consulte o artigo Carregar dados comprimidos e não comprimidos.
  • Não pode incluir ficheiros comprimidos e não comprimidos no mesmo trabalho de carregamento.
  • O tamanho máximo de um ficheiro gzip é de 4 GB.
  • O carregamento de dados CSV através da deteção automática de esquemas não deteta automaticamente os cabeçalhos se todas as colunas forem do tipo string. Neste caso, adicione uma coluna numérica à entrada ou declare o esquema explicitamente.
  • Quando carrega dados CSV ou JSON, os valores nas colunas DATE têm de usar o separador de travessão (-) e a data tem de estar no seguinte formato: YYYY-MM-DD (ano-mês-dia).
  • Quando carrega dados JSON ou CSV, os valores nas colunas TIMESTAMP têm de usar um traço (-) ou uma barra (/) como separador para a parte da data da data/hora, e a data tem de estar num dos seguintes formatos: YYYY-MM-DD (ano-mês-dia) ou YYYY/MM/DD (ano/mês/dia). A parte hh:mm:ss (hora-minuto-segundo) da data/hora tem de usar um separador de dois pontos (:).
  • Os ficheiros têm de cumprir os limites de tamanho dos ficheiros CSV descritos nos limites das tarefas de carregamento.

Antes de começar

Conceda funções de gestão de identidade e de acesso (IAM) que dão aos utilizadores as autorizações necessárias para realizar cada tarefa neste documento e crie um conjunto de dados para armazenar os seus dados.

Autorizações necessárias

Para carregar dados para o BigQuery, precisa de autorizações da IAM para executar uma tarefa de carregamento e carregar dados para tabelas e partições do BigQuery. Se estiver a carregar dados do Cloud Storage, também precisa de autorizações de IAM para aceder ao contentor que contém os seus dados.

Autorizações para carregar dados para o BigQuery

Para carregar dados para uma nova tabela ou partição do BigQuery, ou para anexar ou substituir uma tabela ou uma partição existente, precisa das seguintes autorizações de IAM:

  • bigquery.tables.create
  • bigquery.tables.updateData
  • bigquery.tables.update
  • bigquery.jobs.create

Cada uma das seguintes funções de IAM predefinidas inclui as autorizações de que precisa para carregar dados para uma tabela ou uma partição do BigQuery:

  • roles/bigquery.dataEditor
  • roles/bigquery.dataOwner
  • roles/bigquery.admin (inclui a autorização bigquery.jobs.create)
  • bigquery.user (inclui a autorização bigquery.jobs.create)
  • bigquery.jobUser (inclui a autorização bigquery.jobs.create)

Além disso, se tiver a autorização bigquery.datasets.create, pode criar e atualizar tabelas através de uma tarefa de carregamento nos conjuntos de dados que criar.

Para mais informações sobre as funções e as autorizações do IAM no BigQuery, consulte o artigo Funções e autorizações predefinidas.

Autorizações para carregar dados do Cloud Storage

Para receber as autorizações de que precisa para carregar dados de um contentor do Cloud Storage, peça ao seu administrador para lhe conceder a função de IAM Administrador de armazenamento (roles/storage.admin) no contentor. Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Esta função predefinida contém as autorizações necessárias para carregar dados a partir de um contentor do Cloud Storage. Para ver as autorizações exatas que são necessárias, expanda a secção Autorizações necessárias:

Autorizações necessárias

São necessárias as seguintes autorizações para carregar dados de um contentor do Cloud Storage:

  • storage.buckets.get
  • storage.objects.get
  • storage.objects.list (required if you are using a URI wildcard)

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

Crie um conjunto de dados

Crie um conjunto de dados do BigQuery para armazenar os seus dados.

Compressão de CSV

Pode usar o utilitário gzip para comprimir ficheiros CSV. Tenha em atenção que o gzip realiza a compressão completa de ficheiros, ao contrário da compressão de conteúdo de ficheiros realizada por codecs de compressão para outros formatos de ficheiros, como o Avro. A utilização do gzip para comprimir os ficheiros CSV pode ter um impacto no desempenho. Para mais informações sobre as concessões, consulte o artigo Carregar dados comprimidos e não comprimidos.

Carregar dados CSV para uma tabela

Para carregar dados CSV do Cloud Storage para uma nova tabela do BigQuery, selecione uma das seguintes opções:

Consola

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

    Aceda ao BigQuery

  2. No painel Explorador, expanda o seu projeto e, de seguida, selecione um conjunto de dados.
  3. Na secção Informações do conjunto de dados, clique em Criar tabela.
  4. No painel Criar tabela, especifique os seguintes detalhes:
    1. Na secção Origem, selecione Google Cloud Storage na lista Criar tabela a partir de. Em seguida, faça o seguinte:
      1. Selecione um ficheiro do contentor do Cloud Storage ou introduza o URI do Cloud Storage. Não pode incluir vários URIs na Trusted Cloud consola, mas os carateres universais são suportados. O contentor do Cloud Storage tem de estar na mesma localização que o conjunto de dados que contém a tabela que quer criar, acrescentar ou substituir. selecione o ficheiro de origem para criar uma tabela do BigQuery
      2. Em Formato de ficheiro, selecione CSV.
    2. Na secção Destino, especifique os seguintes detalhes:
      1. Para Conjunto de dados, selecione o conjunto de dados no qual quer criar a tabela.
      2. No campo Tabela, introduza o nome da tabela que quer criar.
      3. Verifique se o campo Tipo de tabela está definido como Tabela nativa.
    3. Na secção Esquema, introduza a definição do esquema. Para ativar a deteção automática de um esquema, selecione Deteção automática. Pode introduzir manualmente informações do esquema através de um dos seguintes métodos:
      • Opção 1: clique em Editar como texto e cole o esquema sob a forma de uma matriz JSON. Quando usa uma matriz JSON, gera o esquema através do mesmo processo que criar um ficheiro de esquema JSON. Pode ver o esquema de uma tabela existente no formato JSON introduzindo o seguinte comando:
            bq show --format=prettyjson dataset.table
            
      • Opção 2: clique em Adicionar campo e introduza o esquema da tabela. Especifique o Nome, Tipo e Modo de cada campo.
    4. Opcional: especifique as definições de partição e cluster. Para mais informações, consulte os artigos Criar tabelas particionadas e Criar e usar tabelas agrupadas.
    5. Clique em Opções avançadas e faça o seguinte:
      • Para Preferência de escrita, deixe a opção Escrever se estiver vazio selecionada. Esta opção cria uma nova tabela e carrega os seus dados na mesma.
      • Para Número de erros permitidos, aceite o valor predefinido de 0 ou introduza o número máximo de linhas com erros que podem ser ignorados. Se o número de linhas com erros exceder este valor, a tarefa vai gerar uma mensagem invalid e falhar. Esta opção aplica-se apenas a ficheiros CSV e JSON.
      • Em Fuso horário, introduza o fuso horário predefinido que vai ser aplicado quando analisar valores de data/hora que não tenham um fuso horário específico. Consulte aqui mais nomes de fusos horários válidos. Se este valor não estiver presente, os valores de data/hora sem um fuso horário específico são analisados através do fuso horário predefinido UTC. (Pré-visualizar).
      • Para Formato de data, introduza os elementos de formato que definem como os valores DATE são formatados nos ficheiros de entrada. Este campo espera o formato de estilos SQL (por exemplo, MM/DD/YYYY). Se este valor estiver presente, este formato é o único formato DATE compatível. A deteção automática de esquemas também decide o tipo de coluna DATE com base neste formato, em vez do formato existente. Se este valor não estiver presente, o campo DATE é analisado com os formatos predefinidos. (Pré-visualizar).
      • Para Formato de data/hora, introduza os elementos de formato que definem como os valores DATETIME são formatados nos ficheiros de entrada. Este campo espera o formato de estilos SQL (por exemplo, MM/DD/YYYY HH24:MI:SS.FF3). Se este valor estiver presente, este formato é o único formato DATETIME compatível. A deteção automática do esquema também decide o tipo de coluna DATETIME com base neste formato, em vez do formato existente. Se este valor não estiver presente, o campo DATETIME é analisado com os formatos predefinidos. (Pré-visualizar).
      • Para Formato de hora, introduza os elementos de formato que definem como os valores de TIME são formatados nos ficheiros de entrada. Este campo espera o formato de estilos SQL (por exemplo, HH24:MI:SS.FF3). Se este valor estiver presente, este formato é o único formato de TIME compatível. A deteção automática do esquema também decide o tipo de coluna TIME com base neste formato, em vez do formato existente. Se este valor não estiver presente, o campo TIME é analisado com os formatos predefinidos. (Pré-visualizar).
      • Para o Formato de data/hora, introduza os elementos de formato que definem como os valores de data/hora são formatados nos ficheiros de entrada. Este campo espera o formato de estilos SQL (por exemplo, MM/DD/YYYY HH24:MI:SS.FF3). Se este valor estiver presente, este formato é o único formato TIMESTAMP compatível. A deteção automática do esquema também decide o tipo de coluna TIMESTAMP com base neste formato, em vez do formato existente. Se este valor não estiver presente, o campo TIMESTAMP é analisado com os formatos predefinidos. (Pré-visualizar).
      • Se quiser ignorar valores numa linha que não estejam presentes no esquema da tabela, selecione Valores desconhecidos.
      • Para Delimitador de campo, escolha o caráter que separa as células no seu ficheiro CSV: Vírgula, Tabulação, Barra vertical ou Personalizado. Se escolher Personalizado, introduza o delimitador na caixa Delimitador de campo personalizado. O valor predefinido é Comma.
      • Para Correspondência de colunas de origem, escolha uma das seguintes estratégias usadas para fazer corresponder as colunas carregadas ao esquema (Pré-visualização).
        • Default: o comportamento predefinido é escolhido com base na forma como o esquema é fornecido. Se a deteção automática estiver ativada, o comportamento predefinido é fazer a correspondência das colunas por nome. Caso contrário, a predefinição é fazer a correspondência das colunas por posição. Isto é feito para manter o comportamento retrocompatível.
        • Position: faz corresponder as colunas por posição, partindo do princípio de que as colunas estão ordenadas da mesma forma que o esquema.
        • Name: corresponde por nome lendo a linha de cabeçalho como os nomes das colunas e reordenando as colunas para corresponder aos nomes dos campos no esquema. Os nomes das colunas são lidos a partir da última linha ignorada com base em Linhas de cabeçalho a ignorar.
      • Para Linhas de cabeçalho a ignorar, introduza o número de linhas de cabeçalho a ignorar na parte superior do ficheiro CSV. O valor predefinido é 0.
      • Para Novas linhas entre aspas, selecione Permitir novas linhas entre aspas para permitir secções de dados entre aspas que contenham carateres de nova linha num ficheiro CSV. O valor predefinido é false.
      • Para Linhas irregulares, selecione Permitir linhas irregulares para aceitar linhas em ficheiros CSV que não tenham colunas opcionais finais. Os valores em falta são tratados como nulos. Se esta opção não estiver selecionada, os registos com colunas finais em falta são tratados como registos inválidos e, se existirem demasiados registos inválidos, é devolvido um erro inválido no resultado da tarefa. O valor predefinido é false.
      • Para Marcadores nulos, introduza uma lista de strings personalizadas que representam um valor NULL nos dados CSV. (Pré-visualizar).
      • Para Encriptação, clique em Chave gerida pelo cliente para usar uma chave do Cloud Key Management Service. Se deixar a definição Google Cloud-powered key, o BigQuery encripta os dados em repouso.
    6. Clique em Criar tabela.

SQL

Use a LOAD DATA declaração DDL. O exemplo seguinte carrega um ficheiro CSV na nova tabela mytable:

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

    Aceda ao BigQuery

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

    LOAD DATA OVERWRITE mydataset.mytable
    (x INT64,y STRING)
    FROM FILES (
      format = 'CSV',
      uris = ['gs://bucket/path/file.csv']);

  3. Clique em Executar.

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

bq

Use o comando bq load, especifique CSV usando a flag --source_format e inclua um URI do Cloud Storage. Pode incluir um único URI, uma lista de URIs separados por vírgulas ou um URI que contenha um caractere universal. Forneça o esquema inline, num ficheiro de definição do esquema ou use a deteção automática de esquemas. Se não especificar um esquema e --autodetect for false, e a tabela de destino existir, é usado o esquema da tabela de destino.

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

Outras flags opcionais incluem:

  • --allow_jagged_rows: quando especificado, aceita linhas em ficheiros CSV que não tenham colunas opcionais finais. Os valores em falta são tratados como nulos. Se a caixa não estiver selecionada, os registos com colunas finais em falta são tratados como registos inválidos e, se existirem demasiados registos inválidos, é devolvido um erro inválido no resultado da tarefa. O valor predefinido é false.
  • --allow_quoted_newlines: quando especificado, permite secções de dados entre aspas que contenham carateres de nova linha num ficheiro CSV. O valor predefinido é false.
  • --field_delimiter: o caráter que indica o limite entre as colunas nos dados. São permitidos \t e tab para delimitadores de tabulações. O valor predefinido é ,.
  • --null_marker: uma string personalizada opcional que representa um valor NULL nos dados CSV.
  • --null_markers: (Pré-visualização) Uma lista opcional de strings personalizadas separadas por vírgulas que representam valores NULL nos dados CSV. Não é possível usar esta opção com a flag --null_marker.
  • --source_column_match: (Pré-visualização) Especifica a estratégia usada para fazer corresponder as colunas carregadas ao esquema. Pode especificar POSITION para fazer corresponder as colunas carregadas por posição, partindo do princípio de que as colunas estão ordenadas da mesma forma que o esquema. Também pode especificar NAME para fazer a correspondência por nome lendo a linha de cabeçalho como os nomes das colunas e reordenando as colunas para corresponder aos nomes dos campos no esquema. Se este valor não for especificado, o valor predefinido baseia-se na forma como o esquema é fornecido. Se a política --autodetect estiver ativada, o comportamento predefinido é fazer a correspondência das colunas por nome. Caso contrário, a predefinição é fazer a correspondência das colunas por posição.
  • --skip_leading_rows: Especifica o número de linhas de cabeçalho a ignorar na parte superior do ficheiro CSV. O valor predefinido é 0.
  • --quote: o caráter de aspas a usar para incluir registos. O valor predefinido é ". Para indicar que não existe um caráter de aspas, use uma string vazia.
  • --max_bad_records: um número inteiro que especifica o número máximo de registos inválidos permitidos antes de toda a tarefa falhar. O valor predefinido é 0. São devolvidos, no máximo, cinco erros de qualquer tipo, independentemente do valor de --max_bad_records.
  • --ignore_unknown_values: quando especificado, permite e ignora valores adicionais não reconhecidos em dados CSV ou JSON.
  • --time_zone: (Pré-visualização) Um fuso horário predefinido opcional que é aplicado ao analisar valores de data/hora que não têm um fuso horário específico nos dados CSV ou JSON.
  • --date_format: (Pré-visualização) Uma string personalizada opcional que define como os valores DATE são formatados nos dados CSV ou JSON.
  • --datetime_format: (Pré-visualização) Uma string personalizada opcional que define como os valores DATETIME são formatados em dados CSV ou JSON.
  • --time_format: (Pré-visualização) Uma string personalizada opcional que define como os valores TIME são formatados nos dados CSV ou JSON.
  • --timestamp_format: (Pré-visualização) Uma string personalizada opcional que define como os valores de TIMESTAMP são formatados nos dados CSV ou JSON.
  • --autodetect: Quando especificado, ativa a deteção automática de esquemas para dados CSV e JSON.
  • --time_partitioning_type: ativa a partição baseada no tempo numa tabela e define o tipo de partição. Os valores possíveis são HOUR, DAY, MONTH e YEAR. Esta flag é opcional quando cria uma tabela particionada numa coluna DATE, DATETIME ou TIMESTAMP. O tipo de partição predefinido para a partição baseada no tempo é DAY. Não pode alterar a especificação de partição numa tabela existente.
  • --time_partitioning_expiration: um número inteiro que especifica (em segundos) quando uma partição baseada no tempo deve ser eliminada. O tempo de expiração é avaliado como a data UTC da partição mais o valor inteiro.
  • --time_partitioning_field: a coluna DATE ou TIMESTAMP usada para criar uma tabela particionada. Se a partição baseada no tempo estiver ativada sem este valor, é criada uma tabela particionada por tempo de ingestão.
  • --require_partition_filter: quando ativada, esta opção exige que os utilizadores incluam uma cláusula WHERE que especifique as partições a consultar. Exigir um filtro de partição pode reduzir o custo e melhorar o desempenho. Para mais informações, consulte o artigo Consultar tabelas particionadas.
  • --clustering_fields: uma lista separada por vírgulas de até quatro nomes de colunas usados para criar uma tabela agrupada.
  • --destination_kms_key: a chave do Cloud KMS para a encriptação dos dados da tabela.
  • --column_name_character_map: define o âmbito e o processamento de carateres nos nomes das colunas, com a opção de ativar nomes de colunas flexíveis. Requer a opção --autodetect para ficheiros CSV. Para mais informações, consulte load_option_list.

    Para mais informações sobre o comando bq load, consulte:

    Para mais informações sobre tabelas particionadas, consulte:

    Para mais informações sobre tabelas agrupadas, consulte:

    Para mais informações sobre a encriptação de tabelas, consulte:

Para carregar dados CSV para o BigQuery, introduza o seguinte comando:

bq --location=location load \
--source_format=format \
dataset.table \
path_to_source \
schema

Onde:

  • location é a sua localização. A flag --location é opcional. Por exemplo, se estiver a usar o BigQuery na região de Tóquio, pode definir o valor da flag como asia-northeast1. Pode definir um valor predefinido para a localização através do ficheiro.bigqueryrc.
  • format é CSV.
  • dataset é um conjunto de dados existente.
  • table é o nome da tabela para a qual está a carregar dados.
  • path_to_source é um URI do Cloud Storage totalmente qualificado ou uma lista de URIs separados por vírgulas. Os carateres universais também são suportados.
  • schema é um esquema válido. O esquema pode ser um ficheiro JSON local ou pode ser introduzido inline como parte do comando. Também pode usar a flag --autodetect em vez de fornecer uma definição de esquema.

Exemplos:

O comando seguinte carrega dados de gs://mybucket/mydata.csv para uma tabela denominada mytable em mydataset. O esquema está definido num ficheiro de esquema local denominado myschema.json.

    bq load \
    --source_format=CSV \
    mydataset.mytable \
    gs://mybucket/mydata.csv \
    ./myschema.json

O comando seguinte carrega dados de gs://mybucket/mydata.csv para uma tabela denominada mytable em mydataset. O esquema está definido num ficheiro de esquema local denominado myschema.json. O ficheiro CSV inclui duas linhas de cabeçalho. Se --skip_leading_rows não estiver especificado, o comportamento predefinido é assumir que o ficheiro não contém cabeçalhos.

    bq load \
    --source_format=CSV \
    --skip_leading_rows=2
    mydataset.mytable \
    gs://mybucket/mydata.csv \
    ./myschema.json

O comando seguinte carrega dados de gs://mybucket/mydata.csv para uma tabela particionada por tempo de ingestão denominada mytable em mydataset. O esquema está definido num ficheiro de esquema local denominado myschema.json.

    bq load \
    --source_format=CSV \
    --time_partitioning_type=DAY \
    mydataset.mytable \
    gs://mybucket/mydata.csv \
    ./myschema.json

O comando seguinte carrega dados de gs://mybucket/mydata.csv para uma nova tabela particionada denominada mytable em mydataset. A tabela está particionada na coluna mytimestamp. O esquema está definido num ficheiro de esquema local com o nome myschema.json.

    bq load \
    --source_format=CSV \
    --time_partitioning_field mytimestamp \
    mydataset.mytable \
    gs://mybucket/mydata.csv \
    ./myschema.json

O comando seguinte carrega dados de gs://mybucket/mydata.csv para uma tabela denominada mytable em mydataset. O esquema é detetado automaticamente.

    bq load \
    --autodetect \
    --source_format=CSV \
    mydataset.mytable \
    gs://mybucket/mydata.csv

O comando seguinte carrega dados de gs://mybucket/mydata.csv para uma tabela denominada mytable em mydataset. O esquema é definido inline no formato field:data_type,field:data_type.

    bq load \
    --source_format=CSV \
    mydataset.mytable \
    gs://mybucket/mydata.csv \
    qtr:STRING,sales:FLOAT,year:STRING

O comando seguinte carrega dados de vários ficheiros em gs://mybucket/ para uma tabela denominada mytable em mydataset. O URI do Cloud Storage usa um caráter universal. O esquema é detetado automaticamente.

    bq load \
    --autodetect \
    --source_format=CSV \
    mydataset.mytable \
    gs://mybucket/mydata*.csv

O comando seguinte carrega dados de vários ficheiros em gs://mybucket/ para uma tabela denominada mytable em mydataset. O comando inclui uma lista de URIs do Cloud Storage separados por vírgulas com carateres universais. O esquema está definido num ficheiro de esquema local denominado myschema.json.

    bq load \
    --source_format=CSV \
    mydataset.mytable \
    "gs://mybucket/00/*.csv","gs://mybucket/01/*.csv" \
    ./myschema.json

API

  1. Crie uma tarefa load que aponte para os dados de origem no Cloud Storage.

  2. (Opcional) Especifique a sua localização na propriedade location na secção jobReference do recurso de emprego.

  3. A propriedade source URIs tem de ser totalmente qualificada, no formato gs://bucket/object. Cada URI pode conter um caráter universal "*".

  4. Especifique o formato de dados CSV definindo a propriedade sourceFormat como CSV.

  5. Para verificar o estado da tarefa, chame jobs.get(job_id*), onde job_id é o ID da tarefa devolvido pelo pedido inicial.

    • Se status.state = DONE, a tarefa foi concluída com êxito.
    • Se a propriedade status.errorResult estiver presente, o pedido falhou e esse objeto inclui informações que descrevem o que correu mal. Quando um pedido falha, não é criada nenhuma tabela nem são carregados dados.
    • Se status.errorResult estiver ausente, a tarefa foi concluída com êxito, embora possam ter ocorrido alguns erros não fatais, como problemas na importação de algumas linhas. Os erros não fatais são apresentados na propriedade status.errors do objeto de tarefa devolvido.

Notas da API:

  • Os trabalhos de carregamento são atómicos e consistentes. Se um trabalho de carregamento falhar, nenhum dos dados está disponível. Se um trabalho de carregamento for bem-sucedido, todos os dados estão disponíveis.

  • Como prática recomendada, gere um ID exclusivo e transmita-o como jobReference.jobId quando chamar jobs.insert para criar uma tarefa de carregamento. Esta abordagem é mais robusta em caso de falha de rede, uma vez que o cliente pode sondar ou tentar novamente com o ID da tarefa conhecido.

  • A chamada jobs.insert num determinado ID da tarefa é idempotente. Pode tentar novamente quantas vezes quiser com o mesmo ID da tarefa e, no máximo, uma dessas operações vai ter êxito.

C#

Antes de experimentar este exemplo, siga as C#instruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API C# BigQuery documentação de referência.

Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

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


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

public class BigQueryLoadTableGcsCsv
{
    public void LoadTableGcsCsv(
        string projectId = "your-project-id",
        string datasetId = "your_dataset_id"
    )
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        var gcsURI = "gs://cloud-samples-data/bigquery/us-states/us-states.csv";
        var dataset = client.GetDataset(datasetId);
        var schema = new TableSchemaBuilder {
            { "name", BigQueryDbType.String },
            { "post_abbr", BigQueryDbType.String }
        }.Build();
        var destinationTableRef = dataset.GetTableReference(
            tableId: "us_states");
        // Create job configuration
        var jobOptions = new CreateLoadJobOptions()
        {
            // The source format defaults to CSV; line below is optional.
            SourceFormat = FileFormat.Csv,
            SkipLeadingRows = 1
        };
        // Create and run job
        var loadJob = client.CreateLoadJob(
            sourceUri: gcsURI, destination: destinationTableRef,
            schema: schema, options: jobOptions);
        loadJob = loadJob.PollUntilCompleted().ThrowOnAnyError();  // Waits for the job to complete.

        // Display the number of rows uploaded
        BigQueryTable table = client.GetTable(destinationTableRef);
        Console.WriteLine(
            $"Loaded {table.Resource.NumRows} rows to {table.FullyQualifiedId}");
    }
}

Go

Antes de experimentar este exemplo, siga as Goinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Go BigQuery documentação de referência.

Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

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

import (
	"context"
	"fmt"

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

// importCSVExplicitSchema demonstrates loading CSV data from Cloud Storage into a BigQuery
// table and providing an explicit schema for the data.
func importCSVExplicitSchema(projectID, datasetID, tableID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// tableID := "mytable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	gcsRef := bigquery.NewGCSReference("gs://cloud-samples-data/bigquery/us-states/us-states.csv")
	gcsRef.SkipLeadingRows = 1
	gcsRef.Schema = bigquery.Schema{
		{Name: "name", Type: bigquery.StringFieldType},
		{Name: "post_abbr", Type: bigquery.StringFieldType},
	}
	loader := client.Dataset(datasetID).Table(tableID).LoaderFrom(gcsRef)
	loader.WriteDisposition = bigquery.WriteEmpty

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

	if status.Err() != nil {
		return fmt.Errorf("job completed with error: %v", status.Err())
	}
	return nil
}

Java

Antes de experimentar este exemplo, siga as Javainstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Java BigQuery documentação de referência.

Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

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

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.CsvOptions;
import com.google.cloud.bigquery.Field;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobInfo;
import com.google.cloud.bigquery.LoadJobConfiguration;
import com.google.cloud.bigquery.Schema;
import com.google.cloud.bigquery.StandardSQLTypeName;
import com.google.cloud.bigquery.TableId;

// Sample to load CSV data from Cloud Storage into a new BigQuery table
public class LoadCsvFromGcs {

  public static void runLoadCsvFromGcs() throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    String sourceUri = "gs://cloud-samples-data/bigquery/us-states/us-states.csv";
    Schema schema =
        Schema.of(
            Field.of("name", StandardSQLTypeName.STRING),
            Field.of("post_abbr", StandardSQLTypeName.STRING));
    loadCsvFromGcs(datasetName, tableName, sourceUri, schema);
  }

  public static void loadCsvFromGcs(
      String datasetName, String tableName, String sourceUri, Schema schema) {
    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();

      // Skip header row in the file.
      CsvOptions csvOptions = CsvOptions.newBuilder().setSkipLeadingRows(1).build();

      TableId tableId = TableId.of(datasetName, tableName);
      LoadJobConfiguration loadConfig =
          LoadJobConfiguration.newBuilder(tableId, sourceUri, csvOptions).setSchema(schema).build();

      // Load data from a GCS CSV file into the table
      Job job = bigquery.create(JobInfo.of(loadConfig));
      // Blocks until this load table job completes its execution, either failing or succeeding.
      job = job.waitFor();
      if (job.isDone()) {
        System.out.println("CSV from GCS successfully added during load append job");
      } else {
        System.out.println(
            "BigQuery was unable to load into the table due to an error:"
                + job.getStatus().getError());
      }
    } catch (BigQueryException | InterruptedException e) {
      System.out.println("Column not added during load append \n" + e.toString());
    }
  }
}

Node.js

Antes de experimentar este exemplo, siga as Node.jsinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Node.js BigQuery documentação de referência.

Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

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

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

// Instantiate clients
const bigquery = new BigQuery();
const storage = new Storage();

/**
 * This sample loads the CSV file at
 * https://storage.googleapis.com/cloud-samples-data/bigquery/us-states/us-states.csv
 *
 * TODO(developer): Replace the following lines with the path to your file.
 */
const bucketName = 'cloud-samples-data';
const filename = 'bigquery/us-states/us-states.csv';

async function loadCSVFromGCS() {
  // Imports a GCS file into a table with manually defined schema.

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

  // Configure the load job. For full list of options, see:
  // https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#JobConfigurationLoad
  const metadata = {
    sourceFormat: 'CSV',
    skipLeadingRows: 1,
    schema: {
      fields: [
        {name: 'name', type: 'STRING'},
        {name: 'post_abbr', type: 'STRING'},
      ],
    },
    location: 'US',
  };

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

  // load() waits for the job to finish
  console.log(`Job ${job.id} completed.`);

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

PHP

Antes de experimentar este exemplo, siga as PHPinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API PHP BigQuery documentação de referência.

Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

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

use Google\Cloud\BigQuery\BigQueryClient;
use Google\Cloud\Core\ExponentialBackoff;

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

// instantiate the bigquery table service
$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$dataset = $bigQuery->dataset($datasetId);
$table = $dataset->table('us_states');

// create the import job
$gcsUri = 'gs://cloud-samples-data/bigquery/us-states/us-states.csv';
$schema = [
    'fields' => [
        ['name' => 'name', 'type' => 'string'],
        ['name' => 'post_abbr', 'type' => 'string']
    ]
];
$loadConfig = $table->loadFromStorage($gcsUri)->schema($schema)->skipLeadingRows(1);
$job = $table->runJob($loadConfig);
// poll the job until it is complete
$backoff = new ExponentialBackoff(10);
$backoff->execute(function () use ($job) {
    print('Waiting for job to complete' . PHP_EOL);
    $job->reload();
    if (!$job->isComplete()) {
        throw new Exception('Job has not yet completed', 500);
    }
});
// check if the job has errors
if (isset($job->info()['status']['errorResult'])) {
    $error = $job->info()['status']['errorResult']['message'];
    printf('Error running job: %s' . PHP_EOL, $error);
} else {
    print('Data imported successfully' . PHP_EOL);
}

Python

Antes de experimentar este exemplo, siga as Pythoninstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Python BigQuery documentação de referência.

Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

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

Use o método Client.load_table_from_uri() para carregar dados de um ficheiro CSV no Cloud Storage. Forneça uma definição de esquema explícita definindo a propriedade LoadJobConfig.schema como uma lista de objetos SchemaField.

from google.cloud import bigquery

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

# TODO(developer): Set table_id to the ID of the table to create.
# table_id = "your-project.your_dataset.your_table_name"

job_config = bigquery.LoadJobConfig(
    schema=[
        bigquery.SchemaField("name", "STRING"),
        bigquery.SchemaField("post_abbr", "STRING"),
    ],
    skip_leading_rows=1,
    # The source format defaults to CSV, so the line below is optional.
    source_format=bigquery.SourceFormat.CSV,
)
uri = "gs://cloud-samples-data/bigquery/us-states/us-states.csv"

load_job = client.load_table_from_uri(
    uri, table_id, job_config=job_config
)  # Make an API request.

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

destination_table = client.get_table(table_id)  # Make an API request.
print("Loaded {} rows.".format(destination_table.num_rows))

Ruby

Antes de experimentar este exemplo, siga as Rubyinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Ruby BigQuery documentação de referência.

Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

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

require "google/cloud/bigquery"

def load_table_gcs_csv dataset_id = "your_dataset_id"
  bigquery = Google::Cloud::Bigquery.new
  dataset  = bigquery.dataset dataset_id
  gcs_uri  = "gs://cloud-samples-data/bigquery/us-states/us-states.csv"
  table_id = "us_states"

  load_job = dataset.load_job table_id, gcs_uri, skip_leading: 1 do |schema|
    schema.string "name"
    schema.string "post_abbr"
  end
  puts "Starting job #{load_job.job_id}"

  load_job.wait_until_done! # Waits for table load to complete.
  puts "Job finished."

  table = dataset.table table_id
  puts "Loaded #{table.rows_count} rows to table #{table.id}"
end

Carregar dados CSV numa tabela que usa a partição de tempo baseada em colunas

Para carregar dados CSV do Cloud Storage para uma tabela do BigQuery que usa a partição de tempo baseada em colunas:

Go

Antes de experimentar este exemplo, siga as Goinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Go BigQuery documentação de referência.

Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

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


import (
	"context"
	"fmt"
	"time"

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

// importPartitionedTable demonstrates specifing time partitioning for a BigQuery table when loading
// CSV data from Cloud Storage.
func importPartitionedTable(projectID, destDatasetID, destTableID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// tableID := "mytable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	gcsRef := bigquery.NewGCSReference("gs://cloud-samples-data/bigquery/us-states/us-states-by-date.csv")
	gcsRef.SkipLeadingRows = 1
	gcsRef.Schema = bigquery.Schema{
		{Name: "name", Type: bigquery.StringFieldType},
		{Name: "post_abbr", Type: bigquery.StringFieldType},
		{Name: "date", Type: bigquery.DateFieldType},
	}
	loader := client.Dataset(destDatasetID).Table(destTableID).LoaderFrom(gcsRef)
	loader.TimePartitioning = &bigquery.TimePartitioning{
		Field:      "date",
		Expiration: 90 * 24 * time.Hour,
	}
	loader.WriteDisposition = bigquery.WriteEmpty

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

	if status.Err() != nil {
		return fmt.Errorf("job completed with error: %v", status.Err())
	}
	return nil
}

Java

Antes de experimentar este exemplo, siga as Javainstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Java BigQuery documentação de referência.

Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

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

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Field;
import com.google.cloud.bigquery.FormatOptions;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobId;
import com.google.cloud.bigquery.JobInfo;
import com.google.cloud.bigquery.LoadJobConfiguration;
import com.google.cloud.bigquery.Schema;
import com.google.cloud.bigquery.StandardSQLTypeName;
import com.google.cloud.bigquery.TableId;
import com.google.cloud.bigquery.TimePartitioning;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
import java.util.UUID;

public class LoadPartitionedTable {

  public static void runLoadPartitionedTable() throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    String sourceUri = "/path/to/file.csv";
    loadPartitionedTable(datasetName, tableName, sourceUri);
  }

  public static void loadPartitionedTable(String datasetName, String tableName, String sourceUri)
      throws Exception {
    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(datasetName, tableName);

      Schema schema =
          Schema.of(
              Field.of("name", StandardSQLTypeName.STRING),
              Field.of("post_abbr", StandardSQLTypeName.STRING),
              Field.of("date", StandardSQLTypeName.DATE));

      // Configure time partitioning. For full list of options, see:
      // https://cloud.google.com/bigquery/docs/reference/rest/v2/tables#TimePartitioning
      TimePartitioning partitioning =
          TimePartitioning.newBuilder(TimePartitioning.Type.DAY)
              .setField("date")
              .setExpirationMs(Duration.of(90, ChronoUnit.DAYS).toMillis())
              .build();

      LoadJobConfiguration loadJobConfig =
          LoadJobConfiguration.builder(tableId, sourceUri)
              .setFormatOptions(FormatOptions.csv())
              .setSchema(schema)
              .setTimePartitioning(partitioning)
              .build();

      // Create a job ID so that we can safely retry.
      JobId jobId = JobId.of(UUID.randomUUID().toString());
      Job loadJob = bigquery.create(JobInfo.newBuilder(loadJobConfig).setJobId(jobId).build());

      // Load data from a GCS parquet file into the table
      // Blocks until this load table job completes its execution, either failing or succeeding.
      Job completedJob = loadJob.waitFor();

      // Check for errors
      if (completedJob == null) {
        throw new Exception("Job not executed since it no longer exists.");
      } else if (completedJob.getStatus().getError() != null) {
        // You can also look at queryJob.getStatus().getExecutionErrors() for all
        // errors, not just the latest one.
        throw new Exception(
            "BigQuery was unable to load into the table due to an error: \n"
                + loadJob.getStatus().getError());
      }
      System.out.println("Data successfully loaded into time partitioned table during load job");
    } catch (BigQueryException | InterruptedException e) {
      System.out.println(
          "Data not loaded into time partitioned table during load job \n" + e.toString());
    }
  }
}

Node.js

Antes de experimentar este exemplo, siga as Node.jsinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Node.js BigQuery documentação de referência.

Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

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

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

// Instantiate clients
const bigquery = new BigQuery();
const storage = new Storage();

/**
 * This sample loads the CSV file at
 * https://storage.googleapis.com/cloud-samples-data/bigquery/us-states/us-states.csv
 *
 * TODO(developer): Replace the following lines with the path to your file.
 */
const bucketName = 'cloud-samples-data';
const filename = 'bigquery/us-states/us-states-by-date.csv';

async function loadTablePartitioned() {
  // Load data into a table that uses column-based time partitioning.

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

  // Configure the load job. For full list of options, see:
  // https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#JobConfigurationLoad
  const partitionConfig = {
    type: 'DAY',
    expirationMs: '7776000000', // 90 days
    field: 'date',
  };

  const metadata = {
    sourceFormat: 'CSV',
    skipLeadingRows: 1,
    schema: {
      fields: [
        {name: 'name', type: 'STRING'},
        {name: 'post_abbr', type: 'STRING'},
        {name: 'date', type: 'DATE'},
      ],
    },
    location: 'US',
    timePartitioning: partitionConfig,
  };

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

  // load() waits for the job to finish
  console.log(`Job ${job.id} completed.`);
}

Python

Antes de experimentar este exemplo, siga as Pythoninstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Python BigQuery documentação de referência.

Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

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

from google.cloud import bigquery

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

# TODO(developer): Set table_id to the ID of the table to create.
# table_id = "your-project.your_dataset.your_table_name"

job_config = bigquery.LoadJobConfig(
    schema=[
        bigquery.SchemaField("name", "STRING"),
        bigquery.SchemaField("post_abbr", "STRING"),
        bigquery.SchemaField("date", "DATE"),
    ],
    skip_leading_rows=1,
    time_partitioning=bigquery.TimePartitioning(
        type_=bigquery.TimePartitioningType.DAY,
        field="date",  # Name of the column to use for partitioning.
        expiration_ms=7776000000,  # 90 days.
    ),
)
uri = "gs://cloud-samples-data/bigquery/us-states/us-states-by-date.csv"

load_job = client.load_table_from_uri(
    uri, table_id, job_config=job_config
)  # Make an API request.

load_job.result()  # Wait for the job to complete.

table = client.get_table(table_id)
print("Loaded {} rows to table {}".format(table.num_rows, table_id))

Anexar ou substituir uma tabela com dados CSV

Pode carregar dados adicionais para uma tabela a partir de ficheiros de origem ou acrescentando resultados de consultas.

Na Trusted Cloud consola, use a opção Preferência de escrita para especificar que ação realizar quando carregar dados de um ficheiro de origem ou de um resultado de consulta.

Tem as seguintes opções quando carrega dados adicionais numa tabela:

Opção da consola Sinalização da ferramenta bq Propriedade da API BigQuery Descrição
Escrever se estiver vazio Não suportado WRITE_EMPTY Escreve os dados apenas se a tabela estiver vazia.
Anexar à tabela --noreplace ou --replace=false; se --[no]replace não estiver especificado, a predefinição é anexar WRITE_APPEND (Predefinição) Anexa os dados ao final da tabela.
Substituir tabela --replace ou --replace=true WRITE_TRUNCATE Apaga todos os dados existentes numa tabela antes de escrever os novos dados. Esta ação também elimina o esquema da tabela, a segurança ao nível da linha e remove qualquer chave do Cloud KMS.

Se carregar dados para uma tabela existente, a tarefa de carregamento pode anexar os dados ou substituir a tabela.

Consola

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

    Aceda ao BigQuery

  2. No painel Explorador, expanda o seu projeto e, de seguida, selecione um conjunto de dados.
  3. Na secção Informações do conjunto de dados, clique em Criar tabela.
  4. No painel Criar tabela, especifique os seguintes detalhes:
    1. Na secção Origem, selecione Google Cloud Storage na lista Criar tabela a partir de. Em seguida, faça o seguinte:
      1. Selecione um ficheiro do contentor do Cloud Storage ou introduza o URI do Cloud Storage. Não pode incluir vários URIs na Trusted Cloud consola, mas os carateres universais são suportados. O contentor do Cloud Storage tem de estar na mesma localização que o conjunto de dados que contém a tabela que quer criar, acrescentar ou substituir. selecione o ficheiro de origem para criar uma tabela do BigQuery
      2. Em Formato de ficheiro, selecione CSV.
    2. Na secção Destino, especifique os seguintes detalhes:
      1. Para Conjunto de dados, selecione o conjunto de dados no qual quer criar a tabela.
      2. No campo Tabela, introduza o nome da tabela que quer criar.
      3. Verifique se o campo Tipo de tabela está definido como Tabela nativa.
    3. Na secção Esquema, introduza a definição do esquema. Para ativar a deteção automática de um esquema, selecione Deteção automática. Pode introduzir manualmente informações do esquema através de um dos seguintes métodos:
      • Opção 1: clique em Editar como texto e cole o esquema sob a forma de uma matriz JSON. Quando usa uma matriz JSON, gera o esquema através do mesmo processo que criar um ficheiro de esquema JSON. Pode ver o esquema de uma tabela existente no formato JSON introduzindo o seguinte comando:
            bq show --format=prettyjson dataset.table
            
      • Opção 2: clique em Adicionar campo e introduza o esquema da tabela. Especifique o Nome, Tipo e Modo de cada campo.
    4. Opcional: especifique as definições de partição e cluster. Para mais informações, consulte os artigos Criar tabelas particionadas e Criar e usar tabelas agrupadas. Não pode converter uma tabela numa tabela particionada ou agrupada anexando-a ou substituindo-a. A Trusted Cloud consola não suporta a anexação nem a substituição de tabelas particionadas ou agrupadas num trabalho de carregamento.
    5. Clique em Opções avançadas e faça o seguinte:
      • Para Preferência de escrita, escolha Anexar à tabela ou Substituir tabela.
      • Para Número de erros permitidos, aceite o valor predefinido de 0 ou introduza o número máximo de linhas com erros que podem ser ignorados. Se o número de linhas com erros exceder este valor, a tarefa vai gerar uma mensagem invalid e falhar. Esta opção aplica-se apenas a ficheiros CSV e JSON.
      • Em Fuso horário, introduza o fuso horário predefinido que vai ser aplicado quando analisar valores de data/hora que não tenham um fuso horário específico. Consulte aqui mais nomes de fusos horários válidos. Se este valor não estiver presente, os valores de data/hora sem um fuso horário específico são analisados através do fuso horário predefinido UTC. (Pré-visualizar).
      • Para Formato de data, introduza os elementos de formato que definem como os valores DATE são formatados nos ficheiros de entrada. Este campo espera o formato de estilos SQL (por exemplo, MM/DD/YYYY). Se este valor estiver presente, este formato é o único formato DATE compatível. A deteção automática de esquemas também decide o tipo de coluna DATE com base neste formato, em vez do formato existente. Se este valor não estiver presente, o campo DATE é analisado com os formatos predefinidos. (Pré-visualizar).
      • Para Formato de data/hora, introduza os elementos de formato que definem como os valores DATETIME são formatados nos ficheiros de entrada. Este campo espera o formato de estilos SQL (por exemplo, MM/DD/YYYY HH24:MI:SS.FF3). Se este valor estiver presente, este formato é o único formato DATETIME compatível. A deteção automática do esquema também decide o tipo de coluna DATETIME com base neste formato, em vez do formato existente. Se este valor não estiver presente, o campo DATETIME é analisado com os formatos predefinidos. (Pré-visualizar).
      • Para Formato de hora, introduza os elementos de formato que definem como os valores de TIME são formatados nos ficheiros de entrada. Este campo espera o formato de estilos SQL (por exemplo, HH24:MI:SS.FF3). Se este valor estiver presente, este formato é o único formato de TIME compatível. A deteção automática do esquema também decide o tipo de coluna TIME com base neste formato, em vez do formato existente. Se este valor não estiver presente, o campo TIME é analisado com os formatos predefinidos. (Pré-visualizar).
      • Para o Formato de data/hora, introduza os elementos de formato que definem como os valores de data/hora são formatados nos ficheiros de entrada. Este campo espera o formato de estilos SQL (por exemplo, MM/DD/YYYY HH24:MI:SS.FF3). Se este valor estiver presente, este formato é o único formato TIMESTAMP compatível. A deteção automática do esquema também decide o tipo de coluna TIMESTAMP com base neste formato, em vez do formato existente. Se este valor não estiver presente, o campo TIMESTAMP é analisado com os formatos predefinidos. (Pré-visualizar).
      • Se quiser ignorar valores numa linha que não estejam presentes no esquema da tabela, selecione Valores desconhecidos.
      • Para Delimitador de campo, escolha o caráter que separa as células no seu ficheiro CSV: Vírgula, Tabulação, Barra vertical ou Personalizado. Se escolher Personalizado, introduza o delimitador na caixa Delimitador de campo personalizado. O valor predefinido é Comma.
      • Para Correspondência de colunas de origem, escolha uma das seguintes estratégias usadas para fazer corresponder as colunas carregadas ao esquema (Pré-visualização).
        • Default: o comportamento predefinido é escolhido com base na forma como o esquema é fornecido. Se a deteção automática estiver ativada, o comportamento predefinido é fazer a correspondência das colunas por nome. Caso contrário, a predefinição é fazer a correspondência das colunas por posição. Isto é feito para manter o comportamento retrocompatível.
        • Position: faz corresponder as colunas por posição, partindo do princípio de que as colunas estão ordenadas da mesma forma que o esquema.
        • Name: corresponde por nome lendo a linha de cabeçalho como os nomes das colunas e reordenando as colunas para corresponder aos nomes dos campos no esquema. Os nomes das colunas são lidos a partir da última linha ignorada com base em Linhas de cabeçalho a ignorar.
      • Para Linhas de cabeçalho a ignorar, introduza o número de linhas de cabeçalho a ignorar na parte superior do ficheiro CSV. O valor predefinido é 0.
      • Para Novas linhas entre aspas, selecione Permitir novas linhas entre aspas para permitir secções de dados entre aspas que contenham carateres de nova linha num ficheiro CSV. O valor predefinido é false.
      • Para Linhas irregulares, selecione Permitir linhas irregulares para aceitar linhas em ficheiros CSV que não tenham colunas opcionais finais. Os valores em falta são tratados como nulos. Se esta opção não estiver selecionada, os registos com colunas finais em falta são tratados como registos inválidos e, se existirem demasiados registos inválidos, é devolvido um erro inválido no resultado da tarefa. O valor predefinido é false.
      • Para Marcadores nulos, introduza uma lista de strings personalizadas que representam um valor NULL nos dados CSV. (Pré-visualizar).
      • Para Encriptação, clique em Chave gerida pelo cliente para usar uma chave do Cloud Key Management Service. Se deixar a definição Google Cloud-powered key, o BigQuery encripta os dados em repouso.
    6. Clique em Criar tabela.

SQL

Use a LOAD DATA declaração DDL. O exemplo seguinte anexa um ficheiro CSV à tabela mytable:

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

    Aceda ao BigQuery

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

    LOAD DATA INTO mydataset.mytable
    FROM FILES (
      format = 'CSV',
      uris = ['gs://bucket/path/file.csv']);

  3. Clique em Executar.

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

bq

Use o comando bq load, especifique CSV usando a flag --source_format e inclua um URI do Cloud Storage. Pode incluir um único URI, uma lista de URIs separados por vírgulas ou um URI que contenha um caractere universal.

Forneça o esquema inline, num ficheiro de definição do esquema ou use a deteção automática de esquemas. Se não especificar um esquema e --autodetect for false, e a tabela de destino existir, é usado o esquema da tabela de destino.

Especifique a flag --replace para substituir a tabela. Use a flag --noreplace para anexar dados à tabela. Se não for especificada nenhuma flag, a predefinição é anexar dados.

É possível modificar o esquema da tabela quando a acrescenta ou substitui. Para mais informações sobre as alterações ao esquema suportadas durante uma operação de carregamento, consulte o artigo Modificar esquemas de tabelas.

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

Outras flags opcionais incluem:

  • --allow_jagged_rows: quando especificado, aceita linhas em ficheiros CSV que não tenham colunas opcionais finais. Os valores em falta são tratados como nulos. Se a caixa não estiver selecionada, os registos com colunas finais em falta são tratados como registos inválidos e, se existirem demasiados registos inválidos, é devolvido um erro inválido no resultado da tarefa. O valor predefinido é false.
  • --allow_quoted_newlines: quando especificado, permite secções de dados entre aspas que contenham carateres de nova linha num ficheiro CSV. O valor predefinido é false.
  • --field_delimiter: o caráter que indica o limite entre as colunas nos dados. São permitidos \t e tab para delimitadores de tabulações. O valor predefinido é ,.
  • --null_marker: uma string personalizada opcional que representa um valor NULL nos dados CSV.
  • --null_markers: (Pré-visualização) Uma lista opcional de strings personalizadas separadas por vírgulas que representam valores NULL nos dados CSV. Não é possível usar esta opção com a flag --null_marker.
  • --source_column_match: (Pré-visualização) Especifica a estratégia usada para fazer corresponder as colunas carregadas ao esquema. Pode especificar POSITION para fazer corresponder as colunas carregadas por posição, partindo do princípio de que as colunas estão ordenadas da mesma forma que o esquema. Também pode especificar NAME para fazer a correspondência por nome lendo a linha de cabeçalho como os nomes das colunas e reordenando as colunas para corresponder aos nomes dos campos no esquema. Se este valor não for especificado, o valor predefinido baseia-se na forma como o esquema é fornecido. Se a política --autodetect estiver ativada, o comportamento predefinido é fazer a correspondência das colunas por nome. Caso contrário, a predefinição é fazer a correspondência das colunas por posição.
  • --skip_leading_rows: Especifica o número de linhas de cabeçalho a ignorar na parte superior do ficheiro CSV. O valor predefinido é 0.
  • --quote: o caráter de aspas a usar para incluir registos. O valor predefinido é ". Para indicar que não existe um caráter de aspas, use uma string vazia.
  • --max_bad_records: um número inteiro que especifica o número máximo de registos inválidos permitidos antes de toda a tarefa falhar. O valor predefinido é 0. São devolvidos, no máximo, cinco erros de qualquer tipo, independentemente do valor de --max_bad_records.
  • --ignore_unknown_values: quando especificado, permite e ignora valores adicionais não reconhecidos em dados CSV ou JSON.
  • --time_zone: (Pré-visualização) Um fuso horário predefinido opcional que é aplicado ao analisar valores de data/hora que não têm um fuso horário específico nos dados CSV ou JSON.
  • --date_format: (Pré-visualização) Uma string personalizada opcional que define como os valores DATE são formatados nos dados CSV ou JSON.
  • --datetime_format: (Pré-visualização) Uma string personalizada opcional que define como os valores DATETIME são formatados em dados CSV ou JSON.
  • --time_format: (Pré-visualização) Uma string personalizada opcional que define como os valores TIME são formatados nos dados CSV ou JSON.
  • --timestamp_format: (Pré-visualização) Uma string personalizada opcional que define como os valores de TIMESTAMP são formatados nos dados CSV ou JSON.
  • --autodetect: Quando especificado, ativa a deteção automática de esquemas para dados CSV e JSON.
  • --destination_kms_key: a chave do Cloud KMS para a encriptação dos dados da tabela.
bq --location=location load \
--[no]replace \
--source_format=format \
dataset.table \
path_to_source \
schema

where:

  • location é a sua localização. A flag --location é opcional. Pode predefinir um valor para a localização através do ficheiro.bigqueryrc.
  • format é CSV.
  • dataset é um conjunto de dados existente.
  • table é o nome da tabela para a qual está a carregar dados.
  • path_to_source é um URI do Cloud Storage totalmente qualificado ou uma lista de URIs separados por vírgulas. Os carateres universais também são suportados.
  • schema é um esquema válido. O esquema pode ser um ficheiro JSON local ou pode ser introduzido inline como parte do comando. Também pode usar a flag --autodetect em vez de fornecer uma definição de esquema.

Exemplos:

O comando seguinte carrega dados de gs://mybucket/mydata.csv e substitui uma tabela denominada mytable em mydataset. O esquema é definido através da deteção automática de esquemas.

    bq load \
    --autodetect \
    --replace \
    --source_format=CSV \
    mydataset.mytable \
    gs://mybucket/mydata.csv

O comando seguinte carrega dados de gs://mybucket/mydata.csv e anexa dados a uma tabela denominada mytable em mydataset. O esquema é definido através de um ficheiro de esquema JSON: myschema.json.

    bq load \
    --noreplace \
    --source_format=CSV \
    mydataset.mytable \
    gs://mybucket/mydata.csv \
    ./myschema.json

API

  1. Crie uma tarefa load que aponte para os dados de origem no Cloud Storage.

  2. (Opcional) Especifique a sua localização na propriedade location na secção jobReference do recurso de emprego.

  3. A propriedade source URIs tem de ser totalmente qualificada, no formato gs://bucket/object. Pode incluir vários URIs como uma lista separada por vírgulas. Tenha em atenção que os carateres universais também são suportados.

  4. Especifique o formato de dados definindo a propriedade configuration.load.sourceFormat como CSV.

  5. Especifique a preferência de escrita definindo a propriedade configuration.load.writeDisposition como WRITE_TRUNCATE ou WRITE_APPEND.

Go

Antes de experimentar este exemplo, siga as Goinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Go BigQuery documentação de referência.

Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

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

import (
	"context"
	"fmt"

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

// importCSVTruncate demonstrates loading data from CSV data in Cloud Storage and overwriting/truncating
// data in the existing table.
func importCSVTruncate(projectID, datasetID, tableID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// tableID := "mytable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	gcsRef := bigquery.NewGCSReference("gs://cloud-samples-data/bigquery/us-states/us-states.csv")
	gcsRef.SourceFormat = bigquery.CSV
	gcsRef.AutoDetect = true
	gcsRef.SkipLeadingRows = 1
	loader := client.Dataset(datasetID).Table(tableID).LoaderFrom(gcsRef)
	loader.WriteDisposition = bigquery.WriteTruncate

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

	if status.Err() != nil {
		return fmt.Errorf("job completed with error: %v", status.Err())
	}
	return nil
}

Java

Antes de experimentar este exemplo, siga as Javainstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Java BigQuery documentação de referência.

Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

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

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.FormatOptions;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobInfo;
import com.google.cloud.bigquery.JobInfo.WriteDisposition;
import com.google.cloud.bigquery.LoadJobConfiguration;
import com.google.cloud.bigquery.TableId;

// Sample to overwrite the BigQuery table data by loading a CSV file from GCS
public class LoadCsvFromGcsTruncate {

  public static void runLoadCsvFromGcsTruncate() throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    String sourceUri = "gs://cloud-samples-data/bigquery/us-states/us-states.csv";
    loadCsvFromGcsTruncate(datasetName, tableName, sourceUri);
  }

  public static void loadCsvFromGcsTruncate(String datasetName, String tableName, String sourceUri)
      throws Exception {
    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(datasetName, tableName);

      LoadJobConfiguration configuration =
          LoadJobConfiguration.builder(tableId, sourceUri)
              .setFormatOptions(FormatOptions.csv())
              // Set the write disposition to overwrite existing table data
              .setWriteDisposition(WriteDisposition.WRITE_TRUNCATE)
              .build();

      // For more information on Job see:
      // https://googleapis.dev/java/google-cloud-clients/latest/index.html?com/google/cloud/bigquery/package-summary.html
      // Load the table
      Job loadJob = bigquery.create(JobInfo.of(configuration));

      // Load data from a GCS parquet file into the table
      // Blocks until this load table job completes its execution, either failing or succeeding.
      Job completedJob = loadJob.waitFor();

      // Check for errors
      if (completedJob == null) {
        throw new Exception("Job not executed since it no longer exists.");
      } else if (completedJob.getStatus().getError() != null) {
        // You can also look at queryJob.getStatus().getExecutionErrors() for all
        // errors, not just the latest one.
        throw new Exception(
            "BigQuery was unable to load into the table due to an error: \n"
                + loadJob.getStatus().getError());
      }
      System.out.println("Table is successfully overwritten by CSV file loaded from GCS");
    } catch (BigQueryException | InterruptedException e) {
      System.out.println("Column not added during load append \n" + e.toString());
    }
  }
}

Node.js

Antes de experimentar este exemplo, siga as Node.jsinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Node.js BigQuery documentação de referência.

Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

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

Para substituir as linhas numa tabela existente, defina o valor no parâmetro metadata como 'WRITE_TRUNCATE'.writeDisposition

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

// Instantiate clients
const bigquery = new BigQuery();
const storage = new Storage();

/**
 * This sample loads the CSV file at
 * https://storage.googleapis.com/cloud-samples-data/bigquery/us-states/us-states.csv
 *
 * TODO(developer): Replace the following lines with the path to your file.
 */
const bucketName = 'cloud-samples-data';
const filename = 'bigquery/us-states/us-states.csv';

async function loadCSVFromGCSTruncate() {
  /**
   * Imports a GCS file into a table and overwrites
   * table data if table already exists.
   */

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

  // Configure the load job. For full list of options, see:
  // https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#JobConfigurationLoad
  const metadata = {
    sourceFormat: 'CSV',
    skipLeadingRows: 1,
    schema: {
      fields: [
        {name: 'name', type: 'STRING'},
        {name: 'post_abbr', type: 'STRING'},
      ],
    },
    // Set the write disposition to overwrite existing table data.
    writeDisposition: 'WRITE_TRUNCATE',
    location: 'US',
  };

  // Load data from a Google Cloud Storage file into the table
  const [job] = await bigquery
    .dataset(datasetId)
    .table(tableId)
    .load(storage.bucket(bucketName).file(filename), metadata);
  // load() waits for the job to finish
  console.log(`Job ${job.id} completed.`);

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

Antes de experimentar este exemplo, siga as PHPinstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API PHP BigQuery documentação de referência.

Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

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

use Google\Cloud\BigQuery\BigQueryClient;
use Google\Cloud\Core\ExponentialBackoff;

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

// instantiate the bigquery table service
$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$table = $bigQuery->dataset($datasetId)->table($tableId);

// create the import job
$gcsUri = 'gs://cloud-samples-data/bigquery/us-states/us-states.csv';
$loadConfig = $table->loadFromStorage($gcsUri)->skipLeadingRows(1)->writeDisposition('WRITE_TRUNCATE');
$job = $table->runJob($loadConfig);

// poll the job until it is complete
$backoff = new ExponentialBackoff(10);
$backoff->execute(function () use ($job) {
    print('Waiting for job to complete' . PHP_EOL);
    $job->reload();
    if (!$job->isComplete()) {
        throw new Exception('Job has not yet completed', 500);
    }
});

// check if the job has errors
if (isset($job->info()['status']['errorResult'])) {
    $error = $job->info()['status']['errorResult']['message'];
    printf('Error running job: %s' . PHP_EOL, $error);
} else {
    print('Data imported successfully' . PHP_EOL);
}

Python

Antes de experimentar este exemplo, siga as Pythoninstruções de configuração no início rápido do BigQuery com bibliotecas cliente. Para mais informações, consulte a API Python BigQuery documentação de referência.

Para se autenticar no BigQuery, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.

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

Para substituir as linhas numa tabela existente, defina a propriedade LoadJobConfig.write_disposition para a constante SourceFormat WRITE_TRUNCATE.

import six

from google.cloud import bigquery

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

# TODO(developer): Set table_id to the ID of the table to create.
# table_id = "your-project.your_dataset.your_table_name

job_config = bigquery.LoadJobConfig(
    schema=[
        bigquery.SchemaField("name", "STRING"),
        bigquery.SchemaField("post_abbr", "STRING"),
    ],
)

body = six.BytesIO(b"Washington,WA")
client.load_table_from_file(body, table_id, job_config=job_config).result()
previous_rows = client.get_table(table_id).num_rows
assert previous_rows > 0

job_config = bigquery.LoadJobConfig(
    write_disposition=bigquery.WriteDisposition.WRITE_TRUNCATE,
    source_format=bigquery.SourceFormat.CSV,
    skip_leading_rows=1,
)

uri = "gs://cloud-samples-data/bigquery/us-states/us-states.csv"
load_job = client.load_table_from_uri(
    uri, table_id, job_config=job_config
)  # Make an API request.

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

destination_table = client.get_table(table_id)
print("Loaded {} rows.".format(destination_table.num_rows))

Carregar dados CSV particionados por Hive

O BigQuery suporta o carregamento de dados CSV particionados por Hive armazenados no Cloud Storage e preenche as colunas de partição por Hive como colunas na tabela gerida do BigQuery de destino. Para mais informações, consulte o artigo Carregar dados particionados externamente a partir do Cloud Storage.

Detalhes do carregamento de dados CSV

Esta secção descreve como o BigQuery processa várias opções de formatação CSV.

Codificação

O BigQuery espera que os dados CSV sejam codificados em UTF-8. Se tiver ficheiros CSV com outros tipos de codificação suportados, deve especificar explicitamente a codificação para que o BigQuery possa converter corretamente os dados para UTF-8.

O BigQuery suporta os seguintes tipos de codificação para ficheiros CSV:

  • UTF-8
  • ISO-8859-1
  • UTF-16BE (UTF-16 Big Endian)
  • UTF-16LE (UTF-16 Little Endian)
  • UTF-32BE (UTF-32 Big Endian)
  • UTF-32LE (UTF-32 Little Endian)

Se não especificar uma codificação ou se especificar a codificação UTF-8 quando o ficheiro CSV não estiver codificado em UTF-8, o BigQuery tenta converter os dados para UTF-8. Geralmente, se o ficheiro CSV estiver codificado em ISO-8859-1, os dados são carregados com êxito, mas podem não corresponder exatamente ao que espera. Se o ficheiro CSV estiver codificado em UTF-16BE, UTF-16LE, UTF-32BE ou UTF-32LE, o carregamento pode falhar. Para evitar falhas inesperadas, especifique a codificação correta através da flag --encoding.

Se o BigQuery não conseguir converter um caráter que não seja o caráter ASCII 0, o BigQuery converte o caráter no caráter de substituição Unicode padrão: �.

Delimitadores de campos

Os delimitadores em ficheiros CSV podem ser qualquer caráter de byte único. Se o ficheiro de origem usar a codificação ISO-8859-1, qualquer caráter pode ser um delimitador. Se o ficheiro de origem usar a codificação UTF-8, pode usar qualquer carater no intervalo decimal 1-127 (U+0001-U+007F) sem modificação. Pode inserir um caráter ISO-8859-1 fora deste intervalo como um delimitador, e o BigQuery interpreta-o corretamente. No entanto, se usar um caráter multibyte como delimitador, alguns dos bytes vão ser interpretados incorretamente como parte do valor do campo.

Geralmente, é uma prática recomendada usar um delimitador padrão, como um separador, uma barra vertical ou uma vírgula. A predefinição é uma vírgula.

Tipos de dados

Booleano. O BigQuery pode analisar qualquer um dos seguintes pares para dados booleanos: 1 ou 0, verdadeiro ou falso, t ou f, sim ou não, ou y ou n (todos sem distinção entre maiúsculas e minúsculas). A deteção automática do esquema deteta automaticamente qualquer um destes, exceto 0 e 1.

Bytes. As colunas com tipos BYTES têm de ser codificadas como Base64.

Data. As colunas com tipos DATE têm de estar no formato YYYY-MM-DD.

Data/hora. As colunas com tipos DATETIME têm de estar no formato YYYY-MM-DD HH:MM:SS[.SSSSSS].

Geografia. As colunas com tipos GEOGRAPHY têm de conter strings num dos seguintes formatos:

  • Texto conhecido (WKT)
  • Well-known binary (WKB)
  • GeoJSON

Se usar WKB, o valor deve ser codificado em hexadecimal.

A lista que se segue mostra exemplos de dados válidos:

  • WKT: POINT(1 2)
  • GeoJSON: { "type": "Point", "coordinates": [1, 2] }
  • WKB codificado em hexadecimal: 0101000000feffffffffffef3f0000000000000040

Antes de carregar dados GEOGRÁFICOS, leia também o artigo Carregar dados geoespaciais.

Intervalo. As colunas com tipos INTERVAL têm de estar no formato Y-M D H:M:S[.F], em que:

  • Y = Ano. O intervalo suportado é de 0 a 10 000.
  • M = Mês. O intervalo suportado é de 1 a 12.
  • D = Dia. O intervalo suportado é de 1 a [último dia do mês indicado].
  • H = Hora.
  • M = minuto.
  • S = segundo.
  • [.F] = Frações de um segundo até seis dígitos, com precisão de microssegundos.

Pode indicar um valor negativo antepondo um travessão (-).

A lista que se segue mostra exemplos de dados válidos:

  • 10-6 0 0:0:0
  • 0-0 -5 0:0:0
  • 0-0 0 0:0:1.25

Para carregar dados INTERVAL, tem de usar o comando bq load e usar o sinalizador --schema para especificar um esquema. Não pode carregar dados INTERVAL usando a consola.

JSON. As aspas têm carateres de escape através da sequência de dois carateres "". Para mais informações, veja um exemplo de carregamento de dados JSON a partir de um ficheiro CSV

Hora. As colunas com tipos TIME têm de estar no formato HH:MM:SS[.SSSSSS].

Data/hora. O BigQuery aceita vários formatos de data/hora. A data/hora tem de incluir uma parte de data e uma parte de hora.

  • A parte da data pode ser formatada como YYYY-MM-DD ou YYYY/MM/DD.

  • A parte da data/hora tem de estar formatada como HH:MM[:SS[.SSSSSS]] (os segundos e as frações de segundos são opcionais).

  • A data e a hora têm de estar separadas por um espaço ou "T".

  • Opcionalmente, a data e a hora podem ser seguidas de uma diferença para UTC ou do designador de zona UTC (Z). Para mais informações, consulte Fusos horários.

Por exemplo, qualquer um dos seguintes valores de indicação de tempo é válido:

  • 2018-08-19 12:11
  • 2018-08-19 12:11:35
  • 2018-08-19 12:11:35.22
  • 2018/08/19 12:11
  • 2018-07-05 12:54:00 UTC
  • 2018-08-19 07:11:35.220 -05:00
  • 2018-08-19T12:11:35.220Z

Se fornecer um esquema, o BigQuery também aceita a hora desde epoch Unix para valores de data/hora. No entanto, a deteção automática do esquema não deteta este caso e trata o valor como um tipo numérico ou de string.

Exemplos de valores de indicação de tempo de época Unix:

  • 1534680695
  • 1,534680695e12

RANGE. Representado em ficheiros CSV no formato [LOWER_BOUND, UPPER_BOUND), em que LOWER_BOUND e UPPER_BOUND são strings DATE, DATETIME ou TIMESTAMP válidas. NULL e UNBOUNDED representam valores de início ou de fim ilimitados.

Seguem-se exemplos de valores CSV para RANGE<DATE>:

  • "[2020-01-01, 2021-01-01)"
  • "[UNBOUNDED, 2021-01-01)"
  • "[2020-03-01, NULL)"
  • "[UNBOUNDED, UNBOUNDED)"

Deteção automática do esquema

Esta secção descreve o comportamento da deteção automática de esquemas ao carregar ficheiros CSV.

Delimitador CSV

O BigQuery deteta os seguintes delimitadores:

  • vírgula ( , )
  • barra vertical ( | )
  • tabulação ( \t )

Cabeçalho do CSV

O BigQuery infere os cabeçalhos comparando a primeira linha do ficheiro com outras linhas no ficheiro. Se a primeira linha contiver apenas strings e as outras linhas contiverem outros tipos de dados, o BigQuery assume que a primeira linha é uma linha de cabeçalho. O BigQuery atribui nomes de colunas com base nos nomes dos campos na linha do cabeçalho. Os nomes podem ser modificados para cumprir as regras de nomenclatura para colunas no BigQuery. Por exemplo, os espaços são substituídos por sublinhados.

Caso contrário, o BigQuery assume que a primeira linha é uma linha de dados e atribui nomes de colunas genéricos, como string_field_1. Tenha em atenção que, depois de criar uma tabela, não é possível atualizar os nomes das colunas no esquema, embora possa alterar os nomes manualmente depois de criar a tabela. Outra opção é fornecer um esquema explícito em vez de usar a deteção automática.

Pode ter um ficheiro CSV com uma linha de cabeçalho, em que todos os campos de dados são strings. Nesse caso, o BigQuery não deteta automaticamente que a primeira linha é um cabeçalho. Use a opção --skip_leading_rows para ignorar a linha de cabeçalho. Caso contrário, o cabeçalho é importado como dados. Considere também fornecer um esquema explícito neste caso para poder atribuir nomes de colunas.

Novas linhas entre aspas no CSV

O BigQuery deteta carateres de nova linha entre aspas num campo CSV e não interpreta o caráter de nova linha entre aspas como um limite de linha.

Resolva problemas de erros de análise

Se houver um problema ao analisar os seus ficheiros CSV, o recurso errors do trabalho de carregamento é preenchido com os detalhes do erro.

Geralmente, estes erros identificam o início da linha problemática com um desvio de bytes. Para ficheiros não comprimidos, pode usar gcloud storage com o argumento --recursive para aceder à linha relevante.

Por exemplo, executa o comando bq load e recebe um erro:

bq load
    --skip_leading_rows=1 \
    --source_format=CSV \
    mydataset.mytable \
    gs://my-bucket/mytable.csv \
    'Number:INTEGER,Name:STRING,TookOffice:STRING,LeftOffice:STRING,Party:STRING'

O erro no resultado é semelhante ao seguinte:

Waiting on bqjob_r5268069f5f49c9bf_0000018632e903d7_1 ... (0s)
Current status: DONE
BigQuery error in load operation: Error processing job
'myproject:bqjob_r5268069f5f49c9bf_0000018632e903d7_1': Error while reading
data, error message: Error detected while parsing row starting at position: 1405.
Error: Data between close quote character (") and field separator.
File: gs://my-bucket/mytable.csv
Failure details:
- gs://my-bucket/mytable.csv: Error while reading data,
error message: Error detected while parsing row starting at
position: 1405. Error: Data between close quote character (") and
field separator. File: gs://my-bucket/mytable.csv
- Error while reading data, error message: CSV processing encountered
too many errors, giving up. Rows: 22; errors: 1; max bad: 0; error
percent: 0

Com base no erro anterior, existe um erro de formato no ficheiro. Para ver o conteúdo do ficheiro, execute o comando gcloud storage cat:

gcloud storage cat 1405-1505 gs://my-bucket/mytable.csv --recursive

O resultado é semelhante ao seguinte:

16,Abraham Lincoln,"March 4, 1861","April 15, "1865,Republican
18,Ulysses S. Grant,"March 4, 1869",
...

Com base no resultado do ficheiro, o problema é uma aspa mal colocada em "April 15, "1865.

Ficheiros CSV comprimidos

A depuração de erros de análise é mais difícil para ficheiros CSV comprimidos, uma vez que o desvio de bytes comunicado refere-se à localização no ficheiro não comprimido. O seguinte comando gcloud storage cat transmite o ficheiro a partir do Cloud Storage, descomprime o ficheiro, identifica o desvio de bytes adequado e imprime a linha com o erro de formato:

gcloud storage cat gs://my-bucket/mytable.csv.gz | gunzip - | tail -c +1406 | head -n 1

O resultado é semelhante ao seguinte:

16,Abraham Lincoln,"March 4, 1861","April 15, "1865,Republican

Opções de CSV

Para alterar a forma como o BigQuery analisa os dados CSV, especifique opções adicionais na Trusted Cloud consola, na ferramenta de linha de comandos bq ou na API.

Para mais informações sobre o formato CSV, consulte o RFC 4180.

Opção CSV Opção da consola Sinalização da ferramenta bq Propriedade da API BigQuery Descrição
Delimitador de campo Delimitador de campo: vírgula, tabulação, barra vertical, personalizado -F ou --field_delimiter fieldDelimiter (Java, Python) (Opcional) O separador para campos num ficheiro CSV. O separador pode ser qualquer caráter de byte único ISO-8859-1. O BigQuery converte a string na codificação ISO-8859-1 e usa o primeiro byte da string codificada para dividir os dados no respetivo estado binário não processado. O BigQuery também suporta a sequência de escape "\t" para especificar um separador de tabulação. O valor predefinido é uma vírgula (`,`).
Linhas de cabeçalho Linhas de cabeçalho a ignorar --skip_leading_rows skipLeadingRows (Java, Python) (Opcional) Um número inteiro que indica o número de linhas de cabeçalho nos dados de origem.
Correspondência da coluna de origem Correspondência da coluna de origem: predefinição, posição, nome --source_column_match Nenhum (Pré-visualização) (Opcional) Esta opção controla a estratégia usada para fazer corresponder as colunas carregadas ao esquema. Os valores suportados incluem:
  • POSITION: correspondências por posição. Esta opção pressupõe que as colunas estão ordenadas da mesma forma que o esquema.
  • NAME: corresponde por nome. Esta opção lê a linha de cabeçalho como nomes de colunas e reordena as colunas para corresponder aos nomes dos campos no esquema. Os nomes das colunas são lidos a partir da última linha ignorada com base na propriedade skipLeadingRows.
Se este valor não for especificado, a predefinição baseia-se na forma como o esquema é fornecido. Se a deteção automática estiver ativada, o comportamento predefinido é fazer a correspondência das colunas por nome. Caso contrário, a predefinição é fazer a correspondência das colunas por posição. Isto é feito para manter o comportamento retrocompatível.
Número de registos inválidos permitidos Número de erros permitidos --max_bad_records maxBadRecords (Java, Python) (Opcional) O número máximo de registos inválidos que o BigQuery pode ignorar quando executa a tarefa. Se o número de registos danificados exceder este valor, é devolvido um erro inválido no resultado da tarefa. O valor predefinido é 0, o que requer que todos os registos sejam válidos.
Carateres de nova linha Permitir novas linhas entre aspas --allow_quoted_newlines allowQuotedNewlines (Java, Python) (Opcional) Indica se deve permitir secções de dados entre aspas que contenham carateres de nova linha num ficheiro CSV. O valor predefinido é false.
Valores nulos personalizados Nenhum --null_marker nullMarker (Java, Python) (Opcional) Especifica uma string que representa um valor nulo num ficheiro CSV. Por exemplo, se especificar "\N", o BigQuery interpreta "\N" como um valor nulo ao carregar um ficheiro CSV. O valor predefinido é a string vazia. Se definir esta propriedade para um valor personalizado, o BigQuery gera um erro se estiver presente uma string vazia para todos os tipos de dados, exceto para STRING e BYTE. Para colunas STRING e BYTE, o BigQuery interpreta a string vazia como um valor vazio.
Colunas opcionais finais Permitir linhas irregulares --allow_jagged_rows allowJaggedRows (Java, Python) (Opcional) Aceite linhas que não tenham colunas opcionais finais. Os valores em falta são tratados como nulos. Se for falso, os registos com colunas finais em falta são tratados como registos inválidos e, se existirem demasiados registos inválidos, é devolvido um erro inválido no resultado da tarefa. O valor predefinido é false. Aplicável apenas a CSV, ignorado para outros formatos.
Valores desconhecidos Ignorar valores desconhecidos --ignore_unknown_values ignoreUnknownValues (Java, Python) (Opcional) Indica se o BigQuery deve permitir valores adicionais que não estão representados no esquema da tabela. Se for verdadeiro, os valores adicionais são ignorados. Se for falso, os registos com colunas adicionais são tratados como registos inválidos e, se existirem demasiados registos inválidos, é devolvido um erro inválido no resultado da tarefa. O valor predefinido é false. A propriedade sourceFormat determina o que o BigQuery considera um valor adicional:
  • CSV: colunas finais
  • JSON: valores com nomes que não correspondem a nenhum nome de coluna
Citação Caráter de aspas: aspas duplas, aspas simples, nenhum, personalizado --quote quote (Java, Python) (Opcional) O valor usado para colocar secções de dados entre aspas num ficheiro CSV. O BigQuery converte a string na codificação ISO-8859-1 e, em seguida, usa o primeiro byte da string codificada para dividir os dados no respetivo estado binário não processado. O valor predefinido é uma aspa dupla ("). Se os seus dados não contiverem secções entre aspas, defina o valor da propriedade como uma string vazia. Se os seus dados contiverem carateres de nova linha entre aspas, também tem de definir a propriedade allowQuotedNewlines como true. Para incluir o caráter de aspas específico num valor entre aspas, preceda-o com um caráter de aspas correspondente adicional. Por exemplo, se quiser interpretar de forma literal o caráter predefinido ' " ', use ' "" '.
Codificação Nenhum -E ou --encoding encoding (Java, Python) (Opcional) A codificação de carateres dos dados. Os valores suportados são: UTF-8, ISO-8859-1, UTF-16BE, UTF-16LE, UTF-32BE ou UTF-32LE. O valor predefinido é UTF-8. O BigQuery descodifica os dados depois de os dados binários não processados terem sido divididos através dos valores das propriedades quote e fieldDelimiter.
Caráter de controlo ASCII Nenhum --preserve_ascii_control_characters Nenhum (Opcional) Se quiser permitir o ASCII 0 e outros carateres de controlo ASCII, defina --preserve_ascii_control_characters como true nas tarefas de carregamento.
Marcadores nulos Marcadores nulos --null_markers Nenhum (Pré-visualização) (Opcional) Uma lista de strings personalizadas que representa um valor NULL nos dados CSV. Não é possível usar esta opção com a opção --null_marker.
Fuso horário Fuso horário --time_zone Nenhum (Pré-visualização) (Opcional) Fuso horário predefinido que vai ser aplicado ao analisar valores de data/hora que não têm um fuso horário específico. Verifique os nomes de fusos horários válidos. Se este valor não estiver presente, os valores de data/hora sem um fuso horário específico são analisados através do fuso horário predefinido UTC.
Formato de data Formato de data --date_format Nenhum (Pré-visualização) (Opcional) Elementos de formato que definem como os valores DATE são formatados nos ficheiros de entrada (por exemplo, MM/DD/YYYY). Se este valor estiver presente, este formato é o único formato DATE compatível. A deteção automática de esquemas também decide o tipo de coluna DATE com base neste formato, em vez do formato existente. Se este valor não estiver presente, o campo DATE é analisado com os formatos predefinidos.
Formato de data/hora Formato de data/hora --datetime_format Nenhum (Pré-visualização) (Opcional) Elementos de formato que definem como os valores DATETIME são formatados nos ficheiros de entrada (por exemplo, MM/DD/YYYY HH24:MI:SS.FF3). Se este valor estiver presente, este formato é o único formato DATETIME compatível. A deteção automática do esquema também decide o tipo de coluna DATETIME com base neste formato em vez do formato existente. Se este valor não estiver presente, o campo DATETIME é analisado com os formatos predefinidos.
Formato de hora Formato de hora --time_format Nenhum (Pré-visualização) (Opcional) Elementos de formato que definem como os valores TIME são formatados nos ficheiros de entrada (por exemplo, HH24:MI:SS.FF3). Se este valor estiver presente, este formato é o único formato TIME compatível. A deteção automática do esquema também decide o tipo de coluna TIME com base neste formato, em vez do formato existente. Se este valor não estiver presente, o campo TIME é analisado com os formatos predefinidos.
Formato de data/hora Formato de data/hora --timestamp_format Nenhum (Pré-visualização) (Opcional) Elementos de formato que definem como os valores TIMESTAMP são formatados nos ficheiros de entrada (por exemplo, MM/DD/YYYY HH24:MI:SS.FF3). Se este valor estiver presente, este formato é o único formato TIMESTAMP compatível. A deteção automática do esquema também decide o tipo de coluna TIMESTAMP com base neste formato, em vez do formato existente. Se este valor não estiver presente, o campo TIMESTAMP é analisado com os formatos predefinidos.