Individuazione delle partizioni per tabelle esterne
Questo articolo descrive la strategia di individuazione delle partizioni predefinita per le tabelle esterne di Unity Catalog e un'impostazione facoltativa per abilitare un log dei metadati della partizione che rende coerente l'individuazione delle partizioni con il metastore Hive.
Databricks consiglia di abilitare la registrazione dei metadati delle partizioni per migliorare le velocità di lettura e le prestazioni delle query per le tabelle esterne di Unity Catalog con partizioni.
Qual è la strategia di individuazione delle partizioni predefinita per Il catalogo unity?
Per impostazione predefinita, Il catalogo Unity elenca in modo ricorsivo tutte le directory nella posizione della tabella per individuare automaticamente le partizioni. Per le tabelle di grandi dimensioni con molte directory di partizione, ciò può aumentare la latenza per molte operazioni di tabella.
Usare la registrazione dei metadati della partizione
Importante
Questa funzionalità è disponibile in anteprima pubblica.
In Databricks Runtime 13.3 LTS e versioni successive è possibile abilitare facoltativamente la registrazione dei metadati delle partizioni, ovvero una strategia di individuazione delle partizioni per le tabelle esterne registrate nel catalogo unity. Questo comportamento è coerente con la strategia di individuazione delle partizioni usata nel metastore Hive. Questo comportamento influisce solo sulle tabelle esterne del catalogo Unity con partizioni e che usano Parquet, ORC, CSV o JSON. Databricks consiglia di abilitare il nuovo comportamento per migliorare le velocità di lettura e le prestazioni delle query per queste tabelle.
Importante
Le tabelle con registrazione dei metadati delle partizioni abilitate illustrano una modifica comportamentale per l'individuazione delle partizioni. Anziché analizzare automaticamente il percorso della tabella per le partizioni, Il catalogo unity rispetta solo le partizioni registrate nei metadati della partizione. Vedere Aggiungere, eliminare o ripristinare manualmente i metadati della partizione.
Questo comportamento diventerà l'impostazione predefinita in una versione futura di Databricks Runtime. Le tabelle con questa funzionalità abilitata possono essere lette o scritte solo con Databricks Runtime 13.3 LTS e versioni successive.
Nota
È necessario provare a eseguire una query su una tabella con Databricks Runtime 12.2 LTS o versioni successive per verificare che non usi il nuovo comportamento del log di partizione.
Abilitare la registrazione dei metadati della partizione
Per abilitare la registrazione dei metadati della partizione in una tabella, è necessario abilitare una conf Spark per sparkSession corrente e quindi creare una tabella esterna. Questa impostazione è necessaria solo in SparkSession che crea la tabella. Dopo aver creato una tabella con la registrazione dei metadati della partizione abilitata, questa impostazione viene mantenuta come parte dei metadati della tabella e viene usata la funzionalità in tutti i carichi di lavoro successivi.
La sintassi seguente illustra l'uso di SQL per impostare una conf Spark in un notebook. È anche possibile impostare le configurazioni di Spark durante la configurazione del calcolo.
SET spark.databricks.nonDelta.partitionLog.enabled = true;
Importante
È possibile leggere e scrivere tabelle con registrazione dei metadati di partizione abilitata in Databricks Runtime 13.3 LTS e versioni successive. Se sono presenti carichi di lavoro eseguiti in Databricks Runtime 12.2 LTS o versioni successive che devono interagire con le tabelle, non usare questa impostazione.
Le tabelle esterne non eliminano i file di dati sottostanti quando vengono eliminati. Databricks consiglia di usare CREATE OR REPLACE
la sintassi per aggiornare le tabelle per usare la registrazione dei metadati di partizione, come nell'esempio seguente:
CREATE OR REPLACE TABLE <catalog>.<schema>.<table-name>
USING <format>
PARTITIONED BY (<partition-column-list>)
LOCATION 'abfss://<bucket-path>/<table-directory>';
Il catalogo unity applica regole sulle sovrapposizioni di percorsi per tabelle e volumi. Non è possibile registrare una nuova tabella di Catalogo Unity in una raccolta di file di dati se esiste già una tabella in tale percorso.
Usare tabelle con metadati di partizione
Databricks consiglia di usare i nomi delle tabelle in tutte le letture e le scritture in tutte le tabelle registrate in Unity Catalog. Per le tabelle con metadati di partizione, ciò garantisce che le nuove partizioni aggiunte a una tabella registrino in Unity Catalog e che le query sulla tabella leggano tutte le partizioni registrate.
L'uso di modelli basati su percorso per letture o scritture può comportare la mancata registrazione delle partizioni nel metastore del catalogo Unity. Vedere Limitazioni.
Elencare le partizioni
Usare il comando seguente per visualizzare tutte le partizioni registrate in Unity Catalog come metadati di partizione:
SHOW PARTITIONS <table-name>
Per verificare se una singola partizione è registrata in Unity Catalog, usare il comando seguente:
SHOW PARTITIONS <table-name>
PARTITION (<partition-column-name> = <partition-column-value>)
Aggiungere, eliminare o ripristinare manualmente i metadati della partizione
Il catalogo Unity richiede che tutte le partizioni per le tabelle esterne siano contenute nella directory registrata usando la clausola durante la registrazione della LOCATION
tabella.
Con i metadati di partizione abilitati, l'individuazione automatica delle partizioni nella posizione della tabella è disabilitata. Se i sistemi esterni scrivono dati nella posizione della tabella o si usano scritture basate sul percorso per aggiungere o sovrascrivere record nella tabella, è necessario ripristinare manualmente i metadati della partizione.
Azure Databricks usa il partizionamento in stile Hive per l'archiviazione di tabelle supportate da Parquet, ORC, CSV e JSON. Le partizioni in stile Hive contengono coppie chiave-valore connesse da un segno di uguale nella directory di partizione, ad esempio year=2021/month=01/
.
Se la tabella usa il partizionamento in stile Hive, è possibile usare MSCK REPAIR
per sincronizzare i metadati della partizione in Unity Catalog con le partizioni presenti nel percorso della tabella. Gli esempi di sintassi seguenti illustrano le operazioni comuni:
-- 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;
Si veda Tabella di riparazione.
Specificare manualmente i percorsi per altri tipi di partizione
Se la tabella non usa il partizionamento in stile Hive, è necessario specificare manualmente i percorsi delle partizioni durante l'aggiunta di partizioni. Specificare manualmente le partizioni può anche ridurre la latenza rispetto alla MSCK REPAIR
sintassi, in particolare per le tabelle con un numero elevato di partizioni. Nell'esempio di sintassi seguente viene illustrata l'aggiunta di una partizione:
ALTER TABLE <table-name>
ADD PARTITION (<partition-column-name> = <partition-column-value>)
LOCATION 'abfss://<bucket-path>/<table-directory>/<partition-directory>';
È anche possibile usare ALTER TABLE
la sintassi per eliminare, rinominare, ripristinare e impostare percorsi per le partizioni. Vedere ALTER TABLE ... PARTITION.
Disabilitare i metadati della nuova partizione
La conf Spark che controlla se le nuove tabelle usano metadati di partizione sono disabilitate per impostazione predefinita. È anche possibile disabilitare questo comportamento in modo esplicito. La sintassi seguente usa SQL per disabilitare la conf di Spark:
SET spark.databricks.nonDelta.partitionLog.enabled = false;
Questo controlla solo se le tabelle create in SparkSession usano metadati di partizione. Per disabilitare i metadati della partizione in una tabella che usa il comportamento, è necessario eliminare e ricreare la tabella in una sparkSession in cui non è abilitata la conf Spark.
Nota
Anche se non è possibile leggere o scrivere in tabelle con metadati di partizione abilitati in Databricks Runtime 12.2 LTS o versioni successive, è possibile eseguire DROP
istruzioni o CREATE OR REPLACE TABLE
su queste tabelle se si dispone di privilegi sufficienti in Unity Catalog.
Limiti
Esistono le limitazioni seguenti:
- Non è possibile leggere o scrivere in tabelle con metadati di partizione abilitati usando Databricks Runtime 12.2 LTS o versioni successive.
- La lettura di una tabella tramite il percorso della directory restituisce tutte le partizioni, incluse quelle aggiunte o eliminate manualmente.
- Se si inseriscono o sovrascrivono record in una tabella usando un percorso anziché un nome di tabella, i metadati della partizione non vengono registrati.
- Il formato di file Avro non è supportato.