Descoberta de partições para tabelas externas
Este artigo descreve a estratégia de descoberta de partição default para tabelas externas Unity Catalog e uma configuração opcional para ativar um metadado de partição log que torna a descoberta de partição consistente com 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.
Qual é a estratégia de descoberta da partição default para 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
Visualização
Esse recurso está em Public Preview.
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 demonstram uma mudança comportamental na 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, descartar ou reparar manualmente os metadados da partição.
Esse comportamento se tornará o default em uma versão futura do Databricks Runtime. As tabelas com esse recurso ativado só podem ser lidas ou gravadas usando 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.
Você também pode usar o Spark conf para habilitar metadados de partição para sua SparkSession atual. Quando ativada, as tabelas externas criadas no SparkSession serão criadas com a propriedade da tabela de metadados da partição ativada. A configuração Spark é desabilitada por default.
A sintaxe a seguir demonstra o uso do SQL para definir um Spark conf em um Notebook. O senhor também pode definir as 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 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;
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:
- O senhor não pode ler ou gravar em tabelas com metadados de partição ativados usando o site Databricks Runtime 12.2 LTS ou abaixo.
- A leitura de uma tabela usando o caminho do diretório retorna todas as partições, incluindo as que foram adicionadas ou eliminadas 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.