Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel worden aanbevolen procedures beschreven bij het gebruik van Delta Lake.
Overzicht van best practices
Hier volgen algemene aanbevelingen die van toepassing zijn op de meeste Delta Lake-workloads:
- Beheerde tabellen in Unity Catalog gebruiken. Zie Unity Catalog-beheerde tabellen in Azure Databricks voor Delta Lake en Apache Iceberg.
- Gebruik voorspellende optimalisatie. Zie Voorspellende optimalisatie voor beheerde tabellen in Unity Catalog.
- Gebruik vloeistofclustering. Zie Liquid Clustering gebruiken voor tabellen.
- Wanneer u een tabel op dezelfde locatie verwijdert en opnieuw wilt maken, moet u altijd een
CREATE OR REPLACE TABLEinstructie gebruiken. Zie Een tabel verwijderen of vervangen.
Verouderde Delta-configuraties verwijderen
Databricks raadt u aan om de meest expliciete verouderde Delta-configuraties uit Spark-configuraties en tabeleigenschappen te verwijderen wanneer u een upgrade uitvoert naar een nieuwe Databricks Runtime-versie. Verouderde configuraties kunnen voorkomen dat nieuwe optimalisaties en standaardwaarden die door Databricks worden geïntroduceerd, worden toegepast op gemigreerde workloads.
Bestanden comprimeren
Predictive optimalisatie voert automatisch OPTIMIZE en VACUUM opdrachten uit op de beheerde tabellen van Unity Catalog. Zie Voorspellende optimalisatie voor beheerde tabellen in Unity Catalog.
Databricks raadt aan om regelmatig de OPTIMIZE opdracht uit te voeren om kleine bestanden te comprimeren.
Notitie
Met deze bewerking worden de oude bestanden niet verwijderd. Als u ze wilt verwijderen, voert u de VACUUM opdracht uit.
Spark-caching niet gebruiken met Delta Lake
Databricks raadt u niet aan om Spark-caching te gebruiken om de volgende redenen:
- U verliest alle gegevens die overgeslagen kunnen worden door extra filters die aan de cache
DataFramezijn toegevoegd. - De gegevens die in de cache worden opgeslagen, worden mogelijk niet bijgewerkt als de tabel wordt geopend met behulp van een andere id.
Verschillen tussen Delta Lake en Parquet in Apache Spark
Delta Lake verwerkt de volgende bewerkingen automatisch. U moet deze bewerkingen nooit handmatig uitvoeren:
-
REFRESH TABLE: Delta-tabellen retourneren altijd de meest up-to-datumgegevens, zodat u niet handmatig hoeft aan te roepenREFRESH TABLEna wijzigingen. -
Partities toevoegen en verwijderen: Delta Lake houdt automatisch de set partities bij die aanwezig zijn in een tabel en werkt de lijst bij wanneer gegevens worden toegevoegd of verwijderd. Als gevolg hiervan hoeven
ALTER TABLE [ADD|DROP] PARTITIONofMSCKniet te worden uitgevoerd. -
Eén partitie laden: Partities rechtstreeks lezen is niet nodig. U hoeft bijvoorbeeld
spark.read.format("parquet").load("/data/date=2017-01-01")niet uit te voeren. Gebruik in plaats daarvan eenWHEREcomponent voor het overslaan van gegevens, zoalsspark.read.table("<table-name>").where("date = '2017-01-01'"). - Wijzig geen gegevensbestanden handmatig: Delta Lake gebruikt het transactielogboek om wijzigingen in de tabel atomisch door te voeren. U kunt Parquet-gegevensbestanden niet rechtstreeks wijzigen, toevoegen of verwijderen in een Delta-tabel, omdat dit kan leiden tot verloren gegevens of tabelbeschadiging.
Prestaties verbeteren voor Delta Lake-samenvoeging
U kunt de tijd beperken die nodig is om samen te voegen met behulp van de volgende methoden:
Verminder de zoekruimte voor overeenkomsten: de
mergebewerking doorzoekt standaard de hele Delta-tabel om overeenkomsten in de brontabel te vinden. Een manier om de zoekruimte te versnellen, is door bekende beperkingen toe temergevoegen in de voorwaarde voor overeenkomst. Stel dat u een tabel hebt die is gepartitioneerd doorcountryendate, en dat umergewilt gebruiken om informatie voor de laatste dag en een specifiek land bij te werken. Als u de volgende voorwaarde toevoegt, wordt de query sneller, omdat deze alleen zoekt naar overeenkomsten in de relevante partities:events.date = current_date() AND events.country = 'USA'Bovendien vermindert deze query ook de kans op conflicten met andere gelijktijdige bewerkingen. Zie Isolatieniveaus en schrijfconflicten in Azure Databricks voor meer informatie.
Compacte bestanden: als de gegevens worden opgeslagen in veel kleine bestanden, kunnen het lezen van de gegevens om te zoeken naar overeenkomsten traag worden. U kunt kleine bestanden comprimeren in grotere bestanden om de leesdoorvoer te verbeteren. Zie De indeling gegevensbestand optimaliseren voor meer informatie.
Beheer de willekeurige partities voor schrijfbewerkingen: met de
mergebewerking worden gegevens meerdere keren in willekeurige volgorde geplaatst om de bijgewerkte gegevens te berekenen en te schrijven. Het aantal taken dat wordt gebruikt om een willekeurige volgorde te geven, wordt bepaald door de configuratie van de Spark-sessiespark.sql.shuffle.partitions. Het instellen van deze parameter bepaalt niet alleen de parallelle uitvoering, maar bepaalt ook het aantal uitvoerbestanden. Het verhogen van de waarde verhoogt parallelle uitvoering, maar genereert ook een groter aantal kleinere gegevensbestanden.Geoptimaliseerde schrijfbewerkingen inschakelen: voor gepartitioneerde tabellen
mergekan een veel groter aantal kleine bestanden worden geproduceerd dan het aantal willekeurige partities. Dit komt doordat elke willekeurige taak meerdere bestanden in meerdere partities kan schrijven en een knelpunt voor prestaties kan worden. U kunt het aantal bestanden verminderen door geoptimaliseerde schrijfbewerkingen in te schakelen. Zie Geoptimaliseerde schrijfbewerkingen.Bestandsgrootten afstemmen in tabel: Azure Databricks kan automatisch detecteren of een Delta-tabel frequente
mergebewerkingen heeft die bestanden herschrijven en ervoor kiezen om de grootte van herschreven bestanden te verkleinen in afwachting van verdere bestandsherschrijvingen in de toekomst. Zie de sectie over het afstemmen van de bestandsgrootten voor meer informatie.Low Shuffle Merge: Low Shuffle Merge biedt een geoptimaliseerde implementatie van
MERGEdie betere prestaties biedt voor de meest voorkomende workloads. Daarnaast blijven bestaande optimalisaties voor gegevensindelingen behouden, zoals Z-volgorde op ongewijzigde gegevens.