Data hoppar över för Delta Lake

Data som hoppar över information samlas in automatiskt när du skriver data till en Delta-tabell. Delta Lake på Azure Databricks drar nytta av den här informationen (lägsta och högsta värden, antal null och totalt antal poster per fil) vid frågetillfället för att ge snabbare frågor.

Kommentar

I Databricks Runtime 13.3 och senare rekommenderar Databricks att du använder klustring för Delta-tabelllayout. Klustring är inte kompatibelt med Z-beställning. Se Använda flytande klustring för Delta-tabeller.

Du måste ha statistik som samlats in för kolumner som används i ZORDER -instruktioner. Se Vad är Z-beställning?.

Ange deltastatistikkolumner

Som standard samlar Delta Lake in statistik över de första 32 kolumnerna som definierats i tabellschemat. För den här samlingen betraktas varje fält i en kapslad kolumn som en enskild kolumn. Du kan ändra det här beteendet genom att ange någon av följande tabellegenskaper:

Tabellegenskap Databricks Runtime stöds beskrivning
delta.dataSkippingNumIndexedCols Alla Databricks Runtime-versioner som stöds Öka eller minska antalet kolumner där Delta samlar in statistik. Beror på kolumnordning.
delta.dataSkippingStatsColumns Databricks Runtime 13.3 LTS och senare Ange en lista med kolumnnamn som Delta Lake samlar in statistik för. dataSkippingNumIndexedColsErsätter .

Tabellegenskaper kan anges när tabellen skapas eller med ALTER TABLE -instruktioner. Se Referens för egenskaper för Delta-tabell.

Uppdatering av den här egenskapen omberäknar inte statistik automatiskt för befintliga data. I stället påverkar det beteendet för framtida statistikinsamling när du lägger till eller uppdaterar data i tabellen. Delta Lake använder inte statistik för kolumner som inte ingår i den aktuella listan med statistikkolumner.

I Databricks Runtime 14.3 LTS och senare kan du manuellt utlösa omberäkningen av statistik för en Delta-tabell med hjälp av följande kommando:

ANALYZE TABLE table_name COMPUTE DELTA STATISTICS

Kommentar

Långa strängar trunkeras under statistikinsamlingen. Du kan välja att undanta långa strängkolumner från statistiksamlingen, särskilt om kolumnerna inte används ofta för filtrering av frågor.

Vad är Z-beställning?

Z-beställning är en teknik för att samplacera relaterad information i samma uppsättning filer. Den här samlokaliteten används automatiskt av Delta Lake på Azure Databricks datahoppande algoritmer. Det här beteendet minskar avsevärt mängden data som Delta Lake på Azure Databricks behöver läsa. Till Z-orderdata anger du de kolumner som ska beställas ZORDER BY i -satsen:

OPTIMIZE events
WHERE date >= current_timestamp() - INTERVAL 1 day
ZORDER BY (eventType)

Om du förväntar dig att en kolumn ska användas ofta i frågepredikat och om kolumnen har hög kardinalitet (dvs. ett stort antal distinkta värden) använder ZORDER BYdu .

Du kan ange flera kolumner för ZORDER BY som en kommaavgränsad lista. Effekten av lokaliteten sjunker dock med varje extra kolumn. Z-beställning på kolumner som inte har statistik som samlats in på dem skulle vara ineffektivt och slöseri med resurser. Det beror på att datahopp kräver kolumnlokal statistik som min, max och antal. Du kan konfigurera statistikinsamling för vissa kolumner genom att ordna om kolumner i schemat, eller så kan du öka antalet kolumner att samla in statistik om.

Kommentar

  • Z-beställning är inte idempotent utan syftar till att vara en inkrementell åtgärd. Den tid det tar för Z-beställning är inte garanterat att minska över flera körningar. Men om inga nya data har lagts till i en partition som bara var Z-sorterad, kommer en annan Z-beställning av partitionen inte att ha någon effekt.

  • Z-beställning syftar till att producera jämnt balanserade datafiler med avseende på antalet tupplar, men inte nödvändigtvis datastorleken på disken. De två måtten är oftast korrelerade, men det kan finnas situationer när så inte är fallet, vilket leder till skevhet i optimera aktivitetstider.

    Om du ZORDER BYtill exempel datum och de senaste posterna är mycket bredare (till exempel längre matriser eller strängvärden) än tidigare, förväntas OPTIMIZE jobbets aktivitetsvaraktighet vara skev, samt de resulterande filstorlekarna. Detta är dock bara ett problem för OPTIMIZE själva kommandot. Det bör inte ha någon negativ inverkan på efterföljande frågor.