Κοινοποίηση μέσω


Βελτιστοποίηση πίνακα Delta Lake και V-Order

Η μορφή πίνακα Lakehouse και Delta Lake είναι κεντρική στο Microsoft Fabric, διαβεβαιώνοντας ότι οι πίνακες βελτιστοποιούνται για ανάλυση αποτελεί βασική απαίτηση. Αυτός ο οδηγός καλύπτει τις έννοιες βελτιστοποίησης του πίνακα Delta Lake, τις ρυθμίσεις παραμέτρων και τον τρόπο εφαρμογής του στα πιο συνηθισμένα μοτίβα χρήσης δεδομένων μεγάλου όγκου.

Σημαντικό

Οι OPTIMIZE εντολές σε αυτό το άρθρο είναι εντολές Spark SQL και πρέπει να εκτελούνται σε περιβάλλοντα Spark όπως:

Αυτές οι εντολές ΔΕΝ υποστηρίζονται στο πρόγραμμα επεξεργασίας ερωτημάτων SQLAnalytics Endpoint ή Warehouse SQL, τα οποία υποστηρίζουν μόνο εντολές T-SQL. Για συντήρηση πίνακα μέσω του τελικού σημείου SQL Analytics, χρησιμοποιήστε τις επιλογές περιβάλλοντος εργασίας χρήστη συντήρησης Lakehouse ή εκτελέστε τις εντολές σε ένα σημειωματάριο Fabric.

Τι είναι η σειρά 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 μέσω ταξινόμησης, διανομής ομάδων γραμμών, κωδικοποίησης και συμπίεσης, μειώνοντας τη χρήση πόρων και βελτιώνοντας την απόδοση και την αποδοτικότητα κόστους. Ενώ προσθέτει ~15% στους χρόνους εγγραφής, μπορεί να ενισχύσει τη συμπίεση έως και 50%. Η ταξινόμηση V-Order έχει επίδραση 15% στους μέσους χρόνους εγγραφής, αλλά παρέχει έως και 50% περισσότερη συμπίεση.

Είναι συμβατό με μορφή παρκέ 100%, ενώ όλοι οι κινητήρες παρκέ μπορούν να το διαβάσουν ως κανονικά αρχεία parquet. Οι πίνακες Delta είναι πιο αποδοτικοί από ποτέ. Δυνατότητες όπως η σειρά Ζ είναι συμβατές με την παραγγελία V. Οι ιδιότητες πίνακα και οι εντολές βελτιστοποίησης μπορούν να χρησιμοποιηθούν για τον έλεγχο της σειράς V των διαμερισμάτων της.

Στο επίπεδο του αρχείου παρκέ εφαρμόζεται σειρά V. Οι πίνακες δέλτα και τα χαρακτηριστικά του, όπως η παραγγελία Ζ, η συμπύκνωση, το κενό, το ταξίδι στο χρόνο κ.λπ. είναι ορθογωνικά στην παραγγελία V, ως εκ τούτου, είναι συμβατά και μπορούν να χρησιμοποιηθούν μαζί για επιπλέον οφέλη.

Έλεγχος εγγραφής V-Order

Η V-Order χρησιμοποιείται για τη βελτιστοποίηση της διάταξης του αρχείου parquet για ταχύτερη απόδοση ερωτημάτων, ειδικά σε σενάρια μεγάλου μεγέθους για ανάγνωση. Στο Microsoft Fabric, η σειρά V είναι απενεργοποιημένη από προεπιλογή για όλους τους χώρους εργασίας που μόλις δημιουργήθηκαν για τη βελτιστοποίηση των επιδόσεων για φόρτους εργασίας διαχείρισης δεδομένων μεγάλου φόρτου εγγραφής.

Η συμπεριφορά της σειράς V στο Apache Spark ελέγχεται μέσω των παρακάτω ρυθμίσεων παραμέτρων:

Ρύθμιση παραμέτρων Προεπιλεγμένη τιμή Περιγραφή
spark.sql.parquet.vorder.default false Ελέγχει τη σύνταξη V-Order σε επίπεδο περιόδου λειτουργίας. Ορίστε την σε false από προεπιλογή στους νέους χώρους εργασίας Fabric.
TBLPROPERTIES("delta.parquet.vorder.enabled") Ακύρωση Ελέγχει την προεπιλεγμένη συμπεριφορά σειράς V στο επίπεδο πίνακα.
Επιλογή συντάκτη DataFrame: parquet.vorder.enabled Ακύρωση Χρησιμοποιείται για τον έλεγχο της σειράς V στο επίπεδο λειτουργίας εγγραφής.

Χρησιμοποιήστε τις ακόλουθες εντολές για να ενεργοποιήσετε ή αντικαταστήσετε τις εγγραφές V-Order όπως απαιτείται για το σενάριό σας.

Σημαντικό

  • Η V-Order είναι απενεργοποιημένη από προεπιλογή σε νέους χώρους εργασίας Fabric (spark.sql.parquet.vorder.default=false) για τη βελτίωση των επιδόσεων για την πρόσληψη δεδομένων και τις διοχετεύσεις μετασχηματισμού.

  • Εάν ο φόρτος εργασίας σας είναι μεγάλος για ανάγνωση, όπως αλληλεπιδραστικά ερωτήματα ή πίνακες εργαλείων, ενεργοποιήστε το V-Order με τις ακόλουθες ρυθμίσεις παραμέτρων:

    • Ορίστε την ιδιότητα spark.sql.parquet.vorder.default Spark σε true'.
    • Εναλλαγή προφίλ πόρων σε readHeavyforSpark προφίλ ή ReadHeavy προφίλ. Αυτό το προφίλ ενεργοποιεί αυτόματα το V-Order για καλύτερη απόδοση ανάγνωσης.

Στο Fabric runtime 1.3 και σε νεότερες εκδόσεις, η spark.sql.parquet.vorder.enable ρύθμιση καταργείται. Καθώς το V-Order εφαρμόζεται αυτόματα κατά τη βελτιστοποίηση Delta χρησιμοποιώντας προτάσεις OPTIMIZE, δεν χρειάζεται να ενεργοποιήσετε χειροκίνητα αυτήν τη ρύθμιση σε νεότερες εκδόσεις χρόνου εκτέλεσης. Εάν μετεγκαθιστάτε κώδικα από παλαιότερη έκδοση χρόνου εκτέλεσης, μπορείτε να καταργήσετε αυτήν τη ρύθμιση, καθώς ο μηχανισμός τον χειρίζεται πλέον αυτόματα.

Έλεγχος ρύθμισης παραμέτρων σειράς V στην περίοδο λειτουργίας Apache Spark

%%sql 
SET spark.sql.parquet.vorder.default 

Απενεργοποίηση εγγραφής V-Order στην περίοδο λειτουργίας Apache Spark

%%sql 
SET spark.sql.parquet.vorder.default=FALSE 

Ενεργοποίηση εγγραφής V-Order στην περίοδο λειτουργίας Apache Spark

Σημαντικό

Όταν ενεργοποιηθεί σε επίπεδο περιόδου λειτουργίας. Όλες οι εγγραφές παρκέ γίνονται με ενεργοποιημένο το V-Order, το οποίο περιλαμβάνει πίνακες παρκέ που δεν είναι Delta και πίνακες Delta με την parquet.vorder.enabled ιδιότητα του πίνακα να έχει οριστεί σε ένα ή truefalse.

%%sql 
SET spark.sql.parquet.vorder.default=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 συμπεριφέρονται όπως αναμένεται και εκτελούν τη βελτιστοποίηση χρόνου εγγραφής. Αν η τιμή true έχει οριστεί για τις ρυθμίσεις της συνεδρίας V-Order ή αν ενεργοποιηθεί η τιμή για το spark.write, τότε οι εγγραφές είναι V-Order ακόμα και αν η τιμή για τις ιδιότητες TBLείναι 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.default το καταργείται ή ορίζεται σε 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 και των ρυθμίσεων παραμέτρων του, διαδραματίζει κρίσιμο ρόλο στην απόδοση. Η πρόσληψη δεδομένων σε πίνακες λίμνης δεδομένων μπορεί να έχει το κληρονομημένο χαρακτηριστικό της συνεχούς εγγραφής πολλών μικρών αρχείων. Αυτό το σενάριο είναι κοινώς γνωστό ως "μικρό πρόβλημα αρχείου".

Το Optimize Write είναι μια δυνατότητα Delta Lake στο Fabric και το Synapse που μειώνει τον αριθμό αρχείων και αυξάνει το μέγεθος μεμονωμένων αρχείων κατά την εγγραφή στο 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, η απόδοση και η αποδοτικότητα του κόστους αποθήκευσης τείνουν να υποβαθμίζονται για τους ακόλουθους λόγους:

  • Τα νέα δεδομένα που προστίθενται στον πίνακα ενδέχεται να αλλοιώσουν τα δεδομένα.
  • Οι ρυθμοί πρόσληψης δεδομένων δέσμης και ροής μπορεί να μεταφέρουν πολλά μικρά αρχεία.
  • Οι λειτουργίες ενημέρωσης και διαγραφής προσθέτουν επιβάρυνση ανάγνωσης. Τα αρχεία παρκέ είναι αμετάβλητα από τη σχεδίασή τους, καθώς οι πίνακες Delta προσθέτουν νέα αρχεία παρκέ με το σύνολο αλλαγών, ενισχύει περαιτέρω τα προβλήματα που επιβάλλονται από τα δύο πρώτα στοιχεία.
  • Δεν χρειάζονται πλέον αρχεία δεδομένων και αρχεία καταγραφής που είναι διαθέσιμα στον χώρο αποθήκευσης.

Για να διατηρήσετε τους πίνακες στην καλύτερη κατάσταση για καλύτερες επιδόσεις, εκτελέστε λειτουργίες συμπίεσης και σκούπας στους πίνακες 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 από τον πίνακα, ορίστε την τιμή false.

Σημείωμα

Όταν χρησιμοποιείτε αυτές τις εντολές σε σημειωματάρια Fabric, βεβαιωθείτε ότι υπάρχει ένα κενό διάστημα μεταξύ %%sql της OPTIMIZE εντολής. Η σωστή σύνταξη είναι:

%%sql 
OPTIMIZE table_name;

Όχι:%%sqlOPTIMIZE table_name; (αυτό θα προκαλέσει συντακτικό σφάλμα)

%%sql 
OPTIMIZE <table|fileOrFolderPath>;

OPTIMIZE <table|fileOrFolderPath> WHERE predicate;

OPTIMIZE <table|fileOrFolderPath> WHERE predicate [ZORDER BY (col_name1, col_name2, ...)];