Usar dados particionados externamente

É possível usar tabelas externas do BigQuery para consultar dados particionados nos seguintes repositórios de dados:

Os dados particionados externamente precisam usar um layout padrão de particionamento do Hive e estar em um dos seguintes formatos:

  • Avro
  • CSV
  • JSON
  • ORC
  • Parquet

Para consultar dados particionados externamente, crie uma tabela do BigLake ou uma tabela externa. Recomendamos o uso de tabelas do BigLake porque permitem aplicar segurança detalhada no nível da tabela. Para mais informações sobre o BigLake e as tabelas externas, consulte Introdução às tabelas do BigLake e Introdução a tabelas externas.

Para ativar a compatibilidade com o particionamento do Hive, defina as opções apropriadas no arquivo de definição da tabela. Para instruções sobre como consultar tabelas particionadas gerenciadas, consulte Introdução a tabelas particionadas.

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.

Para evitar a leitura de arquivos desnecessários e melhorar o desempenho, é possível usar filtros de predicado em chaves de partição em consultas.

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.

Remoção de partições

No BigQuery, é possível remover partições quando necessário usando predicados em consulta nas chaves. Isso permite que o BigQuery evite a leitura de arquivos desnecessários, o que ajuda a melhorar o desempenho.

Filtros de predicado em chaves de partição em consultas

Ao criar uma tabela particionada externamente, é possível exigir o uso de filtros de predicado em chaves de partição ativando a opção requirePartitionFilter em HivePartitioningOptions.

Quando essa opção está ativada, as tentativas de consultar a tabela particionada externamente sem especificar uma cláusula WHERE produzem o seguinte erro: Cannot query over table <table_name> without a filter over column(s) <partition key names> that can be used for partition elimination.

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 das consultas a fontes de dados externas armazenadas no Cloud Storage são aplicadas.

A seguir