Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Partitionering in Hive-stijl verdeelt een Delta-tabel in fysieke submappen op basis van de waarden van een of meer partitiekolommen. Elke unieke combinatie van partitiekolomwaarden maakt een afzonderlijke map. Met deze indeling kunnen partities worden verwijderd: de engine slaat hele mappen over wanneer een query filtert op de partitiekolom.
Tip
Voor de meeste workloads die beginnen in Fabric Runtime 2.0, is liquid clustering de aanbevolen strategie voor gegevensindeling voor leesprestaties. De primaire reden voor het gebruik van partitionering is het inschakelen van gelijktijdige schrijfbewerkingen die niet conflicteren.
Zie Liquid-clustering voor volledige richtlijnen voor liquide clustering.
Wanneer partitionering gebruiken
De primaire use case voor partitioneren in Delta Lake is het inschakelen van gelijktijdige schrijfbewerkingen die niet conflicteren. Delta Lake maakt gebruik van optimistisch gelijktijdigheidsbeheer en twee bewerkingen die dezelfde bestanden aanraken, kunnen conflicteren. Partitionering maakt het mogelijk voor gelijktijdige bewerkingen om niet-aaneengesloten sets bestanden te targeten door te werken op afzonderlijke partities.
Partitionering gebruiken wanneer:
- U hebt gelijktijdige schrijvers die dezelfde tabel moeten bijwerken, verwijderen of samenvoegen zonder conflicten, bijvoorbeeld meerdere pijplijnen die verschillende bedrijfseenheden of regio's tegelijk verwerken.
- De partitiekolom heeft een lage tot gemiddelde kardinaliteit (tientallen tot honderden afzonderlijke waarden, niet duizenden). Opmerking: grotere tabellen kunnen meer partities bevatten. Richt u op ten minste 1 GB aan gegevens in elke partitie.
- Partitiewaarden zijn afgestemd op uw schrijfpatronen. Elke schrijver is van nature gericht op een specifieke partitie.
Important
Voor het overslaan en lezen van bestanden alleen is liquide clustering effectiever dan partitioneren. Liquid clustering elimineert het risico op problemen met kleine bestanden van kolommen met partities met hoge kardinaliteit en stelt u in staat om de clusteringstrategie te wijzigen gedurende de levenscyclus van de tabel. Kies voornamelijk partitionering wanneer u gelijktijdige schrijvers wilt isoleren.
Een gepartitioneerde tabel maken
CREATE TABLE sales.orders (
order_id BIGINT,
order_date DATE,
region STRING,
amount DECIMAL(10,2)
)
USING DELTA
PARTITIONED BY (region)
Partitionering en gelijktijdige schrijfbewerkingen
Partitionering is het primaire mechanisme in Delta Lake om conflicten tussen gelijktijdige schrijfbewerkingen te voorkomen. Wanneer een tabel wordt gepartitioneerd, werken bewerkingen die zijn gericht op verschillende partities, op niet-aaneengesloten sets bestanden en conflicteren ze niet met elkaar.
Twee gelijktijdige MERGE INTO bewerkingen in een tabel die door elkaar region zijn gepartitioneerd, conflicteren bijvoorbeeld niet zolang elke bewerking gericht is op een andere regio, mits de partitiekolom expliciet is opgenomen in de samenvoegvoorwaarde:
-- 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 *
Zonder partitionering, of zonder de partitiekolom in de bewerkingsvoorwaarde op te tellen, kunnen dezelfde bewerkingen conflicteren, zelfs als ze logisch verschillende rijen wijzigen. De partitiekolom moet worden weergegeven in de samenvoegvoorwaarde zelf, niet alleen in de brongegevens. Zonder dit kan Delta Lake niet bepalen op het moment van validatie dat de twee bewerkingen niet aan elkaar gekoppelde bestandssets raakten.
Zie Gelijktijdigheidsbeheer voor een volledige handleiding voor conflicttypen en oplossingsstrategieën.
Veelvoorkomende valkuilen
-
Kolommen met hoge kardinaliteitspartitie (bijvoorbeeld
user_idmet miljoenen waarden) maken duizenden kleine mappen en bestanden, waardoor zowel schrijf- als leesprestaties afnemen.- Datumkolommen moeten zorgvuldig worden gekozen. Voor veel tabellen resulteert partitioneren op een datumkolom in te veel kleine partities. Richt u op ten minste 1 GB aan gegevens in elke partitie.
- Partitiekolommen kunnen niet worden gewijzigd nadat de tabel is gemaakt zonder de hele tabel opnieuw te schrijven.
- Het probleem met kleine bestanden is gebruikelijk bij streaming of frequente toevoegbewerkingen in veel partities, omdat elke schrijfbewerking ten minste één bestand per partitie maakt.
- Partitionering en liquide clustering zijn niet compatibel in dezelfde tabel. U moet één strategie kiezen.
Partitionering en liquide clustering vergelijken
| Aspect | Partitionering in Hive-stijl | Clusteren van vloeistoffen |
|---|---|---|
| Het beste voor | Gelijktijdige schrijverisolatie | Optimalisatie van het overslaan en lezen van bestanden voor algemeen gebruik |
| Granulariteit | Eén map per afzonderlijke waarde (of combinatie) | Waardebereiken op bestandsniveau, geen mappen |
| Hoge kardinaliteit | Hiermee worden duizenden kleine bestanden/mappen gemaakt | Werkt op natuurlijke wijze; slaat gegevens op in bestanden van de juiste grootte |
| Kolomwijzigingen | Vereist herschrijven van volledige tabel |
ALTER TABLE CLUSTER BY is van toepassing op de volgende OPTIMIZE |
| Schrijfpad | Partitiekolom moet bekend zijn bij het schrijven | Elke kolom kan achteraf worden geclusterd |
| Gelijktijdige schrijfbewerkingen | Niet-aaneengesloten partities voorkomen conflicten | Alleen toevoegen zonder conflicten; updates/verwijderingen/samenvoegingen kunnen conflicteren op niet-gepartitioneerde tabellen |
| Probleem met kleine bestanden | Gebruikelijk bij streaming of frequente invoegingen | Beheerd door OPTIMIZE compressie |