Descoberta de partições para tabelas externas
Este artigo descreve a estratégia de descoberta de partição padrão para tabelas externas do Unity Catalog e uma configuração opcional para habilitar um log de metadados de partição que torna a descoberta de partição consistente com o metastore do Hive.
O Databricks recomenda habilitar o registro de metadados de partição para melhorar as velocidades de leitura e o desempenho de consulta para tabelas externas do Unity Catalog com partições.
Qual é a estratégia de descoberta de partição padrão para o Unity Catalog?
Por padrão, o Unity Catalog lista recursivamente todos os diretórios no local da tabela para descobrir partições automaticamente. Para tabelas grandes com muitos diretórios de partição, isso pode aumentar a latência para muitas operações de tabela.
Usar o log de metadados de partição
Importante
Esta funcionalidade está em Pré-visualização Pública.
No Databricks Runtime 13.3 LTS e superior, você pode, opcionalmente, habilitar o registro de metadados de partição, que é uma estratégia de descoberta de partição para tabelas externas registradas no Unity Catalog. Esse comportamento é consistente com a estratégia de descoberta de partição usada no metastore do Hive. Esse comportamento afeta apenas as tabelas externas do Unity Catalog que têm partições e usam Parquet, ORC, CSV ou JSON. O Databricks recomenda habilitar o novo comportamento para melhorar as velocidades de leitura e o desempenho da consulta para essas tabelas.
Importante
Tabelas com registro de metadados de partição habilitado demonstram uma mudança comportamental para a descoberta de partições. Em vez de verificar automaticamente o local da tabela em busca de partições, o Unity Catalog respeita apenas as partições registradas nos metadados da partição. Consulte Adicionar manualmente, descartar ou reparar metadados de partição.
Esse comportamento se tornará o padrão em uma versão futura do Databricks Runtime. As tabelas com esse recurso ativado só podem ser lidas ou gravadas usando o Databricks Runtime 13.3 LTS e superior.
Nota
Você deve tentar consultar uma tabela com o Databricks Runtime 12.2 LTS ou inferior para confirmar que ela não usa o novo comportamento de log de partição.
Habilitar o registro de metadados de partição
Para habilitar o registro de metadados de partição em uma tabela, você deve habilitar um conf do Spark para sua SparkSession atual e, em seguida, criar uma tabela externa. Essa configuração só é necessária no SparkSession que cria a tabela. Depois de criar uma tabela com o log de metadados de partição habilitado, ela persiste essa configuração como parte dos metadados da tabela e usa o recurso em todas as cargas de trabalho subsequentes.
A sintaxe a seguir demonstra o uso de SQL para definir um conf do Spark em um bloco de anotações. Você também pode definir as configurações do Spark ao configurar a computação.
SET spark.databricks.nonDelta.partitionLog.enabled = true;
Importante
Você só pode ler e gravar tabelas com o registro de metadados de partição habilitado no Databricks Runtime 13.3 LTS e superior. Se você tiver cargas de trabalho executadas no Databricks Runtime 12.2 LTS ou inferior que devem interagir com tabelas, não use essa configuração.
As tabelas externas não excluem arquivos de dados subjacentes quando você os solta. O Databricks recomenda o uso CREATE OR REPLACE
da sintaxe para atualizar tabelas para usar o log de metadados de partição, como no exemplo a seguir:
CREATE OR REPLACE TABLE <catalog>.<schema>.<table-name>
USING <format>
PARTITIONED BY (<partition-column-list>)
LOCATION 'abfss://<bucket-path>/<table-directory>';
O Unity Catalog impõe regras sobre sobreposições de caminho para tabelas e volumes. Não é possível registrar uma nova tabela do Catálogo Unity em uma coleção de arquivos de dados se já existir uma tabela nesse local.
Trabalhar com tabelas com metadados de partição
O 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 novas partições adicionadas a uma tabela se registrem no Unity Catalog e que as consultas na tabela leiam todas as partições registradas.
O uso de padrões baseados em caminho para leituras ou gravações pode resultar em partições ignoradas ou não 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>)
Adicionar, soltar ou reparar manualmente metadados de partição
O Unity Catalog requer que todas as partições para tabelas externas estejam contidas no diretório registrado usando a cláusula durante o LOCATION
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 se você usar gravações baseadas em caminho para adicionar ou substituir registros na tabela, você deverá reparar manualmente os metadados da partição.
O Azure Databricks usa o particionamento no estilo Hive para armazenar tabelas com suporte de Parquet, ORC, CSV e JSON. As partições no estilo Colmeia contêm pares chave-valor conectados por um sinal de igual no diretório de partição, por exemplo year=2021/month=01/
.
Se sua tabela usa particionamento no estilo Hive, você pode usar MSCK REPAIR
para sincronizar metadados de partição no Unity Catalog com partições que existem no local da tabela. Os exemplos de sintaxe a seguir demonstram operações comuns:
-- Add and remove parition 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;
Consulte TABELA DE REPARAÇÃO.
Especificar manualmente caminhos para outros tipos de partição
Se a tabela não usar particionamento no estilo Hive, você deverá 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 MSCK REPAIR
sintaxe, 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 'abfss://<bucket-path>/<table-directory>/<partition-directory>';
Você também pode usar ALTER TABLE
a sintaxe para soltar, renomear, recuperar e definir locais para partições. Veja ALTER TABELA ... PARTIÇÃO.
Desativar novos metadados de partição
O conf do Spark que controla se as novas tabelas usam metadados de partição está desabilitado por padrão. Você também pode desativar explicitamente esse comportamento. A sintaxe a seguir usa SQL para desabilitar a conf do Spark:
SET spark.databricks.nonDelta.partitionLog.enabled = false;
Isso controla apenas se as tabelas criadas no SparkSession usam ou não metadados de partição. Para desabilitar metadados de partição em uma tabela que usa o comportamento, você deve soltar e recriar a tabela em um SparkSession que não tenha o conf do Spark habilitado.
Nota
Embora não seja possível ler ou gravar em tabelas com metadados de partição habilitados no Databricks Runtime 12.2 LTS ou inferior, você pode executar DROP
instruções ou CREATE OR REPLACE TABLE
nessas tabelas se tiver privilégios suficientes no Unity Catalog.
Limitações
As seguintes limitações existem:
- Não é possível ler ou gravar em tabelas com metadados de partição habilitados usando o Databricks Runtime 12.2 LTS ou inferior.
- A leitura de uma tabela usando o caminho do diretório retorna todas as partições, incluindo as que foram adicionadas ou descartadas 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.
- O formato de arquivo Avro não é suportado.