Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die Tabellenformate Lakehouse und Delta Lake sind für Microsoft Fabric von zentraler Bedeutung. Eine wichtige Anforderung besteht darin, die Optimierung der Tabellen für Analysen sicherzustellen. In diesem Leitfaden werden von Delta Lake-Tabellenoptimierungskonzepte, Konfigurationen und deren Anwendung auf die häufigsten Big Data-Nutzungsmuster beschrieben.
Was ist mit V-Reihenfolge gemeint?
Die V-Reihenfolge ist eine Schreibzeitoptimierung für das Parquet-Dateiformat, die blitzschnelle Lesevorgänge unter Microsoft Fabric-Computemodulen wie Power BI, SQL, Spark und anderen ermöglicht.
Power BI- und SQL-Engines verwenden Microsoft Verti-Scan-Technologie und in V-Reihenfolge angeordnete Parquet-Dateien, um nahezu In-Memory-Datenzugriffszeiten zu erreichen. Spark und andere Nicht-Verti-Scan-Rechen-Engines profitieren ebenfalls von den V-geordneten Dateien mit durchschnittlich um 10 % schnelleren Lesegeschwindigkeiten, während sie in manchen Szenarien sogar um bis zu 50 % schneller sind.
V-Order arbeitet, indem spezielle Sortierung, Zeilengruppenverteilung, Wörterbuchcodierung und Komprimierung auf Parquet-Dateien angewendet werden, wodurch weniger Netzwerk-, Festplatten- und CPU-Ressourcen in Compute-Engines zum Lesen benötigt werden. Dadurch werden Kosteneffizienz und Leistung gesteigert. Die Sortierung in V-Reihenfolge verändert die durchschnittlichen Schreibzeiten um 15 %, bietet aber eine um bis zu 50 % höhere Komprimierung.
Das Format ist zu 100 % mit dem Open-Source-Parquet-Format kompatibel. Alle Parquet-Engines können es als reguläre Parquet-Dateien lesen. Delta-Tabellen sind effizienter denn je. Features wie die Z-Reihenfolge sind mit der V-Reihenfolge kompatibel. Tabelleneigenschaften und Optimierungsbefehle können verwendet werden, um die V-Reihenfolge ihrer Partitionen zu steuern.
Die V-Reihenfolge wird auf Parquet-Dateiebene angewendet. Delta-Tabellen und deren Funktionen, wie Z-Reihenfolge, Komprimierung, Vakuum, Zeitreise usw. sind orthogonal zur V-Reihenfolge. Daher sind sie kompatibel und können zusammen verwendet werden, um zusätzliche Vorteile zu erzielen.
Steuern von Schreibvorgängen in V-Reihenfolge
V-Order wird verwendet, um das Layout von Parquet-Dateien für eine schnellere Abfrageleistung zu optimieren, insbesondere in leseintensiven Szenarien. In Microsoft Fabric ist V-Order standardmäßig für alle neu erstellten Arbeitsbereiche deaktiviert , um die Leistung für schreibintensive Datenverarbeitungsworkloads zu optimieren.
Das V-Order-Verhalten in Apache Spark wird über die folgenden Konfigurationen gesteuert:
Konfiguration | Standardwert | Beschreibung |
---|---|---|
spark.sql.parquet.vorder.default |
false |
Steuert das Schreiben der V-Order auf Sitzungsebene. Standardmäßig auf false in neuen Fabric-Arbeitsbereichen festgelegt. |
TBLPROPERTIES("delta.parquet.vorder.default") |
false |
Steuert das Standardverhalten der V-Reihenfolge auf Tabellenebene. |
DataFrame Writer-Option: parquet.vorder.default |
Nicht festgelegt | Wird zum Steuern der V-Reihenfolge auf Schreibvorgangsebene verwendet. |
Verwenden Sie die folgenden Befehle, um V-Order-Schreibvorgänge nach Bedarf für Ihr Szenario zu aktivieren oder außer Kraft zu setzen.
⚠– Wichtig:
V-Order ist standardmäßig deaktiviert in neuen Fabric-Arbeitsbereichenspark.sql.parquet.vorder.default=false
, um die Leistung für Datenaufnahme- und Transformationspipelines zu verbessern.Wenn Ihre Workload leselastig ist – z. B. interaktive Abfragen oder Dashboard-Visualisierungen – können Sie die V-Order aktivieren, indem Sie:
- Festlegen der Spark-Eigenschaft
spark.sql.parquet.vorder.default=true
- Beim Wechsel zu den Ressourcenprofilen
readHeavyforSpark
oderReadHeavy
wird V-Order automatisch aktiviert, um eine bessere Leseleistung zu erzielen.
Überprüfen der Konfiguration der V-Reihenfolge in einer Apache Spark-Sitzung
%%sql
SET spark.sql.parquet.vorder.default
Deaktivierung des V-Order-Schreibvorgangs in einer Apache Spark-Sitzung
%%sql
SET spark.sql.parquet.vorder.default=FALSE
Aktivieren Sie das Schreiben in V-Reihenfolge in der Apache Spark-Sitzung
Wichtig
Bei Aktivierung auf Sitzungsebene Alle Parquet-Schreibvorgänge werden mit aktivierter V-Reihenfolge durchgeführt. Dies umfasst Nicht-Delta-Parquet-Tabellen und Delta-Tabellen, deren parquet.vorder.default
-Tabelleneigenschaft auf true
oder false
festgelegt ist.
%%sql
SET spark.sql.parquet.vorder.default=TRUE
Steuern der V-Reihenfolge mit Delta-Tabelleneigenschaften
Aktivieren Sie die V-Order-Tabelleneigenschaft während der Tabellenerstellung.
%%sql
CREATE TABLE person (id INT, name STRING, age INT) USING parquet TBLPROPERTIES("delta.parquet.vorder.default" = "true");
Wichtig
Wenn die Tabelleneigenschaft auf „true“ festgelegt ist, verhalten sich die Befehle INSERT, UPDATE und MERGE wie erwartet und führen die Schreibzeitoptimierung durch. Wenn die Sitzungskonfiguration für die V-Reihenfolge auf „true“ festgelegt ist oder „spark.write“ sie aktiviert, werden die Schreibvorgänge auch dann in V-Reihenfolge ausgeführt, wenn TBLPROPERTIES auf „false“ festgelegt ist.
Aktivieren oder deaktivieren Sie die V-Reihenfolge, indem Sie die Tabelleneigenschaft ändern:
%%sql
ALTER TABLE person SET TBLPROPERTIES("delta.parquet.vorder.default" = "true");
ALTER TABLE person SET TBLPROPERTIES("delta.parquet.vorder.default" = "false");
ALTER TABLE person UNSET TBLPROPERTIES("delta.parquet.vorder.default");
Wenn Sie V-Reihenfolge mithilfe von Tabelleneigenschaften aktivieren oder deaktivieren, sind nur zukünftige Schreibvorgänge in die Tabelle von der Änderung betroffen. Parquet-Dateien behalten die Reihenfolge bei, die bei ihrer Erstellung verwendet wurde. Um die aktuelle physische Struktur so zu ändern, dass die V-Reihenfolge angewendet oder entfernt wird, lesen Sie den Abschnitt „Steuern der V-Reihenfolge beim Optimieren einer Tabelle“.
Direktes Steuern der V-Reihenfolge bei Schreibvorgängen
Alle Apache Spark-Schreibbefehle erben die Sitzungseinstellung, wenn nicht explizit etwas anderes angegeben wird. Alle folgenden Befehle schreiben in V-Reihenfolge, indem sie die Sitzungskonfiguration implizit erben.
df_source.write\
.format("delta")\
.mode("append")\
.saveAsTable("myschema.mytable")
DeltaTable.createOrReplace(spark)\
.addColumn("id","INT")\
.addColumn("firstName","STRING")\
.addColumn("middleName","STRING")\
.addColumn("lastName","STRING",comment="surname")\
.addColumn("birthDate","TIMESTAMP")\
.location("Files/people")\
.execute()
df_source.write\
.format("delta")\
.mode("overwrite")\
.option("replaceWhere","start_date >= '2017-01-01' AND end_date <= '2017-01-31'")\
.saveAsTable("myschema.mytable")
Wichtig
Die V-Reihenfolge gilt nur für Dateien, die durch das Prädikat bestimmt werden.
In einer Sitzung, in der spark.sql.parquet.vorder.default
nicht festgelegt oder auf „false“ gesetzt ist, würden die folgenden Befehle mit V-Order schreiben:
df_source.write\
.format("delta")\
.mode("overwrite")\
.option("replaceWhere","start_date >= '2017-01-01' AND end_date <= '2017-01-31'")\
.option("parquet.vorder.default ","true")\
.saveAsTable("myschema.mytable")
DeltaTable.createOrReplace(spark)\
.addColumn("id","INT")\
.addColumn("firstName","STRING")\
.addColumn("middleName","STRING")\
.addColumn("lastName","STRING",comment="surname")\
.addColumn("birthDate","TIMESTAMP")\
.option("parquet.vorder.default","true")\
.location("Files/people")\
.execute()
Was ist Optimize Write?
Analytische Workloads auf Big-Datenverarbeitungs-Engines wie Apache Spark werden am effizientesten ausgeführt, wenn standardisierte größere Dateigrößen verwendet werden. Das Verhältnis zwischen der Dateigröße, der Anzahl der Dateien, der Anzahl der Spark-Worker und ihrer Konfigurationen spielt eine entscheidende Rolle für die Leistung. Das Erfassen von Daten in Data Lake-Tabellen kann die vererbte Eigenschaft haben, ständig viele kleine Dateien zu schreiben. Dieses Szenario ist allgemein als „Kleine-Dateien-Problem“ bekannt.
„Optimize Write“ (Schreibvorgang optimieren) ist ein Feature von Delta Lake on Microsoft Fabric und Azure Synapse Analytics der Apache Spark-Engine, die die Anzahl der geschriebenen Dateien reduziert und darauf abzielt, die individuelle Dateigröße der geschriebenen Daten zu erhöhen. Die Zieldateigröße kann je nach Workloadanforderungen mithilfe von Konfigurationen geändert werden.
Das Feature ist in Microsoft Fabric Runtime für Apache Sparkstandardmäßig aktiviert. Weitere Informationen zu Verwendungsszenarien für „Optimize Write“ finden Sie im Artikel Die Notwendigkeit der Optimierung von Schreibvorgängen in Apache Spark.
Zusammenführungsoptimierung
Über den Delta Lake-Befehl MERGE können Sie eine Delta-Tabelle mit erweiterten Bedingungen aktualisieren. Man kann Daten aus einer Quelltabelle, einer Ansicht oder einem DataFrame mithilfe des MERGE-Befehls in einer Zieltabelle aktualisieren. Der aktuelle Algorithmus in der Open-Source-Distribution von Delta Lake ist jedoch nicht vollständig für die Verarbeitung unveränderter Zeilen optimiert. Das Microsoft Spark Delta-Team implementierte eine Low Shuffle Merge-Optimierung, bei der unveränderte Zeilen von einem kostspieligen Shufflevorgang, der zum Aktualisieren übereinstimmender Zeilen erforderlich ist, ausgenommen werden.
Die Implementierung wird durch die spark.microsoft.delta.merge.lowShuffle.enabled
-Konfiguration gesteuert, die in der Runtime standardmäßig aktiviert ist. Sie erfordert keine Codeänderungen und ist vollständig mit der Open-Source-Distribution von Delta Lake kompatibel. Weitere Informationen zu Verwendungsszenarien für Low Shuffle Merge finden Sie im Artikel Low Shuffle Merge-Optimierung für Delta-Tabellen.
Wartung von Delta-Tabellen
Wenn sich Delta-Tabellen ändern, verschlechtern sich Leistung und Speicherkosteneffizienz aus den folgenden Gründen:
- Neu der Tabelle hinzugefügte Daten können Daten verzerren.
- Batch- und Streamingdatenerfassungsraten können viele kleine Dateien mit sich bringen.
- Aktualisierungs- und Löschvorgänge führen schließlich zu Lesemehraufwand. Parquet-Dateien sind von vornherein unveränderlich, sodass Delta-Tabellen neue Parquet-Dateien hinzufügen, die den Änderungssatz ergänzen. Dadurch werden die Probleme, die durch die ersten beiden Punkte verursacht werden, noch verstärkt.
- Nicht mehr erforderliche Datendateien und Protokolldateien sind im Speicher verfügbar.
Um die Tabellen im besten Zustand für die beste Leistung zu halten, führen Sie in den Delta-Tabellen Bin-Komprimierungs- und Vakuumiervorgänge aus. Die Bin-Komprimierung wird durch den Befehl OPTIMIZE erreicht, der alle Änderungen in größeren, konsolidierten Parquet-Dateien zusammenführt. Zur Bereinigung von dereferenziertem Speicher wird der Befehl VACUUM verwendet.
Die Tabellenwartungsbefehle OPTIMIZE und VACUUM können in Notebooks und Spark-Auftragsdefinitionen verwendet und dann mithilfe von Plattformfunktionen koordiniert werden. Lakehouse in Fabric bietet eine Funktion für die Verwendung der Benutzeroberfläche zur Durchführung von Ad-hoc-Tabellenwartungen, wie im Artikel zur Delta Lake-Tabellenwartung erläutert.
Wichtig
Der richtige Entwurf der physischen Tabellenstruktur basierend auf der Erfassungshäufigkeit und den erwarteten Lesemustern ist wahrscheinlich wichtiger als die Ausführung der in diesem Abschnitt beschriebenen Optimierungsbefehle.
Steuerung der V-Reihenfolge beim Optimieren einer Tabelle
Mit den folgenden Befehlsstrukturen wird eine Bin-Komprimierung aller betroffenen Dateien durchgeführt und die Dateien werden unter Verwendung der V-Reihenfolge erneut generiert, unabhängig von der TBLPROPERTIES-Einstellung oder Sitzungskonfigurationseinstellung:
%%sql
OPTIMIZE <table|fileOrFolderPath> VORDER;
OPTIMIZE <table|fileOrFolderPath> WHERE <predicate> VORDER;
OPTIMIZE <table|fileOrFolderPath> WHERE <predicate> [ZORDER BY (col_name1, col_name2, ...)] VORDER;
Wenn ZORDER und VORDER zusammen verwendet werden, führt Apache Spark die Prozesse Bin-Verdichtung, ZORDER und VORDER nacheinander aus.
Mit den folgenden Befehlen wird die Bin-Komprimierung und erneute Generierung aller betroffenen Dateien mit der TBLPROPERTIES-Einstellung durchgeführt. Wenn TBLPROPERTIES auf „true“ für V-Order festgelegt ist, werden alle betroffenen Dateien als V-Order geschrieben. Wenn TBLPROPERTIES nicht festgelegt oder für die V-Reihenfolge auf „false“ festgelegt ist, wird die Sitzungseinstellung übernommen. Um die V-Reihenfolge aus der Tabelle zu entfernen, legen Sie daher die Sitzungskonfiguration auf „false“ fest.
%%sql
OPTIMIZE <table|fileOrFolderPath>;
OPTIMIZE <table|fileOrFolderPath> WHERE predicate;
OPTIMIZE <table|fileOrFolderPath> WHERE predicate [ZORDER BY (col_name1, col_name2, ...)];