Pular para o conteúdo principal

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

info

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, 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.

important

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.

nota

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.

Habilitar 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.

SQL
SET spark.databricks.nonDelta.partitionLog.enabled = true;
important

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 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:

SQL
CREATE OR REPLACE TABLE <catalog>.<schema>.<table-name>
USING <format>
PARTITIONED BY (<partition-column-list>)
LOCATION 's3://<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.

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:

SQL
SHOW PARTITIONS <table-name>

Para verificar se uma única partição está registrada no Unity Catalog, use o seguinte comando:

SQL
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:

SQL
-- 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:

SQL
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.

Desativar novos metadados de partição

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

SQL
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.

nota

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

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.