Descoberta de partição 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 padrão de descoberta de partição para o 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.

Usar o registro de metadados da partição

Prévia

Esse recurso está em Prévia Pública.

Em Databricks Runtime 13.3 LTS e acima, o senhor pode, opcionalmente, ativar o registro de metadados da partição, que é 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 ou JSON. A Databricks recomenda ativar o novo comportamento para melhorar a velocidade de leitura e o desempenho de consulta dessas tabelas.

Importante

As tabelas com o registro de metadados de partição ativado demonstram uma mudança de comportamento 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, remover 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.

Observação

O senhor deve tentar consultar uma tabela com Databricks Runtime 12.2 LTS ou abaixo para confirmar que ela não usa o novo comportamento da partição log.

Ativar o registro de metadados da partição

Para ativar o registro de metadados de partição em uma tabela, o senhor deve ativar um Spark conf para a SparkSession atual e, em seguida, criar uma tabela externa. Essa configuração só é necessária na SparkSession que cria a tabela. Depois que o senhor cria uma tabela com o registro de metadados de partição ativado, ela mantém 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 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;

Importante

O senhor só pode ler e gravar tabelas com o registro de metadados da partição ativado em Databricks Runtime 13.3 LTS e acima. Databricks Runtime LTS Se o senhor tiver cargas de trabalho que precisam interagir com tabelas, não use essa configuração.

As tabelas externas não excluem os arquivos de dados subjacentes quando o senhor as solta. 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 'gs://<bucket-path>/<table-directory>';

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.

Trabalhar 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>)

Adicionar, remover ou reparar 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 da 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 o usuário usar gravações baseadas em caminhos para adicionar ou sobrescrever registros na tabela, será necessário 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 sua tabela usar o particionamento no estilo Hive, o senhor poderá usar 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;

Consulte REPAIR TABLE.

Especificar manualmente os caminhos para outros tipos de partição

Se a tabela não usar o particionamento no estilo Hive, o senhor deverá especificar manualmente os locais das partições ao adicioná-las. 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 como adicionar uma partição:

ALTER TABLE <table-name>
ADD PARTITION (<partition-column-name> = <partition-column-value>)
LOCATION 'gs://<bucket-path>/<table-directory>/<partition-directory>';

O senhor também pode usar a sintaxe ALTER TABLE para soltar, renomear, recuperar e definir locais para partições. Consulte ALTER TABLE ... PARTITION.

Desativar novos metadados de partição

O conf. Spark que controla se as novas tabelas usam metadados de partição é desativado pelo default. O senhor também pode desativar explicitamente esse comportamento. A sintaxe a seguir usa SQL para desativar o Spark conf:

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 desativar os metadados de partição em uma tabela que usa o comportamento, o senhor deve remover e recriar a tabela em uma SparkSession que não tenha a configuração do Spark ativada.

Observação

Embora não seja possível ler ou gravar em tabelas com metadados de partição habilitados em Databricks Runtime 12.2 LTS ou abaixo, o senhor pode executar instruções DROP ou CREATE OR REPLACE TABLE nessas tabelas se tiver privilégios suficientes em Unity Catalog.

Limitações

Existem 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, inclusive as que foram adicionadas ou descartadas manualmente.

  • Se o usuário inserir ou sobrescrever registros em uma tabela usando um caminho em vez de um nome de tabela, os metadados da partição não serão gravados.

  • O formato de arquivo Avro não é suportado.