Filspringning for delta-tabeller

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
  • DateType
  • TimestampType
  • TimestampNTZType
  • StringType

Betinget berettiget

Bemærkning

Følgende typer kan aktiveres ved start i Fabric Spark runtime 2.0 (Delta 4.1)

  • VariantType: når spark.databricks.delta.variantShredding.collectVariantDataSkippingStats er aktiveret.
  • ArrayType: når spark.microsoft.delta.skipping.complexTypes.enabled aktiveres, og elementtypen selv er berettiget.
  • MapType: når spark.microsoft.delta.skipping.complexTypes.enabled er aktiveret, og både nøgle- og værdityperne er berettigede.

Ikke berettiget

  • BinaryType
  • BooleanType
  • 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.

ALTER TABLE table_name ALTER COLUMN long_str_col AFTER last_indexed_col

Ø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.