Carregar dados particionados externamente

O BigQuery pode carregar dados armazenados no Cloud Storage através de um esquema de particionamento do Hive. A partição do Hive significa que os dados externos estão organizados em vários ficheiros, com uma convenção de nomenclatura para separar os ficheiros em partições diferentes. Para mais informações, consulte o artigo Formatos de dados suportados.

Por predefinição, os dados não são particionados no BigQuery depois de os carregar, a menos que crie explicitamente uma tabela particionada.

Carregue dados particionados do Hive

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

Consola

  1. Na Trusted Cloud consola, aceda ao BigQuery.

    Aceda ao BigQuery

  2. No painel Explorador, expanda o projeto e selecione um conjunto de dados.
  3. Clique em Ver ações, e, de seguida, clique em Criar tabela. É apresentado o painel Criar tabela.
  4. Na secção Origem, especifique os seguintes detalhes:
    1. Em Criar tabela a partir de, selecione Google Cloud Storage.
    2. Para Selecionar ficheiro do contentor do Cloud Storage, introduza o caminho para a pasta do Cloud Storage, usando caracteres universais. Por exemplo, my_bucket/my_files*. O contentor do Cloud Storage tem de estar na mesma localização que o conjunto de dados que contém a tabela que quer criar, acrescentar ou substituir.
    3. Na lista Formato de ficheiro, selecione o tipo de ficheiro.
    4. Selecione a caixa de verificação Particionamento de dados de origem e, de seguida, em Selecionar prefixo do URI de origem, introduza o prefixo do URI do Cloud Storage. Por exemplo, gs://my_bucket/my_files.
    5. Na secção Modo de inferência de partição, selecione uma das seguintes opções:
      • Inferir automaticamente tipos: defina o modo de deteção do esquema de partição para AUTO.
      • Todas as colunas são strings: defina o modo de deteção do esquema de partição como STRINGS.
      • Fornecer as minhas: defina o modo de deteção do esquema de partição como CUSTOM e introduza manualmente as informações do esquema para as chaves de partição. Para mais informações, consulte o artigo Forneça um esquema de chave de partição personalizado.
    6. Opcional: para exigir um filtro de partição em todas as consultas para esta tabela, selecione a caixa de verificação Exigir filtro de partição. A exigência de um filtro de partição pode reduzir o custo e melhorar o desempenho. Para mais informações, consulte o artigo Exigir filtros de predicados em chaves de partição nas consultas.
  5. Na secção Destino, especifique os seguintes detalhes:
    1. Para Projeto, selecione o projeto no qual quer criar a tabela.
    2. Para Conjunto de dados, selecione o conjunto de dados no qual quer criar a tabela.
    3. Para Tabela, introduza o nome da tabela que quer criar.
    4. Para Tipo de tabela, selecione Tabela nativa .
  6. Na secção Esquema, introduza a definição do esquema.
  7. Para ativar a deteção automática do esquema, selecione Deteção automática.
  8. Para ignorar linhas com valores de colunas adicionais que não correspondem ao esquema, expanda a secção Opções avançadas e selecione Valores desconhecidos.
  9. Clique em Criar tabela.

SQL

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

Para ver um exemplo, consulte o artigo Carregue um ficheiro que esteja particionado externamente.

bq

Carregue dados particionados do Hive usando a deteção automática do 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 através da deteção de chaves de partição do tipo 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 que seja 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 do 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

O suporte para a partição Hive existe definindo o parâmetro HivePartitioningOptions no parâmetro JobConfigurationLoad.

Realize carregamentos incrementais

Considere o seguinte esquema de dados:

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 apenas dados de 31/10/2019, faça o seguinte:

  • Defina o modo de partição do Hive como AUTO, STRINGS ou CUSTOM.
  • Defina o prefixo do URI de origem como gs://my_bucket/my_table/ para os modos de partição AUTO ou STRINGS do Hive. Para CUSTOM, indique 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, com os valores 2019-10-31 e 1, respetivamente.

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

  • Defina o modo de partição do Hive como AUTO, STRINGS ou CUSTOM.
  • Defina o prefixo do URI de origem como gs://my_bucket/my_table/ para os modos de partição AUTO ou STRINGS do Hive. Para CUSTOM, indique 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 de ambos os ficheiros com as colunas dt e val preenchidas.

Esquema de partição

As secções seguintes explicam o esquema de partição do Hive predefinido e os modos de deteção de esquemas que o BigQuery suporta.

Esquemas de dados suportados

As chaves de partição do Hive aparecem como colunas normais quando consulta dados do Cloud Storage. Os dados têm de seguir um esquema particionado do Hive predefinido. Por exemplo, os seguintes ficheiros seguem a disposição predefinida: os pares de chave-valor estão configurados como diretórios com um sinal de igual (=) como separador e as chaves de partição estão sempre pela 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 URI de origem comum neste exemplo é gs://my_bucket/my_table.

Esquemas de dados não suportados

Se os nomes das chaves de partição não estiverem codificados no caminho do diretório, a deteção do esquema de partição falha. Por exemplo, considere o seguinte caminho, que não codifica os nomes das chaves de partição:

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

Os ficheiros em que o esquema não está numa ordem consistente também falham a deteção. Por exemplo, considere os dois ficheiros seguintes com codificações de chave 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 deteção

O BigQuery suporta três modos de deteção do esquema de partição do Hive:

  • AUTO: os nomes e os tipos de chaves são detetados automaticamente. Podem ser detetados os seguintes tipos:

  • STRINGS: os nomes das chaves são convertidos automaticamente no tipo STRING.

  • CUSTOM: O esquema da chave de partição é codificado conforme especificado no prefixo do URI de origem.

Esquema de chave de partição personalizado

Para usar um esquema CUSTOM, tem de especificar o esquema no campo de prefixo do URI de origem. A utilização de um esquema CUSTOM permite-lhe especificar o tipo de cada chave de partição. Os valores têm de ser analisados validamente como o tipo especificado, caso contrário, a consulta falha.

Por exemplo, se definir a flag source_uri_prefix como gs://my_bucket/my_table/{dt:DATE}/{val:STRING}, o BigQuery trata val como uma STRING, dt como uma DATE e usa gs://my_bucket/my_table como o prefixo do URI de origem para os ficheiros correspondentes.

Limitações

  • O suporte de partição do Hive é criado partindo do princípio de que existe um prefixo de URI de origem comum para todos os URIs que termina imediatamente antes da codificação de partição, da seguinte forma: gs://BUCKET/PATH_TO_TABLE/.
  • A estrutura de diretórios de uma tabela particionada do Hive pressupõe que as chaves de partição aparecem pela mesma ordem, com um máximo de dez chaves de partição por tabela.
  • Os dados têm de seguir um esquema de partição do Hive predefinido.
  • As chaves de particionamento do Hive e as colunas nos ficheiros subjacentes não podem sobrepor-se.
  • O apoio técnico destina-se apenas ao GoogleSQL.

  • Aplicam-se todas as limitações para o carregamento a partir do Cloud Storage.

O que se segue?