Partition detectie voor externe tables
In dit artikel wordt de standaardstrategie voor partition detectie voor Unity Catalog externe tables en een optionele instelling beschreven om een partition metagegevenslogboek in te schakelen waarmee partition detectie consistent is met hive-metastore.
Databricks raadt aan partition logboekregistratie van metagegevens in te schakelen voor verbeterde leessnelheden en queryprestaties voor Unity Catalog externe tables met partities.
Wat is de standaardstrategie voor partition detectie voor Unity Catalog?
Standaard geeft Unity Catalog recursief een lijst weer van alle mappen op de table locatie om automatisch partities te detecteren. Voor grote tables met veel partition mappen kan dit de latentie voor veel table bewerkingen verhogen.
Gebruik partition-metadatalogging
Belangrijk
Deze functie is beschikbaar als openbare preview.
In Databricks Runtime 13.3 LTS en hoger kunt u desgewenst partition logboekregistratie van metagegevens inschakelen. Dit is een partition detectiestrategie voor externe tables geregistreerd bij Unity Catalog. Dit gedrag is consistent met de partition detectiestrategie die wordt gebruikt in hive-metastore. Dit gedrag heeft alleen invloed op Unity Catalog externe tables die partities hebben en Parquet, ORC, CSV of JSON gebruiken. Databricks raadt aan om het nieuwe gedrag in te schakelen voor verbeterde leessnelheden en queryprestaties voor deze tables.
Belangrijk
Tables met ingeschakelde partition logboekregistratie van metagegevens vertoont een gedragswijziging voor partition ontdekking. In plaats van de table locatie voor partities automatisch te scannen, respecteert Unity Catalog alleen partities die zijn geregistreerd in de partition metagegevens. Zie partition metagegevens handmatig toevoegen, verwijderen of herstellen.
Dit gedrag wordt de standaardinstelling in een toekomstige Databricks Runtime-versie. Tables waarvoor deze functie is ingeschakeld, kan alleen worden gelezen of geschreven met Databricks Runtime 13.3 LTS en hoger.
Notitie
U moet een query uitvoeren op een table met Databricks Runtime 12.2 LTS of lager om te bevestigen dat er geen gebruik wordtgemaakt van het nieuwe partition logboekgedrag.
Logboekregistratie van partition metagegevens inschakelen
Als u partition logboekregistratie van metagegevens wilt inschakelen op een table, moet u een Spark-conf inschakelen voor uw huidige SparkSession en vervolgens een externe tablemaken. Deze instelling is alleen vereist in de SparkSession waarmee de tablewordt gemaakt. Zodra u een table hebt gemaakt met partition logboekregistratie van metagegevens ingeschakeld, blijft deze instelling behouden als onderdeel van de table metagegevens en wordt de functie gebruikt in alle volgende workloads.
De volgende syntaxis laat zien hoe u SQL gebruikt om een Spark-conf in een notebook te set. U kunt ook Spark-configuraties set bij het configureren van rekenkracht.
SET spark.databricks.nonDelta.partitionLog.enabled = true;
Belangrijk
U kunt tables alleen lezen en schrijven met partition logboekregistratie van metagegevens 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 tables, gebruikt u deze instelling niet.
Externe tables verwijdert onderliggende gegevensbestanden niet wanneer u ze verwijdert. Databricks raadt aan om de CREATE OR REPLACE
-syntaxis te gebruiken om tables bij te werken naar partition logboekregistratie van metagegevens, 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 padoverlappen van tables en volumes. U kunt geen nieuwe Unity-Catalogtable registreren voor een verzameling gegevensbestanden als er al een table op die locatie bestaat.
Werken met tables en partition metagegevens
Databricks raadt aan table namen te gebruiken in alle lees- en schrijfbewerkingen tegen alle tables geregistreerd bij Unity Catalog. Voor tables met partition metagegevens garandeert dit dat nieuwe partities die zijn toegevoegd aan een table registreren bij Unity Catalog en dat query's op de table 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.
List partities
Gebruik de volgende opdracht om alle partities weer te geven die zijn geregistreerd bij Unity Catalog als partition metagegevens:
SHOW PARTITIONS <table-name>
Gebruik de volgende opdracht om te controleren of één partition is geregistreerd bij Unity Catalog:
SHOW PARTITIONS <table-name>
PARTITION (<partition-column-name> = <partition-column-value>)
partition metagegevens handmatig toevoegen, verwijderen of herstellen
Unity Catalog vereist dat alle partities voor externe tables zijn opgenomen in de map die is geregistreerd met behulp van de LOCATION
-clausule tijdens de registratie van table.
Als partition metagegevens zijn ingeschakeld, wordt automatische detectie van partities op de table locatie uitgeschakeld. Als externe systemen gegevens naar de table locatie schrijven of als u op pad gebaseerde schrijfbewerkingen gebruikt om records toe te voegen of te overschrijven in uw table, moet u de partition metagegevens handmatig herstellen.
Azure Databricks maakt gebruik van Hive-stijl partitionering voor het opslaan van tables ondersteund door Parquet, ORC, CSV en JSON. Hive-partities bevatten sleutel-waardeparen die zijn verbonden met een gelijkteken in de partition map, bijvoorbeeld year=2021/month=01/
.
Als uw table gebruikmaakt van partitionering in Hive-stijl, kunt u MSCK REPAIR
gebruiken om metagegevens te syncpartition in Unity Catalog met partities die aanwezig zijn in de table-locatie. 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 partition typen
Als uw table geen Hive-stijl partitioneren gebruikt, moet u handmatig partition locaties opgeven bij het toevoegen van partities. Handmatig opgeven van partities kan ook latentie verminderen in vergelijking met MSCK REPAIR
syntaxis, met name voor tables met een groot aantal partities. In het volgende syntaxisvoorbeeld ziet u hoe u een partitiontoevoegt:
ALTER TABLE <table-name>
ADD PARTITION (<partition-column-name> = <partition-column-value>)
LOCATION 'abfss://<bucket-path>/<table-directory>/<partition-directory>';
U kunt ook de ALTER TABLE
syntaxis gebruiken om partities te verwijderen, de naam te wijzigen, te herstellen en om set-locaties voor partities te beheren. Zie ALTER TABLE ... PARTITION.
Nieuwe partition metagegevens uitschakelen
De Spark-conf waarmee wordt bepaald of nieuwe tablespartition metagegevens gebruiken, 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;
Dus, hiermee wordt er alleen gecontroleerd of tables, gemaakt in de SparkSession, de partition-metagegevens gebruikt. Als u partition metagegevens wilt uitschakelen op een table die gebruikmaakt van het gedrag, moet u de table verwijderen en opnieuw maken in een SparkSession waarvoor de Spark-conf niet is ingeschakeld.
Notitie
Hoewel u geen lees- of schrijfbewerkingen kunt uitvoeren op tables met de partition-metagegevens ingeschakeld in Databricks Runtime 12.2 LTS of lager, kunt u DROP
of CREATE OR REPLACE TABLE
instructies uitvoeren voor deze tables als u voldoende bevoegdheden hebt in Unity Catalog.
Beperkingen
De volgende beperkingen gelden:
- U kunt niet lezen of schrijven naar tables met partition metagegevens ingeschakeld bij gebruik van Databricks Runtime 12.2 LTS of lager.
- Als u een table leest met behulp van het mappad, worden alle partities geretourneerd, inclusief partities die handmatig zijn toegevoegd of verwijderd.
- Als u records in een tableinsert of overschrijft met behulp van een pad in plaats van een table naam, worden de metagegevens van de partition niet vastgelegd.
- Avro-bestandsindeling wordt niet ondersteund.