Como usar a detecção automática de esquema

Detecção automática de esquema

A detecção automática de esquema está disponível no carregamento de dados no BigQuery e nas consultas a 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 um tipo de dados a eles com base nos valores contidos na amostra.

Para ver o esquema detectado para uma tabela:

  • use o comando bq show da ferramenta de linha de comando;
  • use a IU da Web do BigQuery para visualizar o esquema da tabela.

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 do BigQuery.

Para saber mais sobre conversões de tipos de dados, consulte:

Como carregar dados usando a detecção automática de esquema

Para ativar a detecção automática de esquema ao carregar dados, siga estas instruções:

  • Console do GCP: na seção Esquema, para Detecção automática, marque a opção Esquema e parâmetros de entrada.
  • IU da Web do BigQuery: na seção Esquema, marque a opção Detectar automaticamente.
  • CLI: use o comando bq load com o parâmetro --autodetect.

Quando ativado, o BigQuery tenta 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 Cloud Firestore e Cloud Datastore. Quando você carrega 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

  1. Abra a IU da Web do BigQuery no Console do GCP.
    Acessar a IU da Web do BigQuery

  2. Selecione um conjunto de dados na seção Recursos do painel de navegação. Clique em Criar tabela do lado direito da janela.

    Criar tabela

  3. Na página Criar tabela, na seção Origem:

    • Para Criar tabela de, selecione o tipo de fonte desejada.

      Criar origem da tabela

    • No campo de origem, procure o intervalo do Arquivo/Cloud Storage ou insira o URI do Cloud Storage. Não é possível incluir vários URIs na IU da Web do BigQuery, mas há compatibilidade com caracteres curinga. O intervalo do Cloud Storage precisa estar no mesmo local que o conjunto de dados que contém a tabela que você está criando.

      Selecionar arquivo

    • Para o Formato de arquivo, selecione CSV ou JSON.

  4. Na página Criar tabela, na seção Destino:

    • Em Nome do conjunto de dados, escolha o conjunto apropriado.

      Selecionar conjunto de dados

    • No campo Nome da tabela, insira o nome da tabela que você está criando no BigQuery.

    • Verifique se o Tipo de tabela está configurado como Tabela nativa.

  5. Clique em Criar tabela.

IU clássica

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

  2. Clique no ícone de seta para baixo ícone de seta para baixo ao lado do nome do conjunto de dados na barra de navegação e clique em Criar nova tabela.

    Observação: na IU, o processo de carregamento de dados é o mesmo que o de criação de uma tabela.
  3. Na página Criar tabela:

    • Em Dados de origem, clique em Criar a partir da origem.
    • Em Tabela de destino, escolha o conjunto de dados e insira o nome da tabela no campo Nome da tabela de destino.
    • Em Esquema, clique em Detectar automaticamente para determinar o esquema.

      link da detecção automática

    • Clique em Criar tabela.

CLI

Emita o comando bq load com o parâmetro --autodetect. Forneça a sinalização --location e defina o valor do local.

O comando a seguir carrega um arquivo usando a detecção automática de esquema:

bq --location=[LOCATION] load --autodetect --source_format=[FORMAT] [DATASET].[TABLE] [PATH_TO_SOURCE]

Em que:

  • [LOCATION] é o nome do 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 como asia-northeast1. É possível definir um valor padrão para o local usando o arquivo .bigqueryrc;
  • [FORMAT] é NEWLINE_DELIMITED_JSON ou CSV;
  • [DATASET] é o conjunto de dados que contém a tabela em que os dados serão carregados;
  • [TABLE] é o nome da tabela em que os dados serão carregados;
  • [PATH_TO_SOURCE] é o local do arquivo CSV ou JSON.

Exemplos:

Digite o comando a seguir para carregar myfile.csv de sua máquina local para uma tabela chamada mytable que é armazenada em um conjunto de dados chamado mydataset. mydataset foi criado no local multirregional US.

bq --location=US load --autodetect --source_format=CSV mydataset.mytable ./myfile.csv

Digite o comando a seguir para carregar myfile.csv da sua máquina local para uma tabela chamada mytable que é armazenada em um conjunto de dados chamado mydataset. mydataset foi criado na região asia-northeast1.

bq --location=asia-northeast1 load --autodetect --source_format=CSV mydataset.mytable ./myfile.csv

API

  1. Crie um job de carga que aponte para os dados de origem. Para saber como criar jobs, consulte Como executar jobs do BigQuery programaticamente. Especifique o local na propriedade location na seção jobReference.

  2. Defina a propriedade sourceFormat para especificar o formato de dados. Para usar a autodetecção de esquema, esse valor precisa ser definido como NEWLINE_DELIMITED_JSON ou CSV.

  3. Defina a detecção automática do esquema como true usando a propriedade autodetect.

Go

Antes de testar esta amostra, siga as instruções de configuração do Go no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do BigQuery para Go.

// To run this sample, you will need to create (or reuse) a context and
// an instance of the bigquery client.  For example:
// import "cloud.google.com/go/bigquery"
// ctx := context.Background()
// client, err := bigquery.NewClient(ctx, "your-project-id")
gcsRef := bigquery.NewGCSReference("gs://cloud-samples-data/bigquery/us-states/us-states.json")
gcsRef.SourceFormat = bigquery.JSON
gcsRef.AutoDetect = true
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())
}

Python

Antes de testar esta amostra, siga as instruções de configuração do Python em Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para ver mais informações, consulte a documentação de referência da API BigQuery para Python.

Para ativar a detecção automática de esquema, defina a propriedade LoadJobConfig.autodetect como True.

# from google.cloud import bigquery
# client = bigquery.Client()
# dataset_id = 'my_dataset'

dataset_ref = client.dataset(dataset_id)
job_config = bigquery.LoadJobConfig()
job_config.autodetect = True
job_config.source_format = bigquery.SourceFormat.NEWLINE_DELIMITED_JSON
uri = "gs://cloud-samples-data/bigquery/us-states/us-states.json"
load_job = client.load_table_from_uri(
    uri, dataset_ref.table("us_states"), job_config=job_config
)  # API request
print("Starting job {}".format(load_job.job_id))

load_job.result()  # Waits for table load to complete.
print("Job finished.")

destination_table = client.get_table(dataset_ref.table("us_states"))
print("Loaded {} rows.".format(destination_table.num_rows))

Detecção automática de esquema para fontes de dados externas

Para ativar a detecção automática de esquema quando você cria uma tabela vinculada a uma fonte de dados externa:

  • No Console do GCP, para detecção automática, marque a opção Esquema e parâmetros de entrada.
  • Na IU da Web clássica do BigQuery, marque a opção Detectar automaticamente.

Quando ativada, o BigQuery faz uma tentativa de inferir automaticamente o esquema para origens de dados externas CSV e JSON.

Atualmente, não é possível ativar a detecção automática de esquemas para fontes de dados externas do Planilhas Google usando o Console do GCP ou a IU da Web clássica. Além disso, a detecção automática de esquema não é usada com arquivos Avro, arquivos de exportação do Cloud Firestore ou arquivos de exportação do Cloud Datastore. Quando você cria uma tabela vinculada a um desses tipos de arquivo, o BigQuery recupera automaticamente o esquema a partir dos dados de origem autodescritivos.

Com a CLI, é 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 CLI para criar um arquivo de definição de tabela, é possível passar a sinalização --autodetect para o comando mkdef para ativar a detecção automática de esquema ou passar a sinalização --noautodetect para desativar a detecção automática.

Quando você usa a sinalização --autodetect, a configuração de autodetect é definida como true no arquivo de definição de tabela. Quando você usa a sinalização --noautodetect, a configuração "autodetect" é definida como false. Se você não fornecer uma definição de esquema para a fonte de dados externa ao criar uma definição de tabela e não usar a sinalização --noautodetect nem --autodetect, a configuração "autodetect" assumirá true como padrão.

Ao criar um arquivo de definição de tabela usando a API, defina o valor da propriedade autodetect como true ou false. Definir autodetect para true ativa a detecção automática. Definir autodetect para false desativa-a.

Detalhes da detecção automática

Além de detectar detalhes do esquema, a detecção automática reconhece o seguinte:

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 não, presume-se que a primeira linha seja de cabeçalho.

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.

Datas

Para usar a detecção de esquema em dados JSON ou CSV, os valores nas colunas DATE precisam estar separados por um traço (-) e estar no seguinte formato: YYYY-MM-DD (ano-mês-dia).

Carimbos de data/hora

No BigQuery, são detectados vários formatos de carimbo de data/hora, inclusive estes:

  • yyyy-mm-dd
  • yyyy-mm-dd hh:mm:ss
  • yyyy-mm-dd hh:mm:ss.mmm

Um carimbo de data/hora também pode conter uma compensação de UTC e o regulador de fuso horário do UTC: Z. Carimbos com base em um número inteiro também são compatíveis.

Para usar a detecção de esquema em dados JSON ou CSV, os valores nas colunas TIMESTAMP precisam estar separados por um traço (-) no carimbo de data/hora e estar no seguinte formato: YYYY-MM-DD (ano-mês-dia). A porção hh:mm:ss (hora-minuto-segundo) do carimbo de data/hora precisa utilizar o separador dois pontos (:).

Exemplos de carimbo de data/hora

Veja a seguir exemplos de formatos de carimbo de data/hora detectados automaticamente pelo BigQuery:

  • 253402300799
  • 2018-07-05 12:54:00 UTC
  • 2018-08-19 07:11:35.220 -05:00
  • 2018-08-19 12:11:35.220 UTC
  • 2018-08-19T12:11:35.220Z
  • 2.53402300799e11
  • 2018-08-19 12:11:35.220000
  • 2018-08-19 12:11:35.220
Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Precisa de ajuda? Acesse nossa página de suporte.