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.
Delta-tabeller i Microsoft Fabric understøtter flere forbrugsmotorer, hver med forskellige ydelseskarakteristika og optimeringskrav. Denne guide giver en omfattende ramme for at forstå, hvordan tabeller skrevet af én motor forbruges af andre, og hvordan man optimerer strategier for tabelvedligeholdelse derefter.
At forstå forholdet mellem skrivemønstre og læseydelse på tværs af forskellige motorer er essentielt for at opbygge effektive dataplatforme. Målet er at sikre, at dataproducenter skaber tabellayouts, der optimerer læseydelsen for downstream-forbrugere, uanset om disse forbrugere bruger Spark, SQL-analyseendpoint, Power BI Direct Lake eller Warehouse.
Skriv og læs scenariematrix
Følgende tabel opsummerer de forventede præstationskarakteristika for almindelige skrive- og læsekombinationer sammen med anbefalede optimeringsstrategier. Brug denne matrix til at identificere dit scenarie og forstå den relevante vejledning.
| Skrivemetode | Læsemotor | Forventede huller | Anbefalet strategi |
|---|---|---|---|
| Spark-batch | Spark | Ingen huller | Standard Spark-skrivekonfigurationer er tilstrækkelige |
| Spark-batch | SQL Analytics-slutpunkt | Ingen huller | Aktivér auto-komprimering og optimer-skrivning |
| Spark-streaming | Spark | Små filer mulige | Autokomprimering og optimering-skrivning med planlagt OPTIMIZE |
| Spark-streaming | SQL Analytics-slutpunkt | Små filer og kontrolpunkter | Auto-komprimering, optimer-skriv,split medallion-lag |
| Lagersted | Spark | Ingen huller | Systemstyret optimering håndterer layout |
| Lagersted | SQL Analytics-slutpunkt | Ingen huller | Systemstyret optimering håndterer layout |
Optimale fillayouts efter motor
Forskellige forbrugsmotorer har forskellige optimale fillayouts. At forstå disse mål hjælper dig med at konfigurere drifts- og vedligeholdelsesjobs passende.
Vejledning for SQL-analyse-endpoint og Fabric Data Warehouse
For optimal ydeevne med SQL-analyseendpointet og Warehouse, brug følgende indstillinger:
- Målfilstørrelse: Omkring 400 MB pr. fil
- Rækkegruppestørrelse: Omkring 2 millioner rækker pr. rækkegruppe
- V-Order: Forbedrer læseydelsen med 10%
Et lager bruger disse kriterier til at finde kandidater til kompaktering:
- Overhead for tabelfilerne er mere end 10%
- Tabellens logisk slettede rækker er mere end 10%
- Bordstørrelsen er større end 1.024 rækker
Under komprimeringsudførelsen udvælger processen kandidater baseret på disse kriterier:
- Enhver fil er mindre end 25% af den ideelle størrelse (baseret på rækkeantal)
- Enhver fil har mere end 20% slettede rækker
Spark
Spark er robust, når man læser forskellige filstørrelser. For optimal ydeevne:
- Målfilstørrelse: 128 MB til 1 GB afhængigt af tabelstørrelsen
- Rækkegruppestørrelse: 1 million til 2 millioner rækker pr. rækkegruppe
- V-Order: Ikke påkrævet for Spark-læseydelse (kan tilføje 15-33% skriveoverhead)
Spark-læsninger drager fordel af adaptiv målfilstørrelse, som automatisk justeres baseret på tabelstørrelse:
- Tabeller under 10 GB: 128 MB mål
- Tabeller over 10 TB: Op til 1 GB mål
Power BI Direct Lake
For optimal Direct Lake-ydelse:
- Målrækkegruppestørrelse: 8 millioner eller flere rækker pr. rækkegruppe for bedste ydeevne
- V-Order: Kritisk for 40-60% forbedring i cold-cache-forespørgsler
- Filantal: Minimer filantal for at reducere transkodningsoverhead
- Konsistente filstørrelser: Vigtigt for forudsigelig forespørgselsydelse
Direct Lake-semantiske modeller præsterer bedst, når:
- Kolonnedata er V-ordnet for VertiPaq-kompatibel komprimering
- Rækkegrupper er store nok til effektiv ordbogssammenlægning
- Deletionsvektorer minimeres gennem almindelig komprimering
For mere information, se Forstå Direct Lake-forespørgselsydelse.
Mirroring
Spejling automatisk skalerer filer baseret på tabelvolumen:
| Tadelstørrelse | Rækker pr. rækkegruppe | Rækker pr. fil |
|---|---|---|
| Lille (op til 10 GB) | 2 millioner | 10 millioner |
| Medium (10 GB til 2,56 TB) | 4 millioner | 60 millioner |
| Stort (over 2,56 TB) | 8 millioner | 80 millioner |
Skrivemønstre og konfigurationer
Spark-skrivemønstre
Spark-skrivninger bruger følgende standardkonfigurationer:
| Konfiguration | Standardværdi | Beskrivelse |
|---|---|---|
spark.microsoft.delta.optimizeWrite.fileSize |
128 MB | Målfilstørrelse for optimerede skrivninger |
spark.databricks.delta.optimizeWrite.enabled |
Det varierer efter profil | Muliggør automatisk filkoalescing |
spark.databricks.delta.autoCompact.enabled |
Deaktiveret | Muliggør post-write-komprimering |
spark.sql.files.maxRecordsPerFile |
Ubegrænset | Maksimale poster pr. fil |
For at konfigurere Spark-skrivninger til downstream SQL-forbrug:
# Enable optimize write for better file layout
spark.conf.set('spark.databricks.delta.optimizeWrite.enabled', 'true')
# Enable auto-compaction for automatic maintenance
spark.conf.set('spark.databricks.delta.autoCompact.enabled', 'true')
For mere information om ressourceprofiler og deres standardindstillinger, se Konfigurér ressourceprofilkonfigurationer.
Lagerskrivningsmønstre
Warehouse optimerer automatisk datalayoutet under skrivninger:
- V-Order er aktiveret som standard for læseoptimering.
- Automatisk kompaktering kører som en baggrundsproces.
- Checkpoint-styring håndteres automatisk.
Lageret producerer filer optimeret til SQL-forbrug uden manuel indgriben. Tabeller skrevet af Warehouse er iboende optimeret til både SQL-analyseendpoint og Warehouse-læsninger.
Bordvedligeholdelsesoperationer
OPTIMEER-kommandoen
Kommandoen OPTIMIZE samler små filer til større filer:
-- Basic optimization
OPTIMIZE schema_name.table_name
-- Optimization with V-Order for Power BI consumption
OPTIMIZE schema_name.table_name VORDER
-- Optimization with Z-Order for specific query patterns
OPTIMIZE schema_name.table_name ZORDER BY (column1, column2)
Vigtigt!
Kommandoen OPTIMIZE er en Spark SQL-kommando. Du skal køre det i Spark-miljøer som notesbøger, Spark-jobdefinitioner eller Lakehouse Maintenance-grænsefladen. SQL analytics-endpointet og Warehouse SQL-forespørgselseditoren understøtter ikke denne kommando.
For mere information, se Tabel kompaktering.
Automatisk komprimering
Autokomprimering evaluerer automatisk partitionens sundhed efter hver skriveoperation og udløser synkron optimering, når filfragmentering opdages:
# Enable at session level
spark.conf.set('spark.databricks.delta.autoCompact.enabled', 'true')
# Enable at table level
spark.sql("""
ALTER TABLE schema_name.table_name
SET TBLPROPERTIES ('delta.autoOptimize.autoCompact' = 'true')
""")
Brug automatisk komprimering til indtastningspipelines med hyppige små skrivninger (streaming eller microbatch) for at undgå manuel planlægning og holde filer komprimeret automatisk.
Autokomprimering og optimeret skrivning giver typisk de bedste resultater, når de bruges sammen. Optimert skrivning reducerer antallet af små filer, der skrives, og automatisk komprimering håndterer den resterende fragmentering.
For mere information, se Auto kompaktering.
Optimer skrivning
Optimer skrivning reducerer overhead for små filer ved at udføre pre-write komprimering, hvilket genererer færre og større filer:
# Enable at session level
spark.conf.set('spark.databricks.delta.optimizeWrite.enabled', 'true')
# Enable at table level
spark.sql("""
ALTER TABLE schema_name.table_name
SET TBLPROPERTIES ('delta.autoOptimize.optimizeWrite' = 'true')
""")
Optimere skrivning er gavnligt for:
- Partitionerede tabeller
- Borde med hyppige små indsatser
- Operationer, der berører mange filer (
MERGE,UPDATE, )DELETE
Pre-write kompaktion (optimer, skriv) er generelt billigere end post-write komprimering (optimering). For mere information, se Optimer skrivning.
VAKUUM-kommando
Kommandoen VACUUM fjerner gamle filer, som en Delta-tabellog ikke længere refererer til:
-- Remove files older than the default retention period (7 days)
VACUUM schema_name.table_name
-- Remove files older than specified hours
VACUUM schema_name.table_name RETAIN 168 HOURS
Standardopbevaringsperioden er syv dage. Kortere tilbageholdelsesperioder påvirker Deltas tidsrejsemuligheder og kan forårsage problemer med samtidige læsere eller forfattere.
For mere information, se vedligeholdelse af Lakehouse-tabelen.
V-ordensoptimering
V-Order er en skrivetidsoptimering, der anvender VertiPaq-kompatibel sortering, kodning og komprimering på Parquet-filer:
- Power BI Direct Lake: 40-60% forbedring i cold-cache-forespørgsler
- SQL analytics endpoint og Warehouse: Cirka 10% forbedring i læseydelsen
- Spark: Ingen iboende læsefordel; 15-33% langsommere skrivninger
Hvornår skal V-Order aktiveres
V-Order giver størst fordel for:
- Guldlagstabeller, der betjener Power BI Direct Lake
- Tabeller ofte forespurgt gennem SQL analytics-endpointet
- Læseintensive arbejdsbelastninger, hvor skriveydelsen er mindre kritisk
Hvornår skal man undgå V-Order
Overvej at deaktivere V-Order for:
- Bronzelagstabeller fokuserede på indtagelseshastighed
- Spark-til-Spark pipelines, hvor SQL og Power BI ikke forbruger dataene
- Skrivetunge arbejdsbelastninger, hvor datalatens er kritisk
Konfigurér V-Order
V-Order er deaktiveret som standard i nye Fabric-arbejdsområder. Aktivering:
# Enable at session level (default for all writes)
spark.conf.set('spark.sql.parquet.vorder.default', 'true')
# Enable at table level
spark.sql("""
ALTER TABLE schema_name.table_name
SET TBLPROPERTIES ('delta.parquet.vorder.enabled' = 'true')
""")
For selektivt at anvende V-Order baseret på Direct Lake-forbrug, bør man overveje at automatisere V-Order aktivering for tabeller, der bruges i Direct Lake semantiske modeller. Tabeller, der ikke forbruges af Direct Lake, kan forblive uden V-Order for bedre skriveydelse.
Du kan få flere oplysninger under Tabeloptimering af Delta Lake og V-Order.
Væskeklyngedannelse og Z-orden
Flydende klynger
Liquid Clustering er den anbefalede tilgang til dataorganisering. I modsætning til traditionel partitionering er Liquid Clustering:
- Tilpasser sig ændrede forespørgselsmønstre
- Kræver
OPTIMIZEanvendelse af clustering - Giver bedre filspring for filtrerede forespørgsler
Aktiver Liquid Clustering ved tabeloprettelse:
CREATE TABLE schema_name.table_name (
id INT,
category STRING,
created_date DATE
) CLUSTER BY (category)
Z-orden
Z-Order samler relaterede data i de samme filer, så du får bedre forespørgselsydelse på filterprædikater.
OPTIMIZE schema_name.table_name ZORDER BY (column1, column2)
Brug Z-Order, når:
- Din tabel er partitioneret, fordi Liquid Clustering ikke virker med partitionerede tabeller.
- Dine forespørgsler filtreres ofte på to eller flere kolonner samtidig.
- Dine prædikater er selektive nok til at drage fordel af filspring.
Medaljonarkitekturanbefalinger
Medaljonarkitekturen (bronze-, sølv- og guldlag) giver en ramme til optimering af strategier for bordvedligeholdelse baseret på formålet med hvert lag.
Bronzelag (landingszone)
Bronze-tabeller fokuserer på skriveydelse og lav-latens indlæsning:
- Optimeringsprioritet: Indlæsningshastighed over læseydelse
- Partitionering: Acceptabelt, men frarådes for nye implementeringer
- Små filer: Acceptabelt, da fokus er på indtagelseshastighed
- V-Order: Ikke anbefalet (tilføjer skriveoverhead)
- Auto-komprimering: Aktiver for at reducere små filer, men kan ofres for at opnå indtastningshastighed
- Sletningsvektorer: Aktivér for tabeller med sammenfletningsmønstre
Bronze-tabeller bør ikke leveres direkte til SQL analytics-endpoint- eller Power BI Direct Lake-forbrugere.
Sølvlag (kurateret zone)
Sølvtabeller balancerer skrive- og læseydelse:
- Optimeringsprioritet: Balance mellem indlæsning og forespørgselsydelse
- Filstørrelser: Moderat (128-256 MB) for at understøtte både skrive- og læseoperationer
- V-Order: Valgfrit; muliggør hvis SQL analytics endpoint eller Power BI forbrug er betydeligt
- Liquid Clustering eller Z-orden: Anbefales for at forbedre forespørgselsydelsen
- Auto-komprimering og optimeringsskrivning: Aktiver baseret på nedstrøms krav
- Sletningsvektorer: Aktiver for tabeller med hyppige opdateringer
- Planlagt OPTIMIZE: Kør aggressivt for at opretholde fillayoutet
Guldlag (serveringszone)
Guldtabeller prioriterer læseydelse til slutbrugerens forbrug:
- Optimeringsprioritet: Læseydelse for analyser
- Filstørrelser: Stor (400 MB til 1 GB) for optimal SQL- og Power BI-ydelse
- V-Order: Påkrævet for Power BI Direct Lake; fordelagtig for SQL-analyse-endpoint
- Flydende klyngedannelse: Påkrævet for optimal filspringning
- Optimize-write: Påkrævet for ensartede filstørrelser
- Planlagt OPTIMERING: Kør aggressivt for at opretholde det optimale layout
Optimer guldtabeller forskelligt afhængigt af hovedforbrugsmotoren:
| Forbrugsmotor | V-rækkefølge | Målfilstørrelse | Rækkegruppestørrelse |
|---|---|---|---|
| SQL Analytics-slutpunkt | Ja | 400 MB | 2 millioner rækker |
| Power BI Direct Lake | Ja | 400 MB til 1 GB | 8+ millioner rækker |
| Spark | Valgfrit | 128 MB til 1 GB | 1-2 millioner rækker |
Flere tabelkopier
Det er acceptabelt at vedligeholde flere kopier af tabeller, der er optimeret til forskellige forbrugsmønstre:
- Et sølvbord optimeret til Spark-behandling
- En guldtabel optimeret til SQL-analyse-endpoint og Power BI Direct Lake
- Datapipelines, der transformerer og placerer den rette struktur på hvert lag
Lagring er billig i forhold til compute. Optimering af tabeller for deres forbrugsmønstre giver en bedre brugeroplevelse end at forsøge at betjene alle forbrugere fra et enkelt tabellayout.
Identificer tabelens sundhed
Før du optimerer tabeller, vurder den aktuelle tabels sundhed for at forstå optimeringsbehov.
Inspicer Parquet-filer direkte
Du kan gennemse tabelmappen i OneLake for at inspicere størrelserne på individuelle Parquet-filer. Sunde tabeller har jævnt fordelte filstørrelser. Se efter:
- Konsistente filstørrelser: Filerne bør have omtrent samme størrelse (inden for 2x af hinanden).
- Ingen ekstremt små filer: Filer under 25 MB indikerer fragmentering.
- Ingen ekstremt store filer: Filer over 2 GB kan reducere parallelisme.
Ujævn filstørrelsesfordeling indikerer ofte manglende komprimering eller inkonsistente skrivemønstre på tværs af forskellige jobs.
OPTIMER DRY Run i Spark SQL
Brug muligheden DRY RUN for at forhåndsvise, hvilke filer der er egnede til optimering uden at udføre komprimeringen:
-- Preview files eligible for optimization
OPTIMIZE schema_name.table_name DRY RUN
Kommandoen returnerer en liste over filer, der ville blive omskrevet under optimeringen. Brug dette til at:
- Vurder optimeringens omfang, før du kører den.
- Forstå filfragmentering uden at ændre tabellen.
- Estimerer optimeringstiden baseret på antallet af berørte filer.
Filstørrelsesfordeling
Brug følgende tilgang til at analysere filstørrelser og fordeling:
from delta.tables import DeltaTable
# Get table details
details = spark.sql("DESCRIBE DETAIL schema_name.table_name").collect()[0]
print(f"Table size: {details['sizeInBytes'] / (1024**3):.2f} GB")
print(f"Number of files: {details['numFiles']}")
# Average file size
avg_file_size_mb = (details['sizeInBytes'] / details['numFiles']) / (1024**2)
print(f"Average file size: {avg_file_size_mb:.2f} MB")
Fordelingen kan være skæv, da filer tæt på tabellens hoved eller fra en bestemt partition måske ikke er optimeret.
Du kan vurdere fordelingen ved at køre en forespørgsel, der grupperer efter tabellens opdelings- eller klyngenøgler.
Bestem optimeringsbehov
Baseret på forbrugsmotoren sammenlignes de faktiske filstørrelser med målstørrelser:
| Motor | Målfilstørrelse | Hvis filerne er mindre | Hvis filerne er større |
|---|---|---|---|
| SQL Analytics-slutpunkt | 400 MB | Kør OPTIMIZE |
Filer er acceptable |
| Power BI Direct Lake | 400 MB til 1 GB | Kør OPTIMIZE VORDER |
Filer er acceptable |
| Spark | 128 MB til 1 GB | Aktivér automatisk komprimering | Filer er acceptable |
Tabelhistorik og transaktionslog
Gennemgå tabellens historik for at forstå skrivemønstre og vedligeholdelsesfrekvens:
-- View table history
DESCRIBE HISTORY schema_name.table_name
-- Check for auto-compaction runs
-- Auto-compaction shows as OPTIMIZE with auto=true in operationParameters
Konfigurationsbedste praksis
Brug tabelegenskaber over sessionskonfigurationer
Tabelegenskaber består på tværs af sessioner og sikrer ensartet adfærd på tværs af alle jobs og forfattere:
# Recommended: Set at table level for consistency
spark.sql("""
CREATE TABLE schema_name.optimized_table (
id INT,
data STRING
)
TBLPROPERTIES (
'delta.autoOptimize.optimizeWrite' = 'true',
'delta.autoOptimize.autoCompact' = 'true',
'delta.parquet.vorder.enabled' = 'true'
)
""")
Sessionsniveau-konfigurationer gælder kun for den aktuelle Spark-session og kan forårsage inkonsistente skrivninger, hvis forskellige sessioner bruger forskellige konfigurationer.
Aktivér adaptiv målfilstørrelse
Adaptiv målfilstørrelse justerer automatisk filstørrelsesmål baseret på tabelstørrelse:
spark.conf.set('spark.microsoft.delta.targetFileSize.adaptive.enabled', 'true')
Denne funktion:
- Starter med mindre filer (128 MB) til små tabeller
- Skalerer op til 1 GB for tabeller over 10 TB
- Re-evaluering automatisk under
OPTIMIZEoperationer
Aktivér fil-niveau kompaktionsmål
Undgå at omskrive tidligere komprimerede filer, når målstørrelserne ændres:
spark.conf.set('spark.microsoft.delta.optimize.fileLevelTarget.enabled', 'true')
Resumé af anbefalinger
| Lag | Auto-komprimering | Optimer-skriv | V-rækkefølge | Flydende klynger | Planlagt OPTIMIZE |
|---|---|---|---|---|---|
| Bronze | Aktiver (valgfrit) | Enable | Nej | Nej | Valgfrit |
| Sølv | Enable | Enable | Valgfrit | Ja | Aggressiv |
| Guld | Enable | Enable | Ja | Ja | Aggressiv |
For specifikke scenarier kan du bruge følgende anbefalinger:
- Spark-to-Spark: Fokuser på optimering af filstørrelse; V-Order valgfrit.
- Spark-to-SQL: Aktiver optimeringsskrivning og autokomprimering; sigt mod 400 MB filer med 2 millioner rækkegrupper.
-
Streaming-indlæsning: Aktiver automatisk komprimering; planlæg yderligere
OPTIMIZEjobs til SQL-brugere. -
Power BI Direct Lake: Aktiver V-orden; mål 8+ millioner rækkegrupper; løb.
OPTIMIZE VORDER