Carregar dados em lote
Pode carregar dados para o BigQuery a partir do Cloud Storage ou de um ficheiro local como uma operação em lote. Os dados de origem podem estar em qualquer um dos seguintes formatos:
- Avro
- Valores separados por vírgulas (.csv)
- JSON (delimitado por newline)
- ORC
- Parquet
- Exportações do Datastore armazenadas no Cloud Storage
- Exportações do Firestore armazenadas no Cloud Storage
Também pode usar o Serviço de transferência de dados do BigQuery para configurar carregamentos recorrentes do Cloud Storage para o BigQuery.
Experimente
Se está a usar o Google Cloud pela primeira vez, crie uma conta para avaliar o desempenho do BigQuery em cenários reais. Os novos clientes também recebem 300 USD em créditos gratuitos para executar, testar e implementar cargas de trabalho.
Experimentar o BigQuery gratuitamenteAntes 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çãobigquery.jobs.create
)bigquery.user
(inclui a autorizaçãobigquery.jobs.create
)bigquery.jobUser
(inclui a autorizaçãobigquery.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.
Carregar dados do Cloud Storage
O BigQuery suporta o carregamento de dados a partir de qualquer uma das seguintes classes de armazenamento do Cloud Storage:
- Standard
- Nearline
- Coldline
- Arquivar
Para saber como carregar dados para o BigQuery, consulte a página relativa ao seu formato de dados:
Para saber como configurar um carregamento recorrente do Cloud Storage para o BigQuery, consulte o artigo Transferências do Cloud Storage.
Considerações sobre a localização
Não é possível alterar a localização de um conjunto de dados após a respetiva criação, mas pode fazer uma cópia do conjunto de dados ou movê-lo manualmente. Para mais informações, consulte:
Obter o URI do Cloud Storage
Para carregar dados a partir de uma origem de dados do Cloud Storage, tem de fornecer o URI do Cloud Storage.
O caminho de recurso do Cloud Storage contém o nome do contentor e o
objeto (nome do ficheiro). Por exemplo, se o contentor do Cloud Storage se chamar
mybucket
e o ficheiro de dados se chamar myfile.csv
, o caminho do recurso seria
gs://mybucket/myfile.csv
.
O BigQuery não suporta caminhos de recursos do Cloud Storage que incluam várias barras invertidas consecutivas após a barra invertida dupla inicial.
Os nomes de objetos do Cloud Storage podem conter vários carateres de barra (/) consecutivos. No entanto, o BigQuery converte várias barras invertidas consecutivas numa única barra invertida. Por exemplo, o seguinte caminho do recurso, embora seja válido no Cloud Storage, não funciona no BigQuery: gs://bucket/my//object//name
.
Para obter o caminho do recurso do Cloud Storage:
Abra a consola do Cloud Storage.
Procure a localização do objeto (ficheiro) que contém os dados de origem.
Clique no nome do objeto.
É apresentada a página Detalhes do objeto.
Copie o valor fornecido no campo URI gsutil, que começa com
gs://
.
Para exportações do Google Datastore, só é possível especificar um URI e este tem de terminar com .backup_info
ou .export_metadata
.
Suporte de carateres universais para URIs do Cloud Storage
Se os seus dados estiverem separados em vários ficheiros, pode usar um caráter universal asterisco (*) para selecionar vários ficheiros. A utilização do caráter universal asterisco tem de seguir estas regras:
- O asterisco pode aparecer no nome do objeto ou no final do nome do objeto.
- A utilização de vários asteriscos não é suportada. Por exemplo, o caminho
gs://mybucket/fed-*/temp/*.csv
é inválido. - A utilização de um asterisco com o nome do contentor não é suportada.
Exemplos:
O exemplo seguinte mostra como selecionar todos os ficheiros em todas as pastas que começam com o prefixo
gs://mybucket/fed-samples/fed-sample
:gs://mybucket/fed-samples/fed-sample*
O exemplo seguinte mostra como selecionar apenas ficheiros com a extensão
.csv
na pasta com o nomefed-samples
e quaisquer subpastas defed-samples
:gs://mybucket/fed-samples/*.csv
O exemplo seguinte mostra como selecionar ficheiros com um padrão de nomenclatura de
fed-sample*.csv
na pasta denominadafed-samples
. Este exemplo não seleciona ficheiros em subpastas defed-samples
.gs://mybucket/fed-samples/fed-sample*.csv
Quando usar a ferramenta de linhas de comando bq, pode ter de usar o caráter de escape no asterisco em algumas plataformas.
Não pode usar um caráter universal asterisco quando carrega dados de exportação do Datastore ou do Firestore a partir do Cloud Storage.
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.
Consoante o formato dos dados de origem do Cloud Storage, podem existir limitações adicionais. Para mais informações, consulte:
- Limitações do CSV
- Limitações de JSON
- Limitações da exportação do Datastore
- Limitações da exportação do Firestore
- Limitações nos dados aninhados e repetidos
Carregar dados de ficheiros locais
Pode carregar dados a partir de uma origem de dados legível (como o seu computador local) através de uma das seguintes opções:
- A Google Cloud consola
- O comando
bq load
da ferramenta de linhas de comando bq - A API
- As bibliotecas cliente
Quando carrega dados através da Google Cloud consola ou da ferramenta de linha de comandos bq, é criado automaticamente um trabalho de carregamento.
Para carregar dados de uma origem de dados local:
Consola
Abra a página do BigQuery na Google Cloud consola.
No painel Explorador, expanda o projeto e selecione um conjunto de dados.
Expanda a opção
Ações e clique em Abrir.No painel de detalhes, clique em Criar tabela
.Na página Criar tabela, na secção Origem:
- Em Criar tabela a partir de, selecione Carregar.
- Em Selecionar ficheiro, clique em Procurar.
- Procure o ficheiro e clique em Abrir. Tenha em atenção que os carateres universais e as listas separadas por vírgulas não são suportados para ficheiros locais.
- Em Formato de ficheiro, selecione CSV, JSON (delimitado por newline), Avro, Parquet ou ORC.
Na página Criar tabela, na secção Destino:
- Para Projeto, escolha o projeto adequado.
- Para Conjunto de dados, escolha o conjunto de dados adequado.
- No campo Tabela, introduza o nome da tabela que está a criar no BigQuery.
- Verifique se o Tipo de tabela está definido como Tabela nativa.
Na secção Esquema, introduza a definição do esquema.
Para ficheiros CSV e JSON, pode selecionar a opção Deteção automática para ativar a deteção automática do esquema. As informações do esquema são autodescritas nos dados de origem para outros tipos de ficheiros suportados.
Também pode introduzir informações de esquema manualmente:
Clicando em Editar como texto e introduzindo o esquema de tabela como uma matriz JSON:
Usando a opção Adicionar campo para introduzir manualmente o esquema.
Selecione os itens aplicáveis na secção Opções avançadas. Para informações sobre as opções disponíveis, consulte as opções de CSV e as opções de JSON.
Opcional: em Opções avançadas, escolha a disposição de gravação:
- Escrever se estiver vazio: escreva os dados apenas se a tabela estiver vazia.
- Anexar à tabela: anexe os dados ao final da tabela. Esta é a predefinição.
- Substituir tabela: apague todos os dados existentes na tabela antes de escrever os novos dados.
Clique em Criar tabela.
bq
Use o comando bq load
, especifique o source_format
e inclua o caminho
para o ficheiro local.
(Opcional) Forneça a flag --location
e defina o valor para a sua
localização.
Se estiver a carregar dados num projeto diferente do projeto predefinido, adicione o ID do projeto ao conjunto de dados no seguinte formato:
PROJECT_ID:DATASET
.
bq --location=LOCATION load \ --source_format=FORMAT \ PROJECT_ID:DATASET.TABLE \ PATH_TO_SOURCE \ SCHEMA
Substitua o seguinte:
LOCATION
: a sua localização. A flag--location
é opcional. Por exemplo, se estiver a usar o BigQuery na região de Tóquio, defina o valor da flag comoasia-northeast1
. Pode definir um valor predefinido para a localização através do ficheiro.bigqueryrc.FORMAT
:CSV
,AVRO
,PARQUET
,ORC
ouNEWLINE_DELIMITED_JSON
.project_id
: o ID do seu projeto.dataset
: um conjunto de dados existente.table
: o nome da tabela para a qual está a carregar dados.path_to_source
: o caminho para o ficheiro local.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.
Além disso, pode adicionar flags para opções que lhe permitem controlar a forma como o BigQuery analisa os seus dados. Por exemplo, pode usar a flag --skip_leading_rows
para ignorar as linhas de cabeçalho num ficheiro CSV. Para mais
informações, consulte as opções de CSV
e as opções de JSON.
Exemplos:
O comando seguinte carrega um ficheiro JSON delimitado por newline local (mydata.json
) numa tabela denominada mytable
em mydataset
no seu projeto predefinido. O esquema está definido num ficheiro de esquema local denominado myschema.json
.
bq load \
--source_format=NEWLINE_DELIMITED_JSON \
mydataset.mytable \
./mydata.json \
./myschema.json
O comando seguinte carrega um ficheiro CSV local (mydata.csv
) numa tabela com o nome mytable
em mydataset
em myotherproject
. O esquema está definido
inline no formato
FIELD:DATA_TYPE, FIELD:DATA_TYPE
.
bq load \
--source_format=CSV \
myotherproject:mydataset.mytable \
./mydata.csv \
qtr:STRING,sales:FLOAT,year:STRING
RECORD
O comando seguinte carrega um ficheiro CSV local (mydata.csv
) numa tabela com o nome mytable
em mydataset
no seu projeto predefinido. O esquema é
definido através da deteção automática de esquemas.
bq load \
--autodetect \
--source_format=CSV \
mydataset.mytable \
./mydata.csv
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.
O código seguinte demonstra como carregar um ficheiro CSV local para uma nova tabela do BigQuery. Para carregar um ficheiro local de outro formato, use a classe de opções de atualização para o formato adequado da classe base JobCreationOptions em vez deUploadCsvOptions
.
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.
O código seguinte demonstra como carregar um ficheiro CSV local para uma nova tabela do BigQuery. Para carregar um ficheiro local de outro formato, defina a propriedade DataFormat doNewReaderSource
para o formato adequado.
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.
O código seguinte demonstra como carregar um ficheiro CSV local para uma nova tabela do BigQuery. Para carregar um ficheiro local de outro formato, defina as FormatOptions para o formato adequado.
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.
O código seguinte demonstra como carregar um ficheiro CSV local para uma nova tabela do BigQuery. Para carregar um ficheiro local de outro formato, defina o parâmetrometadata
da função
load
para o formato adequado.
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.
O código seguinte demonstra como carregar um ficheiro CSV local para uma nova tabela do BigQuery. Para carregar um ficheiro local de outro formato, defina o sourceFormat para o formato adequado.
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.
O código seguinte demonstra como carregar um ficheiro CSV local para uma nova tabela do BigQuery. Para carregar um ficheiro local de outro formato, defina a propriedade LoadJobConfig.source_format para o formato adequado.
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.
O código seguinte demonstra como carregar um ficheiro CSV local para uma nova tabela do BigQuery. Para carregar um ficheiro local de outro formato, defina o parâmetroformat
do método
Table#load_job
para o formato adequado.
Limitações
O carregamento de dados a partir de uma origem de dados local está sujeito às seguintes limitações:
- Os carateres universais e as listas separadas por vírgulas não são suportados quando carrega ficheiros a partir de uma origem de dados local. Os ficheiros têm de ser carregados individualmente.
- Quando usa a Google Cloud consola, os ficheiros carregados a partir de uma origem de dados local não podem exceder 100 MB. Para ficheiros maiores, carregue o ficheiro a partir do Cloud Storage.
Carregue a capacidade de trabalho
Semelhante ao modo a pedido para consultas, as tarefas de carregamento usam por predefinição um conjunto partilhado de intervalos. O BigQuery não garante a capacidade disponível deste conjunto partilhado nem a taxa de transferência de tarefas de carregamento.
Para aumentar a taxa de transferência ou controlar previsivelmente a capacidade das suas tarefas de carregamento,
pode criar uma reserva de slots
e atribuir slots PIPELINE
dedicados para executar tarefas de carregamento. Para mais informações, consulte o artigo
Atribuições de reservas.
Carregar dados comprimidos e não comprimidos
Para os formatos Avro, Parquet e ORC, o BigQuery suporta
o carregamento de ficheiros cujos dados foram comprimidos através de um
códec suportado. No entanto, o BigQuery não suporta o carregamento de ficheiros
nestes formatos que foram comprimidos, por exemplo, através da
utilidade gzip
.
O formato binário Avro é o formato preferencial para carregar dados comprimidos e não comprimidos. Os dados Avro são mais rápidos de carregar porque podem ser lidos em paralelo, mesmo quando os blocos de dados estão comprimidos. Para ver uma lista dos codecs de compressão suportados, consulte o artigo Compressão Avro.
O formato binário Parquet também é uma boa escolha porque a codificação eficiente por coluna do Parquet resulta normalmente numa melhor taxa de compressão e em ficheiros mais pequenos. Os ficheiros Parquet também tiram partido de técnicas de compressão que permitem que os ficheiros sejam carregados em paralelo. Para ver uma lista dos codecs de compressão suportados, consulte o artigo Compressão Parquet.
O formato binário ORC oferece vantagens semelhantes às do formato Parquet. Os dados em ficheiros ORC são carregados rapidamente porque as faixas de dados podem ser lidas em paralelo. As linhas em cada faixa de dados são carregadas sequencialmente. Para otimizar o tempo de carregamento, use um tamanho de faixa de dados de aproximadamente 256 MB ou menos. Para ver uma lista dos codecs de compressão suportados, consulte o artigo Compressão ORC.
Para outros formatos de dados, como CSV e JSON, o BigQuery pode carregar ficheiros não comprimidos significativamente mais rápido do que ficheiros comprimidos, porque os ficheiros não comprimidos podem ser lidos em paralelo. Uma vez que os ficheiros não comprimidos são maiores, a sua utilização pode originar limitações de largura de banda e custos do Cloud Storage mais elevados para os dados preparados no Cloud Storage antes de serem carregados no BigQuery. Tenha em atenção que a ordem das linhas não é garantida para ficheiros comprimidos ou não comprimidos. É importante ponderar estas compromissos consoante o seu exemplo de utilização.
Em geral, se a largura de banda for limitada, comprima os ficheiros CSV e JSON usando o
gzip
antes de os carregar para o Cloud Storage. gzip
é o único tipo de compressão de ficheiros suportado para ficheiros CSV e JSON ao carregar dados para o BigQuery. Se a velocidade de carregamento for importante para a sua app e tiver muita largura de banda para carregar os dados, deixe os ficheiros não comprimidos.
Anexar ou substituir uma tabela
Pode carregar dados adicionais para uma tabela a partir de ficheiros de origem ou acrescentando resultados de consultas. Se o esquema dos dados não corresponder ao esquema da tabela de destino ou da partição, pode atualizar o esquema quando o acrescenta ou substitui.
Se atualizar o esquema ao acrescentar dados, o BigQuery permite-lhe:
- Adicione novos campos
- Relaxe os campos
REQUIRED
paraNULLABLE
Se estiver a substituir uma tabela, o esquema é sempre substituído. As atualizações do esquema não estão restritas quando substitui uma tabela.
Na Google 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. A ferramenta de linhas de comando bq e a API incluem as seguintes opções:
Opção da consola | Sinalização da ferramenta bq | Propriedade da API BigQuery | Descrição |
---|---|---|---|
Escrever se estiver vazio | Nenhum | WRITE_EMPTY | Escreve os dados apenas se a tabela estiver vazia. |
Anexar à tabela | --noreplace ou --replace=false ; se
--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. |
Política de quotas
Para aceder a informações sobre a política de quotas para o carregamento em lote de dados, consulte a secção Tarefas de carregamento na página Quotas e limites.
Veja a utilização atual da quota
Pode ver a sua utilização atual de tarefas de consulta, carregamento, extração ou cópia executando uma consulta INFORMATION_SCHEMA
para ver metadados sobre as tarefas executadas durante um período especificado. Pode comparar a sua utilização atual com o limite da quota para determinar a utilização da quota para um tipo específico de tarefa. A seguinte consulta de exemplo usa a vista INFORMATION_SCHEMA.JOBS
para listar o número de tarefas de consulta, carregamento, extração e cópia por projeto:
SELECT sum(case when job_type="QUERY" then 1 else 0 end) as QRY_CNT, sum(case when job_type="LOAD" then 1 else 0 end) as LOAD_CNT, sum(case when job_type="EXTRACT" then 1 else 0 end) as EXT_CNT, sum(case when job_type="COPY" then 1 else 0 end) as CPY_CNT FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS_BY_PROJECT WHERE date(creation_time)= CURRENT_DATE()
Preços
Não existe qualquer custo para o carregamento em lote de dados no BigQuery através do conjunto de slots partilhado. Para mais informações, consulte os preços de carregamento de dados do BigQuery.
Exemplo de utilização
Suponhamos que existe um pipeline de processamento em lote noturno que tem de ser concluído até um prazo fixo. Os dados têm de estar disponíveis até este prazo para processamento adicional por outro processo em lote para gerar relatórios a enviar a um regulador. Este exemplo de utilização é comum em setores regulamentados, como o financeiro.
O carregamento em lote de dados com tarefas de carregamento é a abordagem certa para este exemplo de utilização porque a latência não é um problema desde que seja possível cumprir o prazo. Certifique-se de que os contentores do Cloud Storage cumprem os requisitos de localização para carregar dados no conjunto de dados do BigQuery.
O resultado de uma tarefa de carregamento do BigQuery é atómico. Todos os registos são inseridos ou nenhum é. Como prática recomendada, quando inserir todos os dados numa única tarefa de carregamento, crie uma nova tabela usando a disposição WRITE_TRUNCATE
do recurso JobConfigurationLoad
.
Isto é importante quando tenta novamente uma tarefa de carregamento com falhas, uma vez que o cliente pode não conseguir distinguir entre tarefas que falharam e a falha causada, por exemplo, na comunicação do estado de êxito ao cliente.
Partindo do princípio de que os dados a carregar já foram copiados com êxito para o Cloud Storage, a repetição com recuo exponencial é suficiente para resolver falhas de carregamento.
Recomendamos que uma tarefa em lote noturna não atinja a quota predefinida de 1500 carregamentos por tabela por dia,mesmo com novas tentativas. Quando carrega dados incrementalmente, a quota predefinida é suficiente para executar uma tarefa de carregamento a cada 5 minutos e ter uma quota não consumida para, pelo menos, 1 nova tentativa por tarefa, em média.