Bemærk
Adgang til denne side kræver godkendelse. Du kan prøve at logge på eller ændre mapper.
Adgang til denne side kræver godkendelse. Du kan prøve at ændre mapper.
Hive-stil opdeling opdeler en Delta-tabel i fysiske undermapper baseret på værdierne af en eller flere partitionskolonner. Hver unik kombination af partitionskolonneværdier skaber en separat mappe. Dette layout muliggør beskæring af partitioner: motoren springer hele mapper over, når en forespørgsel filtreres på partitionskolonnen.
Tip
For de fleste arbejdsbelastninger, der starter i Fabric Runtime 2.0, anbefales liquid clustering som den anbefalede datalayoutstrategi for læseydelse. Den primære grund til at bruge partitionering er at muliggøre samtidige skriveoperationer, der ikke er i konflikt.
For fuld vejledning om væskeklyngedannelse, se Væskeklyngedannelse.
Hvornår skal man bruge partitionering
Den primære anvendelse af partitionering i Delta Lake er at muliggøre samtidige skriveoperationer, der ikke konflikter. Delta Lake bruger optimistisk samtidighedskontrol, og to operationer, der berører de samme filer, kan konflikte. Partitionering gør det muligt for samtidige operationer at målrette disjunkte sæt filer ved at operere på separate partitioner.
Brug partitionering når:
- Du har samtidige forfattere , der skal opdatere, slette eller flette ind i den samme tabel uden konflikt—for eksempel flere pipelines, der behandler forskellige forretningsenheder eller regioner samtidig.
- Din partitionskolonne har lav til moderat kardinalitet (titusinder til hundreder af forskellige værdier, ikke tusinder). Bemærk: større tabeller kan rumme flere partitioner. Mål mindst 1 GB data i hver partition.
- Partitionsværdier stemmer overens med dine skrive-mønstre—hver forfatter retter naturligt sig mod en specifik partition.
Vigtigt!
For filspring og læseydelse alene er væskeklyngedannelse mere effektivt end partitionering. Liquid clustering eliminerer risikoen for små filer fra partitionskolonner med høj kardinalitet og lader dig ændre clusteringstrategi gennem bordets livscyklus. Vælg opdeling primært, når du skal isolere samtidige forfattere.
Opret en partitioneret tabel
CREATE TABLE sales.orders (
order_id BIGINT,
order_date DATE,
region STRING,
amount DECIMAL(10,2)
)
USING DELTA
PARTITIONED BY (region)
Partitionering og samtidige skrivninger
Partitionering er den primære mekanisme i Delta Lake til at undgå konflikter mellem samtidige skriveoperationer. Når en tabel er opdelt, opererer operationer, der målretter forskellige partitioner, på adskilte sæt filer og konflikter ikke med hinanden.
For eksempel konflikter to samtidige MERGE INTO operationer på en tabel opdelt med region ikke i konflikt, så længe hver måler et forskelligt område—forudsat at partitionskolonnen eksplicit er inkluderet i sammenfletningsbetingelsen:
-- Pipeline A: processes North America only
MERGE INTO sales.orders AS target
USING staged_orders AS source
ON target.order_id = source.order_id
AND target.region = 'NA'
AND source.region = 'NA'
WHEN MATCHED THEN UPDATE SET *
WHEN NOT MATCHED THEN INSERT *
Uden partitionering – eller uden at inkludere partitionkolonnen i operationsbetingelsen – kan de samme operationer konflikte, selvom de logisk ændrer forskellige rækker. Partitionskolonnen skal optræde i selve sammenfletningsbetingelsen, ikke kun i kildedataene. Uden den kan Delta Lake ikke ved valideringstidspunktet afgøre, at de to operationer berørte disjunkte filsæt.
For en komplet guide til konflikttyper og løsningsstrategier, se Concurrency control.
Almindelige faldgruber
-
Kolonner med høj kardinalitet (for eksempel
user_idmed millioner af værdier) skaber tusindvis af små mapper og filer, hvilket forringer både skrive- og læseydelsen.- Datokolonner bør vælges med forsigtighed. For mange tabeller resulterer opdeling efter datokolonne i for mange små partitioner. Mål mindst 1 GB data i hver partition.
- Partitionskolonner kan ikke ændres efter tabeloprettelsen uden at omskrive hele tabellen.
- Problemet med små filer er almindeligt ved streaming eller hyppige tilføjelser til mange partitioner, fordi hver skrivning opretter mindst én fil pr. partition.
- Partitionering og væskeklyngedannelse er inkompatible på samme tabel. Du skal vælge én strategi.
Sammenlign partitionering og væskeklyngedannelse
| Aspekt | Hive-stil opdeling | Væske-klustring |
|---|---|---|
| Bedst til | Samtidig forfatterisolation | Generel filspring- og læseoptimering |
| Granulering | Én mappe pr. særskilt værdi (eller kombination) | Filniveau-værdiintervaller, ingen mapper |
| Høj kardinalitet | Opretter tusindvis af små filer/mapper | Håndterer naturligt; Arkiverer data i filer i den rette størrelse |
| Kolonneændringer | Kræver fuld tabelomskrivning |
ALTER TABLE CLUSTER BY gælder på næste OPTIMIZE |
| Skrivesti | Partitionskolonnen skal være kendt ved skrivetidspunktet | Enhver kolonne kan klynges bagefter |
| Samtidige skrivninger | Disjunkte opdelinger undgår konflikter | Kun med bilag uden konflikter; opdateringer/sletninger/sammenfletninger kan komme i konflikt på upartitionerede tabeller |
| Lille fil-problem | Almindeligt med streaming eller hyppige indsæt | Styret ved OPTIMIZE kompaktering |