Merk
Tilgang til denne siden krever autorisasjon. Du kan prøve å logge på eller endre kataloger.
Tilgang til denne siden krever autorisasjon. Du kan prøve å endre kataloger.
Filhopping er en Delta Lake-leseoptimalisering som lar Spark-motoren unngå å skanne datafiler som ikke kan inneholde matchende rader. Fordi motoren leser mindre data, kjører spørringene raskere og bruker færre I/O-ressurser.
Hvordan filhopp fungerer
Hver gang en datafil skrives til en Delta-tabell, registrerer Delta Lake kolonnestatistikk per fil i transaksjonsloggen. Disse statistikkene inkluderer minimumsverdi, maksimumsverdi og nullantall for hver indeksert kolonne i den filen.
Når en spørring inkluderer et filterpredikat, sammenligner motoren predikatverdien med min/max-området lagret for hver fil. Hvis predikatverdien faller utenfor området for en fil, hoppes den filen helt over – det er ikke nødvendig å åpne eller skanne den.
For eksempel, vurder en sales tabell delt opp i fem datafiler etter datointervaller:
| Filen | Min/max-statistikk | Resultat for WHERE date = '2024-03-15' |
|---|---|---|
| Fil 1 | date [2024-01-01 .. 2024-02-28] |
Hoppet over |
| Fil 2 | date [2024-03-01 .. 2024-03-31] |
Les ✓ |
| Fil 3 | date [2024-04-01 .. 2024-05-31] |
Hoppet over |
| Fil 4 | date [2024-06-01 .. 2024-07-31] |
Hoppet over |
| Fil 5 | date [2024-08-01 .. 2024-09-30] |
Hoppet over |
I dette tilfellet hoppes fire av fem filer over—80% mindre data skannet—fordi deres min/max-områder ikke overlapper med filterverdien.
Important
Datatypen til predikatverdien må samsvare med kolonnetypen. En typemismatch kan hindre motoren i å bruke filnivåstatistikk for å hoppe over.
Standard virkemåte
Delta Lake samler automatisk inn filstatistikk med følgende standardinnstillinger:
- Kun de første 32 kolonnene (etter ordinal posisjon) har samlet inn statistikk.
- Statistikk sporet per kolonne per fil: min,maks og null antall
- Å samle statistikk på kolonner med lange strenger er kostbart og gir skriveoverhead, så posisjonering betyr noe.
Tabellegenskapen delta.dataSkippingNumIndexedCols styrer kolonnegrensen. Kolonner over denne terskelen får ikke filnivåstatistikk og kan ikke delta i filhopping.
Kvalifiserte datatyper
Ikke alle kolonnetyper støtter filnivåstatistikk og dermed filhopp. Motoren evaluerer hver kolonnes datatype for å avgjøre om min/max-statistikk kan samles inn.
Alltid kvalifisert (atomtyper)
-
NumericType(ByteType,ShortType, ,IntegerType,LongType,FloatType,DoubleType, )DecimalType DateTypeTimestampTypeTimestampNTZTypeStringType
Betinget kvalifisert
Bemerkning
Følgende typer kan aktiveres ved start i Fabric Spark runtime 2.0 (Delta 4.1)
-
VariantType: nårspark.databricks.delta.variantShredding.collectVariantDataSkippingStatser aktivert. -
ArrayType: nårspark.microsoft.delta.skipping.complexTypes.enableder aktivert og elementtypen selv er kvalifisert. -
MapType: nårspark.microsoft.delta.skipping.complexTypes.enableder aktivert og både nøkkel- og verditypene er kvalifisert.
Ikke kvalifisert
BinaryTypeBooleanType-
StructType(som helhet—bladfeltene inne i strukturer vurderes individuelt) NullType
Maksimer kolonnedekning
For å få mest mulig ut av filhopping, sørg for at kolonnene du filtrerer på oftest dekkes av filstatistikk.
Plasser ofte filtrerte kolonner først
Plasser kolonner som oftest forekommer i WHERE leddsetninger, join-nøkler og filtreringspredikater i de første 32 ordinalposisjonene i tabellskjemaet. Flytt lange kolonner eller kolonner med lav selektivitet forbi posisjon 32 for å unngå å kaste bort skriveoverhead på statistikk som sjelden hjelper.
Øk antall indekserte kolonner
Hvis tabellen din har mer enn 32 kolonner som drar nytte av statistikk, øk standardgrensen:
ALTER TABLE table_name SET TBLPROPERTIES ('delta.dataSkippingNumIndexedCols' = '40')
Bemerkning
Å øke antall indekserte kolonner legger til skriveoverhead for hver datafil. Øk denne verdien kun når de ekstra kolonnene ofte brukes i filterpredikater.
Spesifiser eksakte kolonner for statistikk
Bruk delta.dataSkippingStatsColumns for eksplisitt å kontrollere hvilke kolonner som får filstatistikk, uavhengig av ordinal posisjon:
ALTER TABLE table_name SET TBLPROPERTIES ('delta.dataSkippingStatsColumns' = 'col1,col2')
Når delta.dataSkippingStatsColumns er satt, samles statistikk kun inn i de angitte kolonnene. Denne tilnærmingen gir deg finkornet kontroll over avveiningen mellom skrivekostnad og lesefordel.
Kombiner filhopp med dataoppsett
Filhopping fungerer best når relaterte verdier er samlet i de samme filene. Teknikker som ZORDER BY væskeklynging reorganiserer fysisk data slik at rader med lignende kolonneverdier ender opp i de samme filene. Å plassere lignende verdier strammer inn min/max-områdene per fil, noe som øker prosentandelen filer motoren kan hoppe over for et gitt filter.
For mer om optimalisering av dataoppsett, se tabellkomprimering, væskeklynging og Z-orden.