Dela via


Partitionsidentifiering för externa tabeller

Den här artikeln beskriver standardstrategin för partitionsidentifiering för externa Unity Catalog-tabeller och en valfri inställning för att aktivera en partitionsmetadatalogg som gör partitionsidentifieringen konsekvent med Hive-metaarkivet.

Databricks rekommenderar att du aktiverar loggning av partitionsmetadata för bättre läshastigheter och frågeprestanda för externa Unity Catalog-tabeller med partitioner.

Vilken är standardstrategin för partitionsidentifiering för Unity Catalog?

Som standard listar Unity Catalog rekursivt alla kataloger på tabellplatsen för att automatiskt identifiera partitioner. För stora tabeller med många partitionskataloger kan det öka svarstiden för många tabellåtgärder.

Använda loggning av partitionsmetadata

Viktigt!

Den här funktionen finns som allmänt tillgänglig förhandsversion.

I Databricks Runtime 13.3 LTS och senare kan du aktivera loggning av partitionsmetadata, vilket är en partitionsidentifieringsstrategi för externa tabeller som är registrerade i Unity Catalog. Det här beteendet överensstämmer med den partitionsidentifieringsstrategi som används i Hive-metaarkivet. Det här beteendet påverkar endast externa Unity Catalog-tabeller som har partitioner och använder Parquet, ORC, CSV eller JSON. Databricks rekommenderar att du aktiverar det nya beteendet för bättre läshastigheter och frågeprestanda för dessa tabeller.

Viktigt!

Tabeller med loggning av partitionsmetadata aktiverat visar en beteendeförändring för partitionsidentifiering. I stället för att automatiskt genomsöka tabellplatsen efter partitioner respekterar Unity Catalog endast partitioner som registrerats i partitionsmetadata. Se Lägga till, släppa eller reparera partitionsmetadata manuellt.

Det här beteendet blir standard i en framtida Databricks Runtime-version. Tabeller med den här funktionen aktiverade kan bara läsas eller skrivas med Databricks Runtime 13.3 LTS och senare.

Kommentar

Du måste försöka köra frågor mot en tabell med Databricks Runtime 12.2 LTS eller nedan för att bekräfta att den inte använder det nya beteendet för partitionsloggen.

Aktivera loggning av partitionsmetadata

Om du vill aktivera loggning av partitionsmetadata i en tabell måste du aktivera en Spark-konfiguration för din aktuella SparkSession och sedan skapa en extern tabell. Den här inställningen krävs bara i SparkSession som skapar tabellen. När du har skapat en tabell med loggning av partitionsmetadata aktiverad bevaras den här inställningen som en del av tabellmetadata och funktionen används i alla efterföljande arbetsbelastningar.

Följande syntax visar hur du använder SQL för att ange en Spark-konfiguration i en notebook-fil. Du kan också ange Spark-konfigurationer när du konfigurerar beräkning.

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

Viktigt!

Du kan bara läsa och skriva tabeller med loggning av partitionsmetadata aktiverat i Databricks Runtime 13.3 LTS och senare. Om du har arbetsbelastningar som körs på Databricks Runtime 12.2 LTS eller lägre som måste interagera med tabeller ska du inte använda den här inställningen.

Externa tabeller tar inte bort underliggande datafiler när du släpper dem. Databricks rekommenderar att du använder CREATE OR REPLACE syntax för att uppgradera tabeller för att använda loggning av partitionsmetadata, som i följande exempel:

CREATE OR REPLACE TABLE <catalog>.<schema>.<table-name>
USING <format>
PARTITIONED BY (<partition-column-list>)
LOCATION 'abfss://<bucket-path>/<table-directory>';

Unity Catalog tillämpar regler för sökvägs överlappningar för tabeller och volymer. Du kan inte registrera en ny Unity Catalog-tabell på en samling datafiler om det redan finns en tabell på den platsen.

Arbeta med tabeller med partitionsmetadata

Databricks rekommenderar att du använder tabellnamn i alla läsningar och skrivningar mot alla tabeller som är registrerade i Unity Catalog. För tabeller med partitionsmetadata garanterar detta att nya partitioner som läggs till i en tabell registreras i Unity Catalog och att frågor mot tabellen läser alla registrerade partitioner.

Om du använder sökvägsbaserade mönster för läsningar eller skrivningar kan partitioner ignoreras eller inte registreras i Unity Catalog-metaarkivet. Se Begränsningar.

Lista partitioner

Använd följande kommando för att visa alla partitioner som är registrerade i Unity Catalog som partitionsmetadata:

SHOW PARTITIONS <table-name>

Om du vill kontrollera om en enskild partition är registrerad i Unity Catalog använder du följande kommando:

SHOW PARTITIONS <table-name>
PARTITION (<partition-column-name> = <partition-column-value>)

Lägga till, släppa eller reparera partitionsmetadata manuellt

Unity Catalog kräver att alla partitioner för externa tabeller finns i katalogen som registrerats med hjälp av -satsen under tabellregistreringen LOCATION .

När partitionsmetadata har aktiverats inaktiveras automatisk identifiering av partitioner på tabellplatsen. Om externa system skriver data till tabellplatsen eller om du använder sökvägsbaserade skrivningar för att lägga till eller skriva över poster i tabellen måste du reparera partitionsmetadata manuellt.

Azure Databricks använder Hive-partitionering för att lagra tabeller som backas upp av Parquet, ORC, CSV och JSON. Hive-formatpartitioner innehåller nyckel/värde-par som är anslutna med ett likhetstecken i partitionskatalogen, till exempel year=2021/month=01/.

Om din tabell använder Hive-partitionering kan du använda MSCK REPAIR för att synkronisera partitionsmetadata i Unity Catalog med partitioner som finns på tabellplatsen. Följande syntaxexempel visar vanliga åtgärder:

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

Se REPARATIONSTABELL.

Ange sökvägar för andra partitionstyper manuellt

Om tabellen inte använder Hive-partitionering måste du manuellt ange partitionsplatser när du lägger till partitioner. Att ange partitioner manuellt kan också minska svarstiden jämfört med MSCK REPAIR syntax, särskilt för tabeller med ett stort antal partitioner. Följande syntaxexempel visar hur du lägger till en partition:

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

Du kan också använda ALTER TABLE syntax för att släppa, byta namn på, återställa och ange platser för partitioner. Se ALTER TABLE ... PARTITION.

Inaktivera nya partitionsmetadata

Spark-konfigurationen som styr om nya tabeller använder partitionsmetadata är inaktiverad som standard. Du kan också uttryckligen inaktivera det här beteendet. Följande syntax använder SQL för att inaktivera Spark-konfigurationen:

SET spark.databricks.nonDelta.partitionLog.enabled = false;

Detta styr endast om tabeller som skapats i SparkSession använder partitionsmetadata eller inte. Om du vill inaktivera partitionsmetadata i en tabell som använder beteendet måste du släppa och återskapa tabellen i en SparkSession som inte har Spark-konfigurationen aktiverad.

Kommentar

Även om du inte kan läsa eller skriva till tabeller med partitionsmetadata aktiverade i Databricks Runtime 12.2 LTS eller nedan, kan du köra DROP eller CREATE OR REPLACE TABLE instruktioner mot dessa tabeller om du har tillräcklig behörighet i Unity Catalog.

Begränsningar

Följande begränsningar finns:

  • Du kan inte läsa eller skriva till tabeller med partitionsmetadata aktiverade med Databricks Runtime 12.2 LTS eller nedan.
  • Om du läser en tabell med hjälp av katalogsökvägen returneras alla partitioner, inklusive alla som har lagts till eller tagits bort manuellt.
  • Om du infogar eller skriver över poster i en tabell med hjälp av en sökväg i stället för ett tabellnamn registreras inte partitionsmetadata.
  • Avro-filformat stöds inte.