Gegevens overslaan voor Delta Lake

Gegevens overslaan worden automatisch verzameld wanneer u gegevens naar een Delta-tabel schrijft. Delta Lake in Azure Databricks maakt gebruik van deze informatie (minimum- en maximumwaarden, null-aantallen en totaal aantal records per bestand) op het moment van query's om snellere query's te bieden.

Notitie

In Databricks Runtime 13.3 en hoger raadt Databricks aan om clustering te gebruiken voor de indeling van deltatabellen. Clustering is niet compatibel met Z-volgorde. Zie Liquid clustering gebruiken voor Delta-tabellen.

U moet statistieken hebben verzameld voor kolommen die worden gebruikt in ZORDER instructies. Zie Wat is Z-ordering?

Kolommen voor Delta-statistieken opgeven

Delta Lake verzamelt standaard statistieken over de eerste 32 kolommen die zijn gedefinieerd in uw tabelschema. Voor deze verzameling wordt elk veld in een geneste kolom beschouwd als een afzonderlijke kolom. U kunt dit gedrag wijzigen door een van de volgende tabeleigenschappen in te stellen:

Tabeleigenschap Databricks Runtime ondersteund Beschrijving
delta.dataSkippingNumIndexedCols Alle ondersteunde Databricks Runtime-versies Verhoog of verklein het aantal kolommen waarop Delta statistieken verzamelt. Afhankelijk van de kolomvolgorde.
delta.dataSkippingStatsColumns Databricks Runtime 13.3 LTS en hoger Geef een lijst met kolomnamen op waarvoor Delta Lake statistieken verzamelt. dataSkippingNumIndexedColsVervangt .

Tabeleigenschappen kunnen worden ingesteld bij het maken van tabellen of met ALTER TABLE instructies. Zie naslaginformatie over eigenschappen van Delta-tabellen.

Als u deze eigenschap bijwerkt, worden statistieken voor bestaande gegevens niet automatisch opnieuw berekend. In plaats daarvan heeft dit invloed op het gedrag van het verzamelen van toekomstige statistieken bij het toevoegen of bijwerken van gegevens in de tabel. Delta Lake maakt geen gebruik van statistieken voor kolommen die niet zijn opgenomen in de huidige lijst met statistiekenkolommen.

In Databricks Runtime 14.3 LTS en hoger kunt u handmatig de hercomputatie van statistieken voor een Delta-tabel activeren met behulp van de volgende opdracht:

ANALYZE TABLE table_name COMPUTE DELTA STATISTICS

Notitie

Lange tekenreeksen worden afgekapt tijdens het verzamelen van statistieken. U kunt ervoor kiezen om lange tekenreekskolommen uit te sluiten van de verzameling statistieken, met name als de kolommen niet vaak worden gebruikt voor het filteren van query's.

Wat is Z-ordering?

Z-volgorde is een techniek voor het plaatsen van gerelateerde informatie in dezelfde set bestanden. Deze co-locatie wordt automatisch gebruikt door Delta Lake in Azure Databricks-algoritmen voor het overslaan van gegevens. Dit gedrag vermindert de hoeveelheid gegevens die Delta Lake in Azure Databricks moet lezen aanzienlijk. Voor Z-ordergegevens geeft u de kolommen op waarop u in de component wilt ZORDER BY orden:

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

Als u verwacht dat een kolom vaak wordt gebruikt in querypredicaten en als die kolom een hoge kardinaliteit (dat wil gezegd een groot aantal afzonderlijke waarden) heeft, gebruikt u ZORDER BY.

U kunt meerdere kolommen opgeven als ZORDER BY een door komma's gescheiden lijst. De effectiviteit van de lokaliteit daalt echter met elke extra kolom. Z-volgorde op kolommen waarvoor geen statistieken zijn verzameld, zou ineffectief zijn en een verspilling van resources. Dit komt doordat voor het overslaan van gegevens kolom-lokale statistieken zijn vereist, zoals min, max en aantal. U kunt het verzamelen van statistieken voor bepaalde kolommen configureren door de volgorde van kolommen in het schema te wijzigen of u kunt het aantal kolommen verhogen waarop statistieken moeten worden verzameld.

Notitie

  • Z-volgorde is niet idempotent , maar is een incrementele bewerking. De tijd die nodig is voor Z-volgorde is niet gegarandeerd om te verminderen over meerdere uitvoeringen. Als er echter geen nieuwe gegevens zijn toegevoegd aan een partitie die alleen Z-geordende was, heeft een andere Z-volgorde van die partitie geen effect.

  • Z-volgorde streeft ernaar om gelijkmatig verdeelde gegevensbestanden te produceren met betrekking tot het aantal tuples, maar niet noodzakelijkerwijs gegevensgrootte op schijf. De twee metingen zijn het vaakst gecorreleerd, maar er kunnen situaties zijn waarin dat niet het geval is, wat leidt tot scheeftrekken in het optimaliseren van taaktijden.

    Als u ZORDER BYbijvoorbeeld datumt en de meest recente records veel breder zijn (bijvoorbeeld langere matrices of tekenreekswaarden) dan de records in het verleden, wordt verwacht dat de taakduur van de OPTIMIZE taak scheef is, evenals de resulterende bestandsgrootten. Dit is echter alleen een probleem voor de OPTIMIZE opdracht zelf; het mag geen negatieve invloed hebben op volgende query's.