Detecção automática de esquema
A detecção automática de esquema está disponível ao carregar dados no BigQuery e ao fazer uma consulta em uma fonte de dados externa.
Quando a detecção automática está ativada, o BigQuery inicia o processo de inferência selecionando um arquivo aleatório na fonte de dados e verificando até 100 linhas de dados para usar como uma amostra representativa. Em seguida, o BigQuery examina cada campo e tenta atribuir a ele um tipo de dados com base nos valores contidos na amostra.
É possível ver o esquema detectado de uma tabela das seguintes maneiras:
- Use o Console do Cloud.
- Use o comando
bq show
da ferramenta da linha de comandobq
.
Quando o BigQuery detecta esquemas, é possível que, em raras ocasiões, ele altere o nome de um campo para torná-lo compatível com a sintaxe SQL pertinente a ele.
Para informações sobre conversões de tipos de dados, consulte:
- Conversão do tipo de dados ao carregar dados do Cloud Datastore
- Conversão do tipo de dados ao carregar dados do Firestore
- Conversões Avro
- Conversões Parquet
- Conversões ORC
Como carregar dados usando a detecção automática de esquema
Para ativar a detecção automática de esquema ao carregar dados, use uma destas abordagens:
- No Console do Cloud, na seção Esquema, em Detecção automática, marque a opção Parâmetros de esquema e entrada.
- Na ferramenta de linha de comando
bq
, use o comandobq load
com o parâmetro--autodetect
.
Quando a detecção automática de esquema estiver ativada, o BigQuery tentará inferir automaticamente o esquema dos arquivos CSV e JSON.
A detecção automática de esquema não é usada com arquivos Avro, Parquet e ORC ou arquivos de exportação do Firestore e do Datastore. Ao carregar esses arquivos no BigQuery, o esquema da tabela é recuperado automaticamente a partir dos dados de origem autodescritivos.
Para usar a detecção automática de esquema ao carregar dados JSON ou CSV:
Console
No Console do Cloud, acesse a página do BigQuery.
No painel Explorer, expanda o projeto e selecione um conjunto de dados.
No painel de detalhes, clique em Criar tabela.
Na página Criar tabela, na seção Origem:
- Em Criar tabela de, selecione o tipo de fonte.
No campo de origem, procure o intervalo Arquivo/Armazenamento em nuvem ou insira o URI do Cloud Storage. Não é possível incluir vários URIs no Console do Cloud, mas os caracteres curinga são compatíveis. O intervalo do Cloud Storage precisa estar no mesmo local que o conjunto de dados que contém a tabela que você está criando.
Em Formato do arquivo, selecione CSV ou JSON.
Na página Criar tabela, na seção Destino:
Em Nome do conjunto de dados, escolha o conjunto apropriado.
No campo Nome da tabela, insira o nome da tabela que você está criando.
Verifique se Tipo de tabela está definido como Tabela nativa.
Clique em Criar tabela.
bq
Emita o comando bq load
com o parâmetro --autodetect
.
Opcional: forneça a sinalização --location
e defina o valor do
local.
O seguinte comando carrega um arquivo usando a detecção automática de esquema:
bq --location=LOCATION load \ --autodetect \ --source_format=FORMAT \ DATASET.TABLE \ PATH_TO_SOURCE
Substitua:
LOCATION
: o nome do seu local. A sinalização--location
é opcional. Por exemplo, se você estiver usando o BigQuery na região de Tóquio, defina o valor da sinalização comoasia-northeast1
. É possível definir um valor padrão para o local usando o arquivo .bigqueryrc.FORMAT
:NEWLINE_DELIMITED_JSON
ouCSV
.DATASET
: o conjunto de dados que contém a tabela em que você está carregando dados.TABLE
: o nome da tabela em que você está carregando dados.PATH_TO_SOURCE
: o local do arquivo CSV ou JSON.
Exemplos:
Digite o comando a seguir e carregue myfile.csv
da máquina local
para uma tabela chamada mytable
armazenada em um conjunto de dados chamado
mydataset
.
bq load --autodetect --source_format=CSV mydataset.mytable ./myfile.csv
Digite o comando a seguir e carregue myfile.json
da máquina local
para uma tabela chamada mytable
armazenada em um conjunto de dados chamado
mydataset
.
bq load --autodetect --source_format=NEWLINE_DELIMITED_JSON \
mydataset.mytable ./myfile.json
API
Crie um job
load
que aponte para os dados de origem. Para informações sobre a criação de jobs, consulte Como executar jobs do BigQuery de maneira programática. Especifique seu local na propriedadelocation
na seçãojobReference
.Especifique o formato de dados definindo a propriedade
sourceFormat
. Para usar a detecção automática de esquema, esse valor precisa ser definido comoNEWLINE_DELIMITED_JSON
ouCSV
.Use a propriedade
autodetect
para definir a detecção automática de esquema comotrue
.
Go
Antes de testar essa amostra, siga as instruções de configuração para Go no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Go.
Java
Node.js
Antes de testar essa amostra, siga as instruções de configuração para Node.js no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery Node.js.
PHP
Antes de testar esta amostra, siga as instruções de configuração para PHP no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery PHP.
Python
Para ativar a detecção automática de esquema, defina a propriedade LoadJobConfig.autodetect (em inglês) como True
.
Antes de testar essa amostra, siga as instruções de configuração para Python no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Python.
Ruby
Antes de testar esta amostra, siga as instruções de configuração para Ruby no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de Referência da API BigQuery Ruby.
Detecção automática de esquema para fontes de dados externas
A detecção automática de esquema pode ser usada com fontes de dados externas CSV, JSON e Planilhas. Quando a detecção automática de esquema está ativada, o BigQuery tenta inferir automaticamente o esquema a partir dos dados de origem. Se você não ativar a detecção automática de esquema para essas fontes, será necessário fornecer um esquema explícito.
A detecção automática de esquema não é usada com arquivos externos que são autodescritivos, incluindo os formatos Avro, Parquet e ORC ou arquivos de exportação do Firestore ou do Datastore. Ao criar uma tabela vinculada a um desses tipos de arquivo, o BigQuery recupera o esquema automaticamente dos dados de origem autodescritivos.
Com o Console do Cloud, é possível ativar a detecção automática de esquema marcando a opção Parâmetros de esquema e entrada para Detecção automática.
Com a ferramenta de linha de comando bq
, é possível ativar a detecção automática de esquema ao criar um arquivo de definição de tabela para dados CSV,
JSON ou Planilhas Google. Ao usar a ferramenta bq
para criar um
arquivo de definição de tabela, transmita a sinalização --autodetect
ao comando mkdef
para
ativar a detecção automática de esquema ou a sinalização --noautodetect
para desativar
a detecção automática.
Ao usar a sinalização --autodetect
, a configuração autodetect
é definida como true
na tabela arquivo de definição. Ao usar a sinalização --noautodetect
, a configuração autodetect
é definida como false
. Se você não fornecer uma definição de esquema para a fonte dedados externa ao criar uma definição de tabela e não usar a sinalização --noautodetect
ou --autodetect
, a configuração autodetect
será definida como true
por padrão.
Ao criar um arquivo de definição de tabela usando a API, defina o valor da propriedade autodetect
como true
ou false
. Ao definir autodetect
como true
, a detecção automática será ativada. Se definir autodetect
como false
, ela será desativada.
Detalhes da detecção automática
Além de detectar detalhes do esquema, a detecção automática reconhece:
Compactação
O BigQuery reconhece a compactação de arquivos compatíveis com gzip durante a abertura deles.
Delimitador CSV
O BigQuery detecta os seguintes delimitadores:
- vírgula (,)
- barra vertical (|)
- Tabulação (\t)
Cabeçalho CSV
No BigQuery, os cabeçalhos são inferidos pela comparação da primeira linha do arquivo com outras linhas no conjunto de dados. Se houver apenas strings na primeira linha e nas outras linhas houver outros tipos de dados, o BigQuery presumirá que a primeira linha é de cabeçalho. Nesse caso, o BigQuery atribui nomes de coluna com base nos nomes dos campos da linha do cabeçalho. Os nomes podem ser modificados para atender às regras de nomenclatura de colunas no BigQuery. Por exemplo, os espaços serão substituídos por sublinhados.
Caso contrário, o BigQuery considera que a primeira linha é de dados e
atribui nomes de coluna genéricos, como string_field_1
. Depois que uma tabela
é criada, não é possível atualizar os nomes das colunas no esquema, mas é possível alterá-los manualmente. Outra opção é fornecer um esquema explícito
em vez de usar a detecção automática.
É possível ter um arquivo CSV com uma linha de cabeçalho, em que todos os campos de dados são
strings. Nesse caso, o BigQuery não detectará automaticamente que
a primeira linha é um cabeçalho. Use a opção -skip_leading_rows
para pular a
linha do cabeçalho. Caso contrário, o cabeçalho será importado como dados. Considere também
fornecer um esquema explícito neste caso, para que seja possível atribuir nomes de coluna.
Novas linhas entre aspas em CSV
No BigQuery, os caracteres de nova linha entre aspas dentro de um campo CSV são detectados, mas não são interpretados como limite de linha.
Valores de data e hora
O BigQuery detecta valores de data e hora com base na formatação dos dados de origem.
Os valores nas colunas DATE
precisam estar no seguinte formato: YYYY-MM-DD
Os valores nas colunas TIME
precisam estar no seguinte formato: HH:MM:SS[.SSSSSS]
(o componente fracionado de segundo é opcional).
Para as colunas TIMESTAMP
, o BigQuery detecta uma grande variedade de
formatos de carimbo de data/hora, incluindo, mas não se limitando a:
YYYY-MM-DD HH:MM
YYYY-MM-DD HH:MM:SS
YYYY-MM-DD HH:MM:SS.SSSSSS
YYYY/MM/DD HH:MM
Um carimbo de data/hora também pode conter uma compensação de UTC ou o regulador de fuso horário do UTC ("Z").
Veja alguns exemplos de valores que o BigQuery detecta automaticamente como valores de carimbo de data/hora:
- 2018-08-19 12:11
- 2018-08-19 12:11:35.220
- 2018/08/19 12:11
- 2018-08-19 07:11:35.220 -05:00
Se o BigQuery não reconhecer o formato, ele carregará a coluna como um tipo de dados de string. Nesse caso, talvez seja necessário pré-processar os dados de origem antes de carregá-los. Por exemplo, se você estiver exportando dados CSV de uma planilha, defina o formato de data para corresponder a um dos exemplos mostrados aqui. Como alternativa, transforme os dados depois de carregá-los no BigQuery.
Campos aninhados e repetidos no JSON
No BigQuery, os campos aninhados e repetidos são inferidos em arquivos JSON. Se um
valor de campo for um objeto JSON, o BigQuery carregará a coluna como um
tipo RECORD
. Se um valor de campo for uma matriz, o BigQuery
carregará a coluna como uma coluna repetida. Para um exemplo de dados JSON com dados aninhados e
repetidos, consulte
Como carregar dados JSON aninhados e repetidos.