Partitiedetectie voor externe tabellen
In dit artikel wordt de standaardstrategie voor partitiedetectie voor externe tabellen van Unity Catalog en een optionele instelling beschreven voor het inschakelen van een partitiemetagegevenslogboek dat partitiedetectie consistent maakt met hive-metastore.
Databricks raadt aan om logboekregistratie van partitiemetagegevens in te schakelen voor verbeterde leessnelheden en queryprestaties voor externe tabellen van Unity Catalog met partities.
Wat is de standaardstrategie voor partitiedetectie voor Unity Catalog?
Standaard worden in Unity Catalog recursief alle mappen op de tabellocatie weergegeven om automatisch partities te detecteren. Voor grote tabellen met veel partitiemappen kan dit de latentie voor veel tabelbewerkingen verhogen.
Logboekregistratie van partitiemetagegevens gebruiken
Belangrijk
Deze functie is beschikbaar als openbare preview.
In Databricks Runtime 13.3 LTS en hoger kunt u optioneel logboekregistratie van partitiemetagegevens inschakelen. Dit is een strategie voor partitiedetectie voor externe tabellen die zijn geregistreerd bij Unity Catalog. Dit gedrag is consistent met de strategie voor partitiedetectie die wordt gebruikt in hive-metastore. Dit gedrag heeft alleen invloed op externe tabellen van Unity Catalog die partities hebben en Parquet, ORC, CSV of JSON gebruiken. Databricks raadt aan het nieuwe gedrag in te schakelen voor verbeterde leessnelheden en queryprestaties voor deze tabellen.
Belangrijk
Tabellen waarvoor logboekregistratie van partitiemetagegevens is ingeschakeld, laten een gedragswijziging zien voor partitiedetectie. In plaats van de tabellocatie automatisch te scannen op partities, respecteert Unity Catalog alleen partities die zijn geregistreerd in de metagegevens van de partitie. Zie Partitiemetagegevens handmatig toevoegen, verwijderen of herstellen.
Dit gedrag wordt de standaardinstelling in een toekomstige Databricks Runtime-versie. Tabellen waarvoor deze functie is ingeschakeld, kunnen alleen worden gelezen of geschreven met Databricks Runtime 13.3 LTS en hoger.
Notitie
U moet een query uitvoeren op een tabel met Databricks Runtime 12.2 LTS of lager om te bevestigen dat er geen gebruik wordtgemaakt van het nieuwe gedrag van het partitielogboek.
Logboekregistratie van partitiemetagegevens inschakelen
Als u logboekregistratie van partitiemetagegevens in een tabel wilt inschakelen, moet u een Spark-conf inschakelen voor uw huidige SparkSession en vervolgens een externe tabel maken. Deze instelling is alleen vereist in de SparkSession waarmee de tabel wordt gemaakt. Zodra u een tabel hebt gemaakt waarvoor logboekregistratie van partitiemetagegevens is ingeschakeld, blijft deze instelling behouden als onderdeel van de metagegevens van de tabel en wordt de functie gebruikt in alle volgende workloads.
De volgende syntaxis laat zien hoe u SQL gebruikt om een Spark-conf in te stellen in een notebook. U kunt ook Spark-configuraties instellen bij het configureren van rekenkracht.
SET spark.databricks.nonDelta.partitionLog.enabled = true;
Belangrijk
U kunt tabellen alleen lezen en schrijven met logboekregistratie van partitiemetagegevens ingeschakeld in Databricks Runtime 13.3 LTS en hoger. Als u workloads hebt die worden uitgevoerd op Databricks Runtime 12.2 LTS of lager die moeten communiceren met tabellen, gebruikt u deze instelling niet.
Externe tabellen verwijderen geen onderliggende gegevensbestanden wanneer u ze neerslaat. Databricks raadt aan om syntaxis te gebruiken CREATE OR REPLACE
om tabellen bij te werken voor het gebruik van logboekregistratie van partitiemetagegevens, zoals in het volgende voorbeeld:
CREATE OR REPLACE TABLE <catalog>.<schema>.<table-name>
USING <format>
PARTITIONED BY (<partition-column-list>)
LOCATION 'abfss://<bucket-path>/<table-directory>';
Unity Catalog dwingt regels af voor padovergangen voor tabellen en volumes. U kunt geen nieuwe Unity Catalog-tabel registreren voor een verzameling gegevensbestanden als er al een tabel op die locatie bestaat.
Werken met tabellen met partitiemetagegevens
Databricks raadt aan om tabelnamen te gebruiken in alle lees- en schrijfbewerkingen voor alle tabellen die zijn geregistreerd bij Unity Catalog. Voor tabellen met partitiemetagegevens garandeert dit dat nieuwe partities die zijn toegevoegd aan een tabelregister in Unity Catalog en dat query's op de tabel alle geregistreerde partities lezen.
Het gebruik van padgebaseerde patronen voor lees- of schrijfbewerkingen kan ertoe leiden dat partities worden genegeerd of niet zijn geregistreerd bij de Unity Catalog-metastore. Zie beperkingen.
Partities vermelden
Gebruik de volgende opdracht om alle partities weer te geven die zijn geregistreerd bij Unity Catalog als partitiemetagegevens:
SHOW PARTITIONS <table-name>
Gebruik de volgende opdracht om te controleren of één partitie is geregistreerd bij Unity Catalog:
SHOW PARTITIONS <table-name>
PARTITION (<partition-column-name> = <partition-column-value>)
Partitiemetagegevens handmatig toevoegen, verwijderen of herstellen
Unity Catalog vereist dat alle partities voor externe tabellen zijn opgenomen in de map die is geregistreerd met behulp van de LOCATION
component tijdens de tabelregistratie.
Als partitiemetagegevens zijn ingeschakeld, wordt automatische detectie van partities op de tabellocatie uitgeschakeld. Als externe systemen gegevens naar de tabellocatie schrijven of als u op pad gebaseerde schrijfbewerkingen gebruikt om records toe te voegen of te overschrijven in uw tabel, moet u de partitiemetagegevens handmatig herstellen.
Azure Databricks maakt gebruik van Hive-stijl partitionering voor het opslaan van tabellen die worden ondersteund door Parquet, ORC, CSV en JSON. Partities in Hive-stijl bevatten sleutel-waardeparen die zijn verbonden met een gelijkteken in de partitiemap, bijvoorbeeld year=2021/month=01/
.
Als uw tabel partitionering in Hive-stijl gebruikt MSCK REPAIR
, kunt u partitiemetagegevens in Unity Catalog synchroniseren met partities die aanwezig zijn op de tabellocatie. In de volgende syntaxisvoorbeelden worden veelvoorkomende bewerkingen gedemonstreert:
-- 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;
Zie REPAIR TABLE.
Handmatig paden opgeven voor andere partitietypen
Als uw tabel geen Hive-stijl partitionering gebruikt, moet u handmatig partitielocaties opgeven bij het toevoegen van partities. Handmatig opgeven van partities kan ook latentie verminderen in vergelijking met MSCK REPAIR
syntaxis, met name voor tabellen met een groot aantal partities. In het volgende syntaxisvoorbeeld ziet u hoe u een partitie toevoegt:
ALTER TABLE <table-name>
ADD PARTITION (<partition-column-name> = <partition-column-value>)
LOCATION 'abfss://<bucket-path>/<table-directory>/<partition-directory>';
U kunt ook syntaxis gebruiken ALTER TABLE
om locaties voor partities te verwijderen, de naam te wijzigen, te herstellen en in te stellen. Zie ALTER TABLE ... PARTITIE.
Nieuwe partitiemetagegevens uitschakelen
De Spark-conf waarmee wordt bepaald of voor nieuwe tabellen partitiemetagegevens worden gebruikt, is standaard uitgeschakeld. U kunt dit gedrag ook expliciet uitschakelen. De volgende syntaxis maakt gebruik van SQL om de Spark-conf uit te schakelen:
SET spark.databricks.nonDelta.partitionLog.enabled = false;
Hiermee bepaalt u alleen of tabellen die zijn gemaakt in SparkSession partitiemetagegevens gebruiken. Als u partitiemetagegevens wilt uitschakelen voor een tabel die gebruikmaakt van het gedrag, moet u de tabel verwijderen en opnieuw maken in een SparkSession waarvoor de Spark-conf niet is ingeschakeld.
Notitie
Hoewel u niet kunt lezen of schrijven naar tabellen waarvoor partitiemetagegevens zijn ingeschakeld in Databricks Runtime 12.2 LTS of lager, kunt u deze tabellen uitvoeren of CREATE OR REPLACE TABLE
instructies uitvoeren DROP
als u voldoende bevoegdheden hebt in Unity Catalog.
Beperkingen
De volgende beperkingen gelden:
- U kunt geen tabellen lezen of schrijven waarvoor partitiemetagegevens zijn ingeschakeld met Databricks Runtime 12.2 LTS of lager.
- Als u een tabel leest met behulp van het mappad, worden alle partities geretourneerd, inclusief partities die handmatig zijn toegevoegd of verwijderd.
- Als u records in een tabel invoegt of overschrijft met behulp van een pad in plaats van een tabelnaam, worden de metagegevens van de partitie niet vastgelegd.
- Avro-bestandsindeling wordt niet ondersteund.