Como carregar dados particionados externamente

O BigQuery pode carregar dados armazenados no Cloud Storage usando um layout de particionamento do Hive. Particionamento do Hive significa que os dados externos são organizados em vários arquivos, com uma convenção de nomenclatura para separar arquivos em diferentes partições. Para mais informações, consulte Layouts de dados compatíveis nesta página.

Limitações

  • A compatibilidade com o particionamento do Hive é baseada na atribuição a todos os URIs de um prefixo de URI de origem comum que termina imediatamente antes da codificação da partição, que tem este formato: gs://<bucket>/<path_to_table>/.
  • Na estrutura de diretório de uma tabela particionada do Hive, as mesmas chaves de particionamento aparecem na mesma ordem com até 10 chaves de partição por tabela.
  • Os dados precisam estar em conformidade com um layout padrão de particionamento do Hive.
  • As chaves de particionamento do Hive e as colunas nos arquivos subjacentes não podem se sobrepor.
  • Todas as limitações de carregamento pelo Cloud Storage são aplicáveis.

Layouts de dados compatíveis

Os dados precisam estar em conformidade com um layout padrão de particionamento do Hive. Por exemplo, os arquivos a seguir seguem o layout padrão, com os pares de chave-valor apresentados como diretórios com um sinal = como separador, e as chaves de partição estão sempre na mesma ordem.

gs://bucket/table/dt=2019-10-31/lang=en/foo
gs://bucket/table/dt=2018-10-31/lang=fr/bar

O prefixo de URI de origem comum neste exemplo é gs://bucket/table.

Layouts de dados incompatíveis

Se os nomes das chaves de partição não forem codificados no caminho do diretório, a detecção do esquema de partição falhará. Observe o caminho a seguir, por exemplo, que não codifica os nomes da chave de partição:

gs://bucket/table/2019-10-31/en/foo

A detecção também falha nos arquivos em que o esquema não segue uma ordem consistente. Por exemplo, observe os dois arquivos a seguir com codificações de chaves de partição invertidas:

gs://bucket/table/dt=2019-10-31/lang=en/foo
gs://bucket/table/lang=fr/dt=2018-10-31/bar

Modos de detecção de esquemas de partição

As chaves de partição do Hive são exibidas como colunas normais ao carregar dados do Cloud Storage. Três modos de detecção de esquemas de partição do Hive são compatíveis:

  • AUTO: os nomes e tipos de chave são detectados automaticamente. É possível detectar estes tipos: STRING, INTEGER, DATE e TIMESTAMP.
  • STRINGS: os nomes de chaves são inferidos automaticamente com o tipo STRING.
  • CUSTOM: o esquema da chave de partição é codificado no prefixo do URI de origem.

Como fornecer um esquema de chave de partição CUSTOM

A detecção CUSTOM exige a codificação do esquema no campo do prefixo de URI de origem ao fornecer pares de nome/tipo de chave de partição. Os valores precisam ser analisados como o tipo especificado, caso contrário o carregamento falhará.

Por exemplo: ao definir "source_uri_prefix" como: gs://my_bucket/my_table/{dt:DATE}/{val:STRING}, val é processado como STRING e dt como DATE, e gs://my_bucket/my_table é extraído como o prefixo do URI de origem para os arquivos correspondentes.

Consulte as instruções detalhadas sobre o Console do Google Cloud, a ferramenta de linha de comando bq e a API REST.

Como executar cargas incrementais

Considere o layout de dados a seguir:

gs://my_bucket/my_table/dt=2019-10-31/val=1/file1
gs://my_bucket/my_table/dt=2018-10-31/val=2/file2
gs://my_bucket/my_table/dt=2017-10-31/val=3/file3
gs://my_bucket/my_table/dt=2016-10-31/val=4/file4

Para carregar somente os dados de 31/10/2019, faça o seguinte:

  • Defina o modo de particionamento do Hive como AUTO, STRINGS ou CUSTOM.
  • Defina o prefixo de URI de origem como gs://my_bucket/my_table/ para os modos de particionamento do Hive AUTO ou STRINGS. Para CUSTOM, forneça gs://my_bucket/my_table/{dt:DATE}/{val:INTEGER}.
  • Use o URI gs://my_bucket/my_table/dt=2019-10-31/*.
  • Os dados são carregados com as colunas dt e val incluídas, respectivamente com os valores 2019-10-31 e 1.

Para carregar apenas dados de arquivos específicos, faça o seguinte:

  • Defina o modo de particionamento do Hive como AUTO, STRINGS ou CUSTOM.
  • Defina o prefixo de URI de origem como gs://my_bucket/my_table/ para os modos de particionamento do Hive AUTO ou STRINGS. Para CUSTOM, forneça gs://my_bucket/my_table/{dt:DATE}/{val:INTEGER}.
  • Use os URIs gs://my_bucket/my_table/dt=2017-10-31/val=3/file3,gs://my_bucket/my_table/dt=2016-10-31/val=4/file4.
  • Os dados são carregados dos dois arquivos com as colunas dt e val preenchidas.

Como carregar dados de particionamento do Hive usando o Console do Cloud

Para carregar os dados de particionamento do Hive no Console do Cloud, siga estas etapas:

  1. No Console do Cloud, acesse a página do BigQuery.

    Ir para o BigQuery

  2. No painel Explorer, expanda o projeto e selecione um conjunto de dados.

  3. Clique em Ver ações > Abrir.

  4. No painel de detalhes, clique em Criar tabela.

  5. Na lista suspensa Criar tabela de, selecione Google Cloud Storage.

  6. Defina as seguintes opções:

    • No campo Selecionar arquivo do bucket do GCS, insira o caminho do conjunto de dados e selecione o tipo de arquivo na lista suspensa.
    • Marque a caixa Particionamento de dados de origem e, então, insira o Prefixo do URI de origem.
    • Na seção Modo de inferência de partição, selecione Inferir tipos automaticamente para AUTO ou Todas as colunas são strings para STRINGS.
    • Na lista suspensa Tipo de tabela, selecione Tabela nativa.
    • No campo Nome da tabela, especifique um nome.
  7. Clique em Criar tabela.

Como carregar dados de particionamento do Hive usando a ferramenta de linha de comando bq

Como solicitar a detecção automática de tipo de chave de particionamento

bq load --source_format=ORC --hive_partitioning_mode=AUTO \
--hive_partitioning_source_uri_prefix=gcs_uri_shared_prefix \
dataset.table gcs_uris

Para solicitar a detecção da chave de partição tipo STRING:

bq load --source_format=PARQUET --autodetect \
--hive_partitioning_mode=STRINGS \
--hive_partitioning_source_uri_prefix=gcs_uri_shared_prefix \
dataset.table gcs_uris

Para fornecer um esquema personalizado de chave de partição codificado via campo "source_uri_prefix"

bq load --source_format=JSON --hive_partitioning_mode=CUSTOM \
--hive_partitioning_source_uri_prefix=gcs_uri_shared_prefix/custom_schema_encoding \
dataset.table gcs_uris file_schema

O esquema da chave de partição é codificado imediatamente após o prefixo de URI de origem. Use o seguinte formato para especificar --hive_partitioning_source_uri_prefix:

--hive_partitioning_source_uri_prefix=gcs_uri_shared_prefix/{key1:TYPE1}/{key2:TYPE2}/{key3:TYPE3}

Como carregar dados de particionamento do Hive usando a API REST

A compatibilidade do particionamento do Hive é possível ao definir HivePartitioningOptions no ExternalDataConfiguration.

Quando hivePartitioningOptions.mode for definido como CUSTOM, codifique o esquema da chave de partição no campo hivePartitioningOptions.sourceUriPrefix da seguinte maneira: gs://BUCKET/PATH_TO_TABLE/{KEY1:TYPE1}/{KEY2:TYPE2}/...

Para aplicar o uso de um filtro de predicado no momento da consulta, defina o campo hivePartitioningOptions.requirePartitionFilter como true.