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.

Por padrão, os dados não são particionados no BigQuery depois que você os carrega, a menos que você crie explicitamente uma tabela particionada.

Carregar dados particionados no Hive

Para carregar dados particionados no Hive, escolha uma das seguintes opções:

Console

  1. No console do Google Cloud, acesse o BigQuery.

    Acessar o BigQuery

  2. No painel Explorer, expanda o projeto e selecione um conjunto de dados.
  3. Clique em Acessar ações e depois em Criar tabela. O painel Criar tabela será aberto.
  4. Na seção Origem, especifique os seguintes campos:
    1. Em Criar tabela de, selecione Google Cloud Storage.
    2. Em Selecionar arquivo do bucket do Cloud Storage, insira o caminho para a pasta do Cloud Storage usando caracteres curinga. Por exemplo, my_bucket/my_files*. O bucket do Cloud Storage precisa estar no mesmo local que o conjunto de dados que contém a tabela que você quer criar, anexar ou substituir.
    3. Na lista Formato de arquivo, selecione o tipo de arquivo.
    4. Marque a caixa de seleção Particionamento de dados de origem e, em Selecionar prefixo de URI de origem, insira o prefixo de URI do Cloud Storage. Por exemplo, gs://my_bucket/my_files.
    5. Na seção Modo de inferência de partição, selecione uma das seguintes opções:
      • Inferir automaticamente os tipos: para definir o modo de detecção do esquema de partição como AUTO.
      • Todas as colunas são strings para definir o modo de detecção de esquema de partição como STRINGS.
      • Forneça meu próprio: para definir o modo de detecção de esquema de partição como CUSTOM e insira manualmente as informações do esquema para as chaves de partição. Para mais informações, consulte Oferecer um esquema personalizado de chave de partição.
    6. Opcional: Para exigir um filtro de partição em todas as consultas desta tabela, marque a caixa de seleção Exigir filtro de partição. A exigência de um filtro de partição pode reduzir custos e melhorar o desempenho. Para mais informações, consulte Como exigir filtros de predicado em chaves de partição em consultas.
  5. Na seção Destino, especifique os seguintes campos:
    1. Em Projeto, selecione o projeto em que você quer criar a tabela.
    2. Em Conjunto de dados, selecione o conjunto de dados em que você quer criar a tabela.
    3. Em Tabela, insira o nome da tabela que você quer criar.
    4. Em Tipo de tabela, selecione Tabela nativa.
  6. Na seção Esquema, insira a definição do esquema.
  7. Para ativar a detecção automática de esquema, selecione Detecção automática.
  8. Para ignorar linhas com valores de coluna extras que não correspondem ao esquema, expanda a seção Opções avançadas e selecione Valores desconhecidos.
  9. Selecione Criar tabela.

SQL

Para criar uma tabela particionada externamente, use a cláusula WITH PARTITION COLUMNS da instrução LOAD DATA para especificar os detalhes do esquema de partição.

Veja um exemplo em Carregar um arquivo particionado externamente.

bq

Carregue dados particionados do Hive usando a detecção automática de tipo de chave de partição:

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

Carregue dados particionados do Hive usando a detecção de chaves de partição com tipos de string:

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

Carregue dados particionados do Hive usando um esquema de chave de partição personalizado codificado usando o campo source\_uri\_prefix:

bq load --source_format=JSON --hive_partitioning_mode=CUSTOM \
--hive_partitioning_source_uri_prefix=gcs_uri_shared_prefix/partition_key_schema \
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}

API

A compatibilidade com o particionamento do Hive existe configurando o HivePartitioningOptions no JobConfigurationLoad.

Executar carregamentos 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.

Esquema de partição

As seções a seguir explicam o layout particionado padrão do Hive e os modos de detecção de esquema compatíveis com o BigQuery.

Layouts de dados compatíveis

As chaves de partição do Hive são exibidas como colunas normais quando você consulta dados do Cloud Storage. Os dados precisam estar em conformidade com um layout padrão de particionamento do Hive. Por exemplo, os seguintes arquivos seguem o layout padrão: os pares de chave-valor são configurados como diretórios com um sinal de igual (=) como separador, e as chaves de partição estão sempre na mesma ordem:

gs://my_bucket/my_table/dt=2019-10-31/lang=en/my_filename
gs://my_bucket/my_table/dt=2018-10-31/lang=fr/my_filename

O prefixo de URI de origem comum neste exemplo é gs://my_bucket/my_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á. Por exemplo, veja o caminho a seguir, que não codifica os nomes das chaves de partição:

gs://my_bucket/my_table/2019-10-31/en/my_filename

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

gs://my_bucket/my_table/dt=2019-10-31/lang=en/my_filename
gs://my_bucket/my_table/lang=fr/dt=2018-10-31/my_filename

Modos de detecção

O BigQuery é compatível com três modos de detecção de esquemas de partição do Hive:

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

Esquema de chave de partição personalizado

Para usar um esquema CUSTOM, especifique o esquema no campo de prefixo de URI de origem. Usar um esquema CUSTOM permite especificar o tipo de cada chave de partição. Os valores precisam ser analisados como o tipo especificado, caso contrário a consulta falhará.

Por exemplo, se você definir a flag source_uri_prefix como gs://my_bucket/my_table/{dt:DATE}/{val:STRING}, o BigQuery tratará val como STRING, dt como DATE e usará gs://my_bucket/my_table como o prefixo de URI de origem dos arquivos correspondentes.

Limitações

  • A compatibilidade com o particionamento do Hive é feita por meio de um prefixo de origem comum aplicado em todos os URIs que terminam imediatamente antes da codificação da partição, como mostrado a seguir: gs://BUCKET/PATH_TO_TABLE/.
  • Na estrutura de diretórios de uma tabela particionada do Hive, as chaves de particionamento dela aparecem na mesma ordem, com até dez chaves por tabela.
  • Os dados precisam seguir 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.
  • O suporte é válido apenas para o GoogleSQL.

  • Todas as limitações de carregamento pelo Cloud Storage são aplicáveis.

A seguir