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.
File skipping er en Delta Lake-læseoptimering, der lader Spark-motoren undgå at scanne datafiler, der ikke kan indeholde matchende rækker. Fordi motoren læser mindre data, kører forespørgsler hurtigere og bruger færre I/O-ressourcer.
Sådan fungerer filspring
Hver gang en datafil skrives til en Delta-tabel, registrerer Delta Lake kolonnestatistikker pr. fil i transaktionsloggen. Disse statistikker inkluderer minimumsværdi, maksimum værdi og nultal for hver indekseret kolonne i den fil.
Når en forespørgsel indeholder et filterprædikat, sammenligner motoren prædikatværdien med min/max-området, der er gemt for hver fil. Hvis prædikatværdien ligger uden for intervallet for en fil, springes den fil helt over—der er ikke behov for at åbne eller scanne den.
For eksempel, overvej en sales tabel opdelt i fem datafiler efter datointervaller:
| Filer | Min/max stats | Resultat for WHERE date = '2024-03-15' |
|---|---|---|
| Fil 1 | date [2024-01-01 .. 2024-02-28] |
Sprunget over |
| Fil 2 | date [2024-03-01 .. 2024-03-31] |
Læs ✓ |
| Fil 3 | date [2024-04-01 .. 2024-05-31] |
Sprunget over |
| Fil 4 | date [2024-06-01 .. 2024-07-31] |
Sprunget over |
| Fil 5 | date [2024-08-01 .. 2024-09-30] |
Sprunget over |
I dette tilfælde springes fire ud af fem filer over—80% mindre data scannet—fordi deres min/max-områder ikke overlapper med filterværdien.
Vigtigt!
Datatypen for prædikatværdien skal matche kolonnetypen. En typemismatch kan forhindre motoren i at bruge filniveau-statistikker til at springe over.
Standardadfærd
Delta Lake indsamler automatisk filstatistikker med følgende standardindstillinger:
- Kun de første 32 kolonner (efter ordinal position) har indsamlet statistik.
- Statistikker sporet pr. kolonne pr. fil: min,max og null count
- At indsamle statistikker på lange strengkolonner er dyrt og øger skriveoverhead, så placering betyder noget.
Tabel-egenskaben delta.dataSkippingNumIndexedCols styrer kolonnegrænsen. Kolonner over denne grænse får ikke filniveau-statistikker og kan ikke deltage i filspring.
Kvalificerede datatyper
Ikke alle kolonnetyper understøtter filniveau-statistik og derfor filspring. Motoren evaluerer hver kolonnes datatype for at afgøre, om min/max-statistikker kan indsamles.
Altid berettiget (atomare typer)
-
NumericType(ByteType,ShortType, ,IntegerType,LongType,FloatType,DoubleType, )DecimalType DateTypeTimestampTypeTimestampNTZTypeStringType
Betinget berettiget
Bemærkning
Følgende typer kan aktiveres ved start i Fabric Spark runtime 2.0 (Delta 4.1)
-
VariantType: nårspark.databricks.delta.variantShredding.collectVariantDataSkippingStatser aktiveret. -
ArrayType: nårspark.microsoft.delta.skipping.complexTypes.enabledaktiveres, og elementtypen selv er berettiget. -
MapType: nårspark.microsoft.delta.skipping.complexTypes.enableder aktiveret, og både nøgle- og værdityperne er berettigede.
Ikke berettiget
BinaryTypeBooleanType-
StructType(som helhed—bladfelter inde i strukturer vurderes individuelt) NullType
Maksimer kolonnedækning
For at få mest muligt ud af filspring, skal du sikre dig, at de kolonner, du filtrerer mest, er dækket af filstatistikker.
Placer ofte filtrerede kolonner først
Placer kolonner, der oftest optræder i WHERE klausuler, join-nøgler og filterprædikater, i de første 32 ordinalpositioner i tabelskemaet. Flyt lange strengkolonner eller kolonner med lav selektivitet ud over position 32 for at undgå at spilde skriveoverhead på statistikker, der sjældent hjælper.
Øg antallet af indekserede kolonner
Hvis din tabel har mere end 32 kolonner, der drager fordel af statistikker, øg standardgrænsen:
ALTER TABLE table_name SET TBLPROPERTIES ('delta.dataSkippingNumIndexedCols' = '40')
Bemærkning
At øge antallet af indekserede kolonner tilføjer skriveoverhead for hver datafil. Øg kun denne værdi, når de ekstra kolonner ofte bruges i filterprædikater.
Angiv præcise kolonner for statistik
Brug delta.dataSkippingStatsColumns til eksplicit at styre, hvilke kolonner der får filstatistikker, uanset ordinal position:
ALTER TABLE table_name SET TBLPROPERTIES ('delta.dataSkippingStatsColumns' = 'col1,col2')
Når delta.dataSkippingStatsColumns er sat, indsamles kun statistikker i de angivne kolonner. Denne tilgang giver dig finjusteret kontrol over afvejningen mellem skriveomkostninger og læsefordel.
Kombiner filspring med datalayout
Filspring fungerer bedst, når relaterede værdier er placeret i de samme filer. Teknikker som ZORDER BY væskeklyngedannelse omorganiserer fysisk data, så rækker med lignende kolonneværdier ender i de samme filer. At placere lignende værdier sammen strammer min/max-intervallerne pr. fil, hvilket øger procentdelen af filer, som motoren kan springe over for et givent filter.
For mere om optimering af datalayout, se Tabel kompaktering, væskeklyngedannelse og Z-orden.