Βελτιστοποίηση πίνακα Delta Lake και V-Order
Η μορφή πίνακα Lakehouse και Delta Lake είναι κεντρική στο Microsoft Fabric, διαβεβαιώνοντας ότι οι πίνακες βελτιστοποιούνται για ανάλυση αποτελεί βασική απαίτηση. Αυτός ο οδηγός καλύπτει τις έννοιες βελτιστοποίησης του πίνακα Delta Lake, τις ρυθμίσεις παραμέτρων και τον τρόπο εφαρμογής του στα πιο συνηθισμένα μοτίβα χρήσης δεδομένων μεγάλου όγκου.
Τι είναι η σειρά V;
Η V-Order είναι μια βελτιστοποίηση χρόνου εγγραφής στη μορφή αρχείου parquet που επιτρέπει την αστραπιαία ανάγνωση κάτω από τους μηχανισμούς υπολογιστικής λειτουργίας του Microsoft Fabric, όπως το Power BI, το SQL, το Spark και άλλα.
Οι μηχανές Power BI και SQL χρησιμοποιούν την τεχνολογία Verti-Scan της Microsoft και τα αρχεία parquet V- Ordered για την επίτευξη στη μνήμη, όπως οι χρόνοι πρόσβασης δεδομένων. Το Spark και άλλες μηχανές υπολογιστικής λειτουργίας χωρίς Verti-Scan επωφελούνται επίσης από τα αρχεία V-Ordered με μέσο όρο 10% ταχύτερους χρόνους ανάγνωσης, με ορισμένα σενάρια έως και 50%.
Η V-Order λειτουργεί εφαρμόζοντας ειδική ταξινόμηση, κατανομή ομάδων γραμμών, κωδικοποίηση λεξικού και συμπίεση σε αρχεία parquet, απαιτώντας έτσι λιγότερους πόρους δικτύου, δίσκου και CPU στους μηχανισμούς υπολογιστικής λειτουργίας για να το διαβάσουν, παρέχοντας αποδοτικότητα κόστους και επιδόσεις. Η ταξινόμηση V-Order έχει επίδραση 15% στους μέσους χρόνους εγγραφής, αλλά παρέχει έως και 50% περισσότερη συμπίεση.
Είναι συμβατό με μορφή παρκέ 100%, ενώ όλοι οι κινητήρες παρκέ μπορούν να το διαβάσουν ως κανονικά αρχεία parquet. Οι πίνακες Delta είναι πιο αποδοτικοί από ποτέ. Δυνατότητες όπως η σειρά Ζ είναι συμβατές με την παραγγελία V. Οι ιδιότητες πίνακα και οι εντολές βελτιστοποίησης μπορούν να χρησιμοποιηθούν για τον έλεγχο της σειράς V των διαμερισμάτων της.
Στο επίπεδο του αρχείου παρκέ εφαρμόζεται σειρά V. Οι πίνακες δέλτα και τα χαρακτηριστικά του, όπως η παραγγελία Ζ, η συμπύκνωση, το κενό, το ταξίδι στο χρόνο κ.λπ. είναι ορθογωνικά στην παραγγελία V, ως εκ τούτου, είναι συμβατά και μπορούν να χρησιμοποιηθούν μαζί για επιπλέον οφέλη.
Έλεγχος εγγραφής V-Order
Η σειρά V ενεργοποιείται από προεπιλογή στο Microsoft Fabric και στο Apache Spark ελέγχεται από τις ακόλουθες ρυθμίσεις παραμέτρων.
Ρύθμιση παραμέτρων | Προεπιλεγμένη τιμή | Περιγραφή |
---|---|---|
spark.sql.parquet.vorder.enabled | true | Ελέγχει την εγγραφή V-Order σε επίπεδο περιόδου λειτουργίας. |
TBLPROPERTIES("delta.parquet.vorder.enabled") | ψευδής | Προεπιλεγμένη λειτουργία V-Order σε πίνακες |
Επιλογή συντάκτη πλαισίου δεδομένων: parquet.vorder.enabled | Ακύρωση | Έλεγχος εγγραφής V-Order με χρήση του συντάκτη πλαισίου δεδομένων |
Χρησιμοποιήστε τις ακόλουθες εντολές για να ελέγξετε τη χρήση των εγγραφών V-Order.
Έλεγχος ρύθμισης παραμέτρων σειράς V στην περίοδο λειτουργίας Apache Spark
%%sql
SET spark.sql.parquet.vorder.enabled
Απενεργοποίηση εγγραφής V-Order στην περίοδο λειτουργίας Apache Spark
%%sql
SET spark.sql.parquet.vorder.enabled=FALSE
Ενεργοποίηση εγγραφής V-Order στην περίοδο λειτουργίας Apache Spark
Σημαντικό
Όταν ενεργοποιηθεί σε επίπεδο περιόδου λειτουργίας. Όλες οι εγγραφές parquet γίνονται με δυνατότητα V-Order. Αυτό περιλαμβάνει πίνακες παρκέ χωρίς Delta και πίνακες Delta με την parquet.vorder.enabled
ιδιότητα πίνακα ορισμένη σε ή true
false
.
%%sql
SET spark.sql.parquet.vorder.enabled=TRUE
Στοιχείο ελέγχου V-Order με χρήση ιδιοτήτων πίνακα Delta
Ενεργοποίηση της ιδιότητας πίνακα V-Order κατά τη δημιουργία πίνακα:
%%sql
CREATE TABLE person (id INT, name STRING, age INT) USING parquet TBLPROPERTIES("delta.parquet.vorder.enabled" = "true");
Σημαντικό
Όταν η ιδιότητα πίνακα οριστεί σε true, οι εντολές INSERT, UPDATE και MERGE θα συμπεριφέρονται όπως αναμένεται και θα εκτελέσουν τη βελτιστοποίηση χρόνου εγγραφής. Εάν η ρύθμιση παραμέτρων της περιόδου λειτουργίας V-Order έχει οριστεί σε true ή το spark.write το ενεργοποιεί, τότε οι εγγραφές θα είναι V-Order, ακόμα και αν το TBLPROPERTIES έχει οριστεί σε false.
Ενεργοποίηση ή απενεργοποίηση της σειράς V τροποποιώντας την ιδιότητα πίνακα:
%%sql
ALTER TABLE person SET TBLPROPERTIES("delta.parquet.vorder.enabled" = "true");
ALTER TABLE person SET TBLPROPERTIES("delta.parquet.vorder.enabled" = "false");
ALTER TABLE person UNSET TBLPROPERTIES("delta.parquet.vorder.enabled");
Αφού ενεργοποιήσετε ή απενεργοποιήσετε τη σειρά V χρησιμοποιώντας ιδιότητες πίνακα, επηρεάζονται μόνο μελλοντικές εγγραφές στον πίνακα. Τα αρχεία Parquet διατηρούν την παραγγελία που χρησιμοποιήθηκε όταν δημιουργήθηκε. Για να αλλάξετε την τρέχουσα φυσική δομή ώστε να εφαρμόζεται ή να καταργείται η σειρά V, διαβάστε την ενότητα "Έλεγχος σειράς V κατά τη βελτιστοποίηση ενός πίνακα" παρακάτω.
Έλεγχος της παραγγελίας V απευθείας σε λειτουργίες εγγραφής
Όλες οι εντολές εγγραφής apache Spark μεταβιβάζονται στη ρύθμιση περιόδου λειτουργίας, εάν δεν είναι ρητή. Όλες οι ακόλουθες εντολές συντάσσονται χρησιμοποιώντας τη σειρά V, μεταβιβάζοντας σιωπηρά τη ρύθμιση παραμέτρων περιόδου λειτουργίας.
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")
Σημαντικό
Η παραγγελία V ισχύει μόνο για αρχεία που επηρεάζονται από το κατηγόρημα.
Σε μια περίοδο λειτουργίας όπου spark.sql.parquet.vorder.enabled
το καταργείται ή ορίζεται σε false, οι ακόλουθες εντολές θα συντάσσουν χρησιμοποιώντας σειρά V:
df_source.write\
.format("delta")\
.mode("overwrite")\
.option("replaceWhere","start_date >= '2017-01-01' AND end_date <= '2017-01-31'")\
.option("parquet.vorder.enabled ","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.enabled","true")\
.location("Files/people")\
.execute()
Τι είναι η Βελτιστοποίηση εγγραφής;
Οι φόρτοι εργασίας ανάλυσης σε μηχανισμούς επεξεργασίας δεδομένων μεγάλου όγκου, όπως το Apache Spark, λειτουργούν πιο αποτελεσματικά όταν χρησιμοποιούνται τυποποιημένα μεγαλύτερα μεγέθη αρχείων. Η σχέση μεταξύ του μεγέθους του αρχείου, του αριθμού των αρχείων, του αριθμού των εργαζομένων Spark και των ρυθμίσεων παραμέτρων του, διαδραματίζει κρίσιμο ρόλο στην απόδοση. Η πρόσληψη δεδομένων σε πίνακες λίμνης δεδομένων μπορεί να έχει το κληρονομημένο χαρακτηριστικό της συνεχούς εγγραφής πολλών μικρών αρχείων. Αυτό το σενάριο είναι κοινώς γνωστό ως "μικρό πρόβλημα αρχείου".
Η δυνατότητα Βελτιστοποίηση εγγραφής είναι μια δυνατότητα Delta Lake στο Microsoft Fabric και το Azure Synapse Analytics στον μηχανισμό Apache Spark, η οποία μειώνει τον αριθμό των αρχείων που έχουν συνταχθεί και έχει ως στόχο την αύξηση του μεμονωμένου μεγέθους αρχείων των γραπτών δεδομένων. Το μέγεθος του αρχείου προορισμού μπορεί να αλλάξει σύμφωνα με τις απαιτήσεις φόρτου εργασίας χρησιμοποιώντας ρυθμίσεις παραμέτρων.
Η δυνατότητα είναι ενεργοποιημένη από προεπιλογή στον χρόνο εκτέλεσης Microsoft Fabric για Apache Spark. Για να μάθετε περισσότερα σχετικά με τη Βελτιστοποίηση σεναρίων χρήσης εγγραφής, διαβάστε το άρθρο Η ανάγκη βελτιστοποίησης της εγγραφής στο Apache Spark.
Βελτιστοποίηση συγχώνευσης
Η εντολή Delta Lake MERGE επιτρέπει στους χρήστες να ενημερώνουν έναν πίνακα δέλτα με προηγμένες συνθήκες. Μπορεί να ενημερώσει δεδομένα από έναν πίνακα προέλευσης, προβολή ή DataFrame σε έναν πίνακα προορισμού, χρησιμοποιώντας την εντολή MERGE. Ωστόσο, ο τρέχων αλγόριθμος στην κατανομή ανοιχτού κώδικα του Delta Lake δεν είναι πλήρως βελτιστοποιημένος για τον χειρισμό μη προσαρμοσμένων γραμμών. Η ομάδα microsoft Spark Delta εφάρμοσε μια προσαρμοσμένη βελτιστοποίηση Συγχώνευσης χαμηλού ανακατεύθυνσης, οι μη διαμορφωμένες γραμμές εξαιρούνται από ένα δαπανηρό ανακάτεμα που απαιτείται για την ενημέρωση των αντιστοιχισμένων γραμμών.
Η υλοποίηση ελέγχεται από τη spark.microsoft.delta.merge.lowShuffle.enabled
ρύθμιση παραμέτρων, η οποία ενεργοποιείται από προεπιλογή στον χρόνο εκτέλεσης. Δεν απαιτείται καμία αλλαγή κώδικα και είναι πλήρως συμβατή με τη διανομή ανοιχτού κώδικα του Delta Lake. Για να μάθετε περισσότερα σχετικά με τα σενάρια χρήσης Συγχώνευση με μικρό ανακάτεμα, διαβάστε το άρθρο Βελτιστοποίηση συγχώνευσης low shuffle σε πίνακες Delta.
Συντήρηση πίνακα Delta
Καθώς αλλάζουν οι πίνακες Delta, η απόδοση και η αποδοτικότητα του κόστους αποθήκευσης τείνουν να υποβαθμίζονται για τους ακόλουθους λόγους:
- Τα νέα δεδομένα που προστίθενται στον πίνακα ενδέχεται να αλλοιώσουν τα δεδομένα.
- Οι ρυθμοί πρόσληψης δεδομένων δέσμης και ροής μπορεί να μεταφέρουν πολλά μικρά αρχεία.
- Οι λειτουργίες ενημέρωσης και διαγραφής δημιουργούν τελικά επιβάρυνση ανάγνωσης. Τα αρχεία parquet είναι αμετάβλητα από τη σχεδίαση, οπότε οι πίνακες Delta προσθέτουν νέα αρχεία parquet με το αλλαξιέρα, ενισχύοντας περαιτέρω τα ζητήματα που επιβάλλονται από τα δύο πρώτα στοιχεία.
- Δεν χρειάζονται πλέον αρχεία δεδομένων και αρχεία καταγραφής που είναι διαθέσιμα στον χώρο αποθήκευσης.
Για να διατηρήσετε τους πίνακες στην καλύτερη κατάσταση για καλύτερες επιδόσεις, εκτελέστε λειτουργίες συμπίεσης και σκούπας στους πίνακες Delta. Η bin-compaction επιτυγχάνεται με την εντολή OPTIMIZE . Συγχωνεύει όλες τις αλλαγές σε μεγαλύτερα, ενοποιημένα αρχεία parquet. Ο καθαρισμός αποθήκευσης Dereferenced επιτυγχάνεται από την εντολή VACUUM .
Οι εντολές συντήρησης πίνακα OPTIMIZE και VACUUM μπορούν να χρησιμοποιηθούν μέσα σε σημειωματάρια και ορισμούς εργασίας Spark και, στη συνέχεια, να ενορχηστρωθούν χρησιμοποιώντας δυνατότητες πλατφόρμας. Το Lakehouse in Fabric προσφέρει μια λειτουργικότητα για τη χρήση του περιβάλλοντος εργασίας χρήστη για την εκτέλεση ad-hoc συντήρησης πίνακα, όπως εξηγείται στο άρθρο συντήρησης πίνακα Delta Lake.
Σημαντικό
Η σωστή σχεδίαση της φυσικής δομής του πίνακα, με βάση τη συχνότητα πρόσληψης και τα αναμενόμενα μοτίβα ανάγνωσης, είναι πιθανώς πιο σημαντική από την εκτέλεση των εντολών βελτιστοποίησης που περιγράφονται σε αυτή την ενότητα.
Έλεγχος σειράς V κατά τη βελτιστοποίηση ενός πίνακα
Οι ακόλουθες δομές εντολών είναι συμπαγείς και ξαναγράφουν όλα τα αρχεία που επηρεάζονται χρησιμοποιώντας την εντολή V, ανεξάρτητα από τη ρύθμιση TBLPROPERTIES ή τη ρύθμιση παραμέτρων περιόδου λειτουργίας:
%%sql
OPTIMIZE <table|fileOrFolderPath> VORDER;
OPTIMIZE <table|fileOrFolderPath> WHERE <predicate> VORDER;
OPTIMIZE <table|fileOrFolderPath> WHERE <predicate> [ZORDER BY (col_name1, col_name2, ...)] VORDER;
Όταν χρησιμοποιούνται μαζί οι ZORDER και VORDER, το Apache Spark εκτελεί συμπίεση-κάδου, ZORDER, VORDER διαδοχικά.
Οι ακόλουθες εντολές είναι συμπαγείς σε κάδους και ξαναγράφουν όλα τα αρχεία που επηρεάζονται χρησιμοποιώντας τη ρύθμιση TBLPROPERTIES. Εάν το TBLPROPERTIES οριστεί ως true σε V-Order, όλα τα αρχεία που επηρεάζονται συντάσσονται ως V-Order. Εάν το TBLPROPERTIES δεν έχει οριστεί ή έχει οριστεί ως false σε V-Order, λαμβάνει τη ρύθμιση περιόδου λειτουργίας. Επομένως, για να καταργήσετε τη σειρά V από τον πίνακα, ορίστε τη ρύθμιση παραμέτρων περιόδου λειτουργίας σε false.
%%sql
OPTIMIZE <table|fileOrFolderPath>;
OPTIMIZE <table|fileOrFolderPath> WHERE predicate;
OPTIMIZE <table|fileOrFolderPath> WHERE predicate [ZORDER BY (col_name1, col_name2, ...)];