Descoberta de partição para tabelas externas
Este artigo descreve a estratégia de descoberta de partição padrão para tabelas externas do Catálogo do Unity 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 em log de metadados de partição para melhorar as velocidades de leitura e o desempenho da consulta para tabelas externas do Catálogo do Unity com partições.
Qual é a estratégia de descoberta de partição padrão para o Catálogo do Unity?
Por padrão, o Catálogo do Unity lista recursivamente todos os diretórios no local da tabela para descobrir automaticamente as partições. Para tabelas grandes com muitos diretórios de partição, isso pode aumentar a latência para muitas operações de tabela.
Usar o registro em log de metadados de partição
Importante
Esse recurso está em uma versão prévia.
No Databricks Runtime 13.3 LTS e posteriores, você pode habilitar opcionalmente o registro em log de metadados de partição, que é uma estratégia de descoberta de partição para tabelas externas registradas no Catálogo do Unity. 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 Catálogo do Unity 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 log de metadados de partição habilitados demonstram uma alteração comportamental para descoberta de partição. Em vez de verificar automaticamente o local da tabela em busca de partições, o Catálogo do Unity respeita apenas as partições registradas nos metadados de partição. Consulte Adicionar, soltar ou reparar metadados de partição manualmente.
Esse comportamento se tornará o padrão em uma versão futura do Databricks Runtime. Tabelas com esse recurso habilitado só podem ser lidas ou gravadas usando o Databricks Runtime 13.3 LTS e superior.
Observação
Você deve tentar consultar uma tabela com o Databricks Runtime 12.2 LTS ou abaixo para confirmar que ela não usa o novo comportamento de log de partição.
Habilitar o registro em log de metadados de partição
Para habilitar o registro em log de metadados de partição em uma tabela, você deve habilitar uma configuração do Spark para o 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 persistirá essa configuração como parte dos metadados da tabela e usará o recurso em todas as cargas de trabalho subsequentes.
A sintaxe a seguir demonstra o uso do SQL para definir uma configuração do Spark em um notebook. Você também pode definir 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 log 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 abaixo que devem interagir com tabelas, não use essa configuração.
As tabelas externas não excluem arquivos de dados subjacentes quando você os descarta. O Databricks recomenda usar CREATE OR REPLACE
sintaxe para atualizar tabelas para usar o registro em 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 Catálogo do Unity impõe regras sobreposições de caminho para tabelas e volumes. Não é possível registrar uma nova tabela do Catálogo do Unity em uma coleção de arquivos de dados se uma tabela já existir nesse local.
Trabalhar com tabelas com metadados de partição
O Databricks recomenda usar nomes de tabela em todas as leituras e gravações em todas as tabelas registradas no Catálogo do Unity. Para tabelas com metadados de partição, isso garante que novas partições adicionadas a um registro de tabela ao Catálogo do Unity 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 sendo ignoradas ou não registradas no metastore do Catálogo do Unity. Confira Limitações.
Listar partições
Use o seguinte comando para mostrar todas as partições registradas no Catálogo do Unity como metadados de partição:
SHOW PARTITIONS <table-name>
Para verificar se uma única partição está registrada no Catálogo do Unity, use o seguinte comando:
SHOW PARTITIONS <table-name>
PARTITION (<partition-column-name> = <partition-column-value>)
Adicionar, soltar ou reparar metadados de partição manualmente
O Catálogo do Unity exige que todas as partições para tabelas externas estejam contidas no diretório registrado usando a cláusula LOCATION
durante o registro da tabela.
Com os metadados de partição habilitados, a descoberta automática de partições no local da tabela está desabilitada. Se sistemas externos gravarem dados no local da tabela ou você usar gravações baseadas em caminho para adicionar ou substituir registros em sua tabela, você deverá reparar manualmente os metadados de partição.
O Azure Databricks usa o particionamento no estilo Hive para armazenar tabelas apoiadas por Parquet, ORC, CSV e JSON. As partições no estilo Hive contêm pares chave-valor conectados por um sinal de igual no diretório de partição, por exemplo, year=2021/month=01/
.
Se a tabela usar o particionamento no estilo Hive, você poderá usar MSCK REPAIR
para sincronizar metadados de partição no Catálogo do Unity 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;
Confira REPARAR TABELA.
Especificar manualmente caminhos para outros tipos de partição
Se a tabela não usar o particionamento no estilo Hive, você deverá especificar manualmente os locais de partição ao adicionar partições. Especificar manualmente partições também pode reduzir a latência em comparação com 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
sintaxe para remover, renomear, recuperar e definir locais para partições. Consulte ALTER TABLE … PARTITION.
Desabilitar novos metadados de partição
A configuração do Spark que controla se novas tabelas usam metadados de partição está desabilitada por padrão. Você também pode desabilitar explicitamente esse comportamento. A sintaxe a seguir usa SQL para desabilitar a configuração do Spark:
SET spark.databricks.nonDelta.partitionLog.enabled = false;
Isso controla apenas se as tabelas criadas no SparkSession usam metadados de partição. Para desabilitar metadados de partição em uma tabela que usa o comportamento, você deve remover e recriar a tabela em uma SparkSession que não tenha a configuração do Spark habilitada.
Observação
Embora não seja possível ler ou gravar em tabelas com metadados de partição habilitados no Databricks Runtime 12.2 LTS ou abaixo, você poderá executar instruções DROP
ou CREATE OR REPLACE TABLE
nessas tabelas se tiver privilégios suficientes no Catálogo do Unity.
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.
- Ler uma tabela usando o caminho do diretório retorna todas as partições, incluindo qualquer uma que tenha sido adicionada ou descartada manualmente.
- Se você inserir ou substituir registros em uma tabela usando um caminho em vez de um nome de tabela, os metadados de partição não serão registrados.
- Não há suporte para o formato de arquivo Avro.