Συμπύκνωση πινάκων Delta

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

Η OPTIMIZE εντολή είναι η κύρια λειτουργία συμπίεσης. Ομαδοποιεί μικρά αρχεία σε κάδους με στόχο το ιδανικό μέγεθος αρχείου και στη συνέχεια τα ξαναγράφει στο storage.

Για οδηγίες σχετικά με τις στρατηγικές συμπίεσης στο τελικό σημείο SQL Analytics, το Power BI Direct Lake και το Spark, ανατρέξτε στο θέμα Συντήρηση και βελτιστοποίηση πίνακα μεταξύ φόρτων εργασίας.

Μέθοδοι συμπύκνωσης

Το Microsoft Fabric προσφέρει διάφορες προσεγγίσεις για τη διατήρηση των βέλτιστων μεγεθών αρχείων σε πίνακες Delta:

OPTIMIZE εντολή

Η OPTIMIZE εντολή είναι η θεμελιώδης λειτουργία για τη συμπίεση πινάκων Delta. Ξαναγράφει μικρά αρχεία σε μεγαλύτερα αρχεία για να βελτιώσει τη διάταξη δεδομένων σε πίνακες Delta.

OPTIMIZE dbo.table_name
Ιδιότητα Περιγραφή Προεπιλεγμένη τιμή Ρυθμίσεις συνεδρίας
minFileSize Τα αρχεία που είναι μικρότερα από αυτό το όριο ομαδοποιούνται και ξαναγράφονται ως μεγαλύτερα αρχεία. 1073741824 (1 GB) spark.databricks.delta.optimize.minFileSize
maxFileSize Μέγεθος αρχείου προορισμού που παράγεται από την OPTIMIZE εντολή. 1073741824 (1 GB) spark.databricks.delta.optimize.maxFileSize

OPTIMIZE είναι ανίκανο, αλλά ένα υπερμεγέθη minFileSize μπορεί να αυξήσει την ενίσχυση εγγραφής. Για παράδειγμα, με minFileSize οριστεί σε 1 GB, ένα αρχείο 900 MB μπορεί να ξαναγραφτεί μετά από μια μικρή επιπλέον εγγραφή. Για οδηγίες αυτόματης διαχείρισης μεγέθους αρχείου, ανατρέξτε στο θέμα Προσαρμόσιμο μέγεθος αρχείου προορισμού.

OPTIMIZE με το Z-Order

Όταν χρησιμοποιείτε τον όρο, το ZORDER BY ξαναγράφει τα ενεργά αρχεία, OPTIMIZE ώστε οι γραμμές με παρόμοιες τιμές να βρίσκονται στα ίδια αρχεία. Η συστεγαζόμενη διάταξη βελτιώνει την παράβλεψη αρχείων για επιλεκτικά φίλτρα. Χρησιμοποιήστε το Z-Order όταν:

  • Τα ερωτήματά σας συχνά φιλτράρονται σε δύο ή περισσότερες στήλες μαζί (για παράδειγμα, ημερομηνία + customer_id) και
  • Αυτά τα κατηγορήματα είναι αρκετά επιλεκτικά ώστε η παράλειψη σε επίπεδο αρχείου να μειώνει τον αριθμό των αρχείων που σαρώνονται.
OPTIMIZE dbo.table_name ZORDER BY (column1, column2)

OPTIMIZE με V-Order

Ο VORDER όρος έχει ως αποτέλεσμα τα αρχεία που προορίζονται για συμπύκνωση να έχουν εφαρμογή της βελτιστοποίησης V-Order. Για περισσότερες πληροφορίες σχετικά με το V-Order, ανατρέξτε στην αναλυτική τεκμηρίωση.

OPTIMIZE dbo.table_name VORDER

Μπορείτε να συνδυάσετε το Z-Order και το V-Order σε μία μόνο εντολή. Το Spark εφαρμόζει τις λειτουργίες με αυτή τη σειρά: συμπίεση κάδου → Z-Order → V-Order.

OPTIMIZE dbo.table_name ZORDER BY (column1, column2) VORDER

Η συμπεριφορά V-Order κατά τη διάρκεια OPTIMIZE εξαρτάται από τον τρόπο με τον οποίο καλείτε την εντολή:

Επίκληση Συμπεριφορά
OPTIMIZE table VORDER Επιβάλλει την εντολή V-Order σε ξαναγραμμένα αρχεία, ανεξάρτητα από τις ρυθμίσεις της περιόδου λειτουργίας ή του πίνακα.
OPTIMIZE table (χωρίς VORDER λέξη-κλειδί) Κληρονομεί τη συμπεριφορά V-Order από TBLPROPERTIES("delta.parquet.vorder.enabled") το if set, διαφορετικά επιστρέφει στις ρυθμίσεις spark.sql.parquet.vorder.defaultσυνεδρίας .

OPTIMIZE με ομαδοποίηση υγρών

Η ομαδοποίηση υγρών καθορίζεται ως επιλογή πίνακα. Ανατρέξτε στην ενότητα Ενεργοποίηση ομαδοποίησης υγρών για λεπτομέρειες. Όταν είναι ενεργοποιημένη η δημιουργία συμπλεγμάτων υγρών, OPTIMIZE το εκτελεί τη φυσική επανεγγραφή που εφαρμόζει την πολιτική δημιουργίας συμπλεγμάτων.

Σημαντικό

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

Γρήγορη βελτιστοποίηση

Το Fast optimize αναλύει έξυπνα τα αρχεία πίνακα Delta και παραλείπει τις λειτουργίες συμπίεσης που δεν είναι πιθανό να βελτιώσουν ουσιαστικά την απόδοση.

Αντί να συμπιέζει τυφλά αρχεία κάθε φορά που υπάρχουν μικρά αρχεία, η γρήγορη βελτιστοποίηση αξιολογεί εάν κάθε υποψήφιος κάδος (ομάδα μικρών αρχείων) πληροί τους διαμορφώσιμους στόχους συμπίεσης βέλτιστων πρακτικών. Το Fast Optimize εκτελεί συμπύκνωση σε έναν κάδο αρχείων μόνο εάν η συγχώνευσή τους είναι πιθανό να φτάσει στο ελάχιστο μέγεθος στόχου σας ή εάν υπάρχουν πάρα πολλά μικρά αρχεία. Διαφορετικά, παραλείπει αυτήν την ομάδα ή μειώνει τον αριθμό των αρχείων που συμπυκνώνει.

SET spark.microsoft.delta.optimize.fast.enabled = TRUE

Η γρήγορη βελτιστοποίηση μπορεί να ρυθμιστεί με ακρίβεια με βάση τις προσδοκίες σας για συμπίεση:

Ιδιότητα Περιγραφή Προεπιλεγμένη τιμή Ρυθμίσεις συνεδρίας
minNumFiles Ο αριθμός των μικρών αρχείων που πρέπει να υπάρχουν σε έναν κάδο για να εκτελεστεί βελτιστοποίηση εάν ο κάδος δεν περιέχει αρκετά δεδομένα που εκτιμάται ότι θα παράγουν ένα συμπιεσμένο αρχείο. 50 spark.microsoft.delta.optimize.fast.minNumFiles
παρκέΣυντελεστής Πολλαπλασιασμένο με το ελάχιστο μέγεθος αρχείου βελτιστοποίησης περιβάλλοντος για τον προσδιορισμό της ελάχιστης ποσότητας δεδομένων μικρού αρχείου που πρέπει να υπάρχουν σε έναν κάδο για να συμπεριληφθεί ο κάδος στο πεδίο συμπίεσης. 1.3 spark.microsoft.delta.optimize.fast.parquetΣυντελεστής

Σημείωση

Έχει parquetCoefficient ως αποτέλεσμα το μέγεθος προορισμού ενός κάδου να είναι μεγαλύτερο από το ελάχιστο μέγεθος αρχείου προορισμού του περιβάλλοντος βελτιστοποίησης. Αυτός ο συντελεστής εξηγεί την πραγματικότητα ότι ο συνδυασμός πολλαπλών μικρών αρχείων παρκέ έχει ως αποτέλεσμα καλύτερη συμπίεση και επομένως λιγότερα δεδομένα από το άθροισμα των μικρών αρχείων. Αυξήστε την τιμή για να είστε πιο συντηρητικοί στο πόσο γρήγορα βελτιστοποιείτε τους κάδους παράλειψης ή μειώστε την τιμή για να επιτρέψετε πιο επιτρεπτή παράλειψη κάδου.

Πώς λειτουργεί

Η γρήγορη βελτιστοποίηση εισάγει επιπλέον ελέγχους πριν από τη συμπίεση των κάδων. Για κάθε υποψήφιο κάδο, το fast optimize αξιολογεί:

  • Η εκτιμώμενη ποσότητα ανεπεξέργαστων δεδομένων στον κάδο (άθροισμα μικρών μεγεθών αρχείων)
  • Εάν ο συνδυασμός των μικρών αρχείων εκτιμάται ότι θα παράγει ένα αρχείο που πληροί το διαμορφωμένο ελάχιστο μέγεθος στόχου
  • Εάν ο κάδος περιέχει τουλάχιστον τον διαμορφωμένο ελάχιστο αριθμό μικρών αρχείων

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

Στιγμιότυπο οθόνης που δείχνει πόσο γρήγορα αξιολογεί η βελτιστοποίηση εάν ένας κάδος είναι συμπιεσμένος.

Σημείωση

Η ακριβής εφαρμογή υπόκειται σε εξέλιξη με την πάροδο του χρόνου.

Η γρήγορη βελτιστοποίηση μπορεί να μειώσει τα ξαναγραμμένα δεδομένα κατά τη διάρκεια του κύκλου ζωής ενός πίνακα Delta. Όπως φαίνεται στο παρακάτω διάγραμμα, η γρήγορη βελτιστοποίηση παρακάμπτει τους μη βέλτιστους κάδους, με αποτέλεσμα ταχύτερες και πιο ανίσχυρες OPTIMIZE εργασίες με λιγότερη ενίσχυση εγγραφής.

Στιγμιότυπο οθόνης που δείχνει πόσο γρήγορα η βελτιστοποίηση οδηγεί σε λιγότερη επανεγγραφή δεδομένων με την πάροδο του χρόνου.

Σημείωση

Μόνο για λόγους απεικόνισης, τα παραπάνω διαγράμματα υποθέτουν ότι το μέγεθος του αρχείου που γράφτηκε από τη συμπύκνωση είναι το άθροισμα του μεγέθους των μικρών αρχείων. Υπονοεί επίσης ένα parquetCoefficient από 1.

Περιορισμοί
  • Δεν ισχύει για λειτουργίες ομαδοποίησης υγρών και Z-Order
  • Η γρήγορη βελτιστοποίηση δεν τροποποιεί τη συμπεριφορά της αυτόματης συμπύκνωσης

Στόχοι συμπίεσης σε επίπεδο αρχείου

Για να αποφευχθεί η επανεγγραφή δεδομένων που προηγουμένως θεωρούνταν συμπιεσμένα (αρκετά μεγάλα) με βάση την αλλαγή των στόχων ελάχιστου και μέγιστου μεγέθους αρχείου συμπίεσης, spark.microsoft.delta.optimize.fileLevelTarget.enabled μπορεί να ενεργοποιηθεί για να αποτραπεί η επανασυμπίεση ήδη συμπιεσμένων αρχείων. Όταν είναι ενεργοποιημένο, τα αρχεία δεν συμπιέζονται εκ νέου εάν προηγουμένως πληρούσαν τουλάχιστον το μισό μέγεθος αρχείου προορισμού τη στιγμή της συμπίεσης. Η διατήρηση των στόχων επιπέδου αρχείου ελαχιστοποιεί την ενίσχυση εγγραφής καθώς το μέγεθος του στόχου συμπίεσης αλλάζει με την πάροδο του χρόνου (για παράδειγμα, από το προσαρμόσιμο μέγεθος αρχείου προορισμού που αξιολογεί και ορίζει έναν μεγαλύτερο στόχο). Εάν ενεργοποιηθεί, η ετικέτα προστίθεται σε νέα αρχεία όταν εκτελείται το OPTIMIZE_TARGET_SIZE OPTIMIZE ή για οποιαδήποτε λειτουργία εγγραφής, εάν έχει οριστεί η delta.targetFileSize ιδιότητα ή delta.targetFileSize.adaptive πίνακας.

Σημείωση

Αν και δεν είναι ενεργοποιημένο από προεπιλογή, η Microsoft συνιστά την ενεργοποίηση των στόχων συμπίεσης σε επίπεδο αρχείου για τον περιορισμό της πιθανής ενίσχυσης εγγραφής.

SET spark.microsoft.delta.optimize.fileLevelTarget.enabled = TRUE

Αυτόματη συμπύκνωση

Η αυτόματη συμπύκνωση αξιολογεί την υγεία του διαμερίσματος μετά από κάθε λειτουργία εγγραφής. Όταν ανιχνεύει υπερβολικό κατακερματισμό αρχείων (πάρα πολλά μικρά αρχεία) μέσα σε ένα διαμέρισμα, ενεργοποιεί μια σύγχρονη OPTIMIZE λειτουργία αμέσως μετά την ολοκλήρωση της εγγραφής. Αυτή η προσέγγιση που βασίζεται στον συγγραφέα για τη συντήρηση αρχείων είναι η βέλτιστη, επειδή η συμπίεση εκτελείται μόνο όταν προσδιορίζεται μέσω προγραμματισμού ότι είναι ωφέλιμη.

Ενεργοποίηση σε επίπεδο περιόδου λειτουργίας

Ορίστε spark.databricks.delta.autoCompact.enabled σε επίπεδο περιόδου λειτουργίας για να ενεργοποιήσετε την αυτόματη συμπίεση για νέους πίνακες που δημιουργούνται σε αυτήν την περίοδο λειτουργίας Spark:

SET spark.databricks.delta.autoCompact.enabled = TRUE

Ενεργοποίηση σε επίπεδο πίνακα

Ορίστε την ιδιότητα delta.autoOptimize.autoCompact πίνακα για να ενεργοποιήσετε την αυτόματη συμπύκνωση για συγκεκριμένους πίνακες:

CREATE TABLE dbo.table_name
TBLPROPERTIES ('delta.autoOptimize.autoCompact' = 'true')

Χρησιμοποιήστε την επιλογή delta.autoOptimize.autoCompact DataFrameWriter για να ενεργοποιήσετε την αυτόματη συμπύκνωση κατά τη δημιουργία ενός πίνακα:

df.write.option('delta.autoOptimize.autoCompact', 'true').saveAsTable('dbo.table_name')

Ενεργοποιήστε την ίδια ιδιότητα πίνακα σε έναν υπάρχοντα πίνακα:

ALTER TABLE dbo.table_name
SET TBLPROPERTIES ('delta.autoOptimize.autoCompact' = 'true')

Μειώστε τα γενικά έξοδα αξιολόγησης

Ξεκινώντας από Fabric χρόνο εκτέλεσης Spark 2.0 (Delta 4.1), μπορείτε να ενεργοποιήσετε τη λειτουργία αυτόματης συμπίεσης onCheckpointOnly. Από προεπιλογή, η αυτόματη συμπύκνωση αξιολογεί τα μεταδεδομένα αρχείων μετά από κάθε λειτουργία εγγραφής για να προσδιορίσει εάν ένας πίνακας έχει πάρα πολλά μικρά αρχεία. Με onCheckpointOnly, η αξιολόγηση αναβάλλεται για την καταγραφή λειτουργιών σημείων ελέγχου (συνήθως κάθε 10 υποβολές). Κατά την ώρα του σημείου ελέγχου, το στιγμιότυπο του πίνακα έχει ήδη ανακατασκευαστεί πλήρως, επομένως η αξιολόγηση διαβάζεται από μεταδεδομένα που βρίσκονται ήδη στη μνήμη αντί να απαιτείται επιπλέον σάρωση. Η αναβαλλόμενη αξιολόγηση μειώνει τα γενικά έξοδα ανά δέσμευση, ενώ εξακολουθεί να διασφαλίζει ότι οι πίνακες συμπιέζονται περιοδικά.

SET spark.microsoft.delta.autoCompact.onCheckpointOnly.enabled = TRUE