Descoberta de partições para tabelas externas
O Databricks recomenda o uso de clustering líquido, em vez de particionamento, para simplificar o gerenciamento de tabelas e otimizar o desempenho da consulta. Consulte Usar clustering líquido para tabelas.
O Unity Catalog descobre automaticamente as partições de tabelas externas listando os diretórios recursivamente. Para tabelas particionadas de grande porte, habilitar o registro de metadados de partição reduz a latência de descoberta e melhora a consistência com o Hive metastore.
A Databricks recomenda ativar o registro de metadados de partição para melhorar a velocidade de leitura e o desempenho de consulta das tabelas externas do Unity Catalog com partições.
Estratégia de descoberta de partição default no Unity Catalog
Por default, Unity Catalog lista recursivamente todos os diretórios no local da tabela para descobrir automaticamente as partições. Em tabelas grandes com muitos diretórios de partição, isso pode aumentar a latência de muitas operações de tabela.
Use o registro de metadados de partição
Em Databricks Runtime 13.3 LTS e acima, o senhor pode, opcionalmente, ativar o registro de metadados da partição, uma estratégia de descoberta de partição para tabelas externas registradas em Unity Catalog. Esse comportamento é consistente com a estratégia de descoberta de partição usada em Hive metastore. Esse comportamento afeta apenas as tabelas externas do Unity Catalog que têm partições e usam Parquet, ORC, CSV, Avro ou JSON. A Databricks recomenda ativar o novo comportamento para melhorar a velocidade de leitura e o desempenho de consulta dessas tabelas.
Tabelas com registro de metadados de partição ativado apresentam comportamento diferente na descoberta de partições. Em vez de escanear automaticamente o local da tabela para partições, o Unity Catalog apenas respeita partições registradas nos metadados da partição. Consulte Adicionar, remover ou reparar metadados de partição manualmente.
Tabelas com este recurso habilitado podem ser lidas ou gravadas apenas usando o Databricks Runtime 13.3 LTS e acima.
Habilitar o registro de metadados da partição
Para ativar o registro de metadados de partição em uma tabela, defina a propriedade table ao criar uma tabela externa, conforme mostrado no exemplo a seguir:
CREATE OR REPLACE TABLE <catalog>.<schema>.<table-name>
USING <format>
PARTITIONED BY (<partition-column-list>)
TBLPROPERTIES ('partitionMetadataEnabled' = 'true')
LOCATION 's3://<bucket-path>/<table-directory>';
Depois de criar uma tabela com o registro de metadados de partição habilitado, o Databricks usa os metadados de partição para ler a tabela em todas as cargas de trabalho subsequentes.
É possível também usar configurações do Spark para habilitar metadados de partição para seu SparkSession atual. Quando habilitado, tabelas externas criadas na SparkSession serão criadas com a propriedade de tabela de metadados de partição habilitada. A configuração do Spark está desativada por padrão.
A sintaxe a seguir demonstra o uso de SQL para definir uma configuração do Spark em um notebook. É possível também definir configurações do Spark ao configurar o compute.
SET spark.databricks.nonDelta.partitionLog.enabled = true;
Você pode substituir a configuração do Spark habilitando ou desabilitando explicitamente a propriedade da tabela quando uma tabela é criada.
Você só pode ler e gravar tabelas com o registro de metadados de partição habilitado no Databricks Runtime 13.3 LTS e acima. Para ler essas tabelas usando o Databricks Runtime 12.2 LTS, você deve descartar e recriar a tabela com a propriedade de tabela de metadados de partição desabilitada.
As tabelas externas não excluem os arquivos de dados subjacentes quando você os elimina. A Databricks recomenda usar a sintaxe CREATE OR REPLACE para atualizar as tabelas e usar o registro de metadados da partição, como no exemplo a seguir:
CREATE OR REPLACE TABLE <catalog>.<schema>.<table-name>
USING <format>
PARTITIONED BY (<partition-column-list>)
LOCATION 's3://<bucket-path>/<table-directory>';
Você pode verificar se uma tabela foi criada usando metadados de partição da seguinte forma:
- Verifique a seção de propriedades da tabela retornada por
DESCRIBE EXTENDED table_name. - Verifique os metadados da tabela com o Catalog Explorer.
As propriedades da tabela contêm partitionMetadataEnabled=true.
O Unity Catalog impõe regras sobre sobreposições de caminhos para tabelas e volumes. O senhor não pode registrar uma nova tabela Unity Catalog em uma coleção de arquivos de dados se já existir uma tabela nesse local.
Trabalhe com tabelas com metadados de partição
A Databricks recomenda o uso de nomes de tabelas em todas as leituras e gravações em todas as tabelas registradas no Unity Catalog. Para tabelas com metadados de partição, isso garante que as novas partições adicionadas a uma tabela sejam registradas em Unity Catalog e que as consultas à tabela leiam todas as partições registradas.
O uso de padrões baseados em caminhos para leituras ou gravações pode fazer com que as partições sejam ignoradas ou não sejam registradas no metastore do Unity Catalog. Consulte Limitações.
Listar partições
Use o seguinte comando para mostrar todas as partições registradas no Unity Catalog como metadados de partição:
SHOW PARTITIONS <table-name>
Para verificar se uma única partição está registrada no Unity Catalog, use o seguinte comando:
SHOW PARTITIONS <table-name>
PARTITION (<partition-column-name> = <partition-column-value>)
Adicione, elimine ou repare manualmente os metadados da partição
O Unity Catalog exige que todas as partições de tabelas externas estejam contidas no diretório registrado usando a cláusula LOCATION durante o registro da tabela.
Com os metadados de partição ativados, a descoberta automática de partições no local da tabela é desativada. Se sistemas externos gravarem dados no local da tabela ou você usar gravações baseadas em caminhos para adicionar ou substituir registros em sua tabela, você deverá reparar manualmente os metadados da partição.
O Databricks usa o particionamento no estilo Hive para armazenar tabelas com suporte de Parquet, ORC, CSV e JSON. As partições no estilo Hive contêm par key-valor conectado por um sinal de igual no diretório da partição, por exemplo, year=2021/month=01/.
Se a tabela usar o particionamento no estilo Hive, o senhor poderá usar o site MSCK REPAIR para sincronizar os metadados da partição no Unity Catalog com as partições existentes no local da tabela. Os exemplos de sintaxe a seguir demonstram operações comuns:
-- Add and remove partition metadata to match directories in table location
MSCK REPAIR TABLE <table_name> SYNC PARTITIONS;
-- Add partitions in the table location that are not registered as partition metadata
MSCK REPAIR TABLE <table_name> ADD PARTITIONS;
-- Drop partitions registered as partition metadata that are not in the table location
MSCK REPAIR TABLE <table_name> DROP PARTITIONS;
Veja a TABELA DE REPARO.
Especifique manualmente caminhos para outros tipos de partição
Se sua tabela não usa particionamento no estilo Hive, você deve especificar manualmente os locais das partições ao adicionar partições. A especificação manual de partições também pode reduzir a latência em comparação com a sintaxe MSCK REPAIR, especialmente para tabelas com um grande número de partições. O exemplo de sintaxe a seguir mostra a adição de uma partição:
ALTER TABLE <table-name>
ADD PARTITION (<partition-column-name> = <partition-column-value>)
LOCATION 's3://<bucket-path>/<table-directory>/<partition-directory>';
Você também pode usar a sintaxe ALTER TABLE para eliminar, renomear, recuperar e definir locais para partições. Consulte ALTER TABLE ... PARTITION.
Limitações
Aplicam-se as seguintes limitações:
- A leitura de uma tabela usando o caminho do diretório retorna todas as partições, incluindo quaisquer que tenham sido adicionadas ou removidas manualmente.
- Se você inserir ou substituir registros em uma tabela usando um caminho em vez de um nome de tabela, os metadados da partição não serão registrados.