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


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

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

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

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

OPTIMIZE εντολή

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

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

Σημαντικό

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

OPTIMIZE με το Z-Order

Όταν καθορίζεται ο ZORDER BY όρος, το ξαναγράφει όλα τα ενεργά αρχεία, OPTIMIZE έτσι ώστε οι γραμμές με παρόμοιες τιμές για τις στήλες σειράς z να βρίσκονται μαζί στα ίδια αρχεία, βελτιώνοντας την αποτελεσματικότητα της παράβλεψης αρχείων για ερωτήματα που φιλτράρονται σε αυτές τις στήλες. Χρησιμοποιήστε το 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

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

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

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

Ορίστε σε επίπεδο πίνακα για να ενεργοποιήσετε μόνο επιλεγμένους πίνακες:

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

Χρησιμοποιήστε την επιλογή DataFrameWriter για να ενεργοποιήσετε σε νέους πίνακες:

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

Ενεργοποίηση σε υπάρχοντες πίνακες:

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

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

Ιδιότητα Περιγραφή Προεπιλεγμένη τιμή Ρυθμίσεις συνεδρίας
maxFileSize Το μέγιστο μέγεθος αρχείου προορισμού σε byte για συμπιεσμένα αρχεία. 134217728β (128 MB) spark.databricks.delta.autoCompact.maxFileSize
minFileSize Το ελάχιστο μέγεθος αρχείου σε byte για να θεωρηθεί ένα αρχείο συμπιεσμένο. Οτιδήποτε κάτω από αυτό το όριο λαμβάνεται υπόψη για συμπύκνωση και υπολογίζεται στο minNumFiles όριο. Κατάργηση ορισμού από προεπιλογή, υπολογιζόμενη ως το 1/2 της τιμής maxFileSize , εκτός εάν ορίσετε ρητά μια τιμή. spark.databricks.delta.autoCompact.minFileSize
minNumFiles Ο ελάχιστος αριθμός αρχείων που πρέπει να υπάρχουν κάτω από το όριο για να ενεργοποιηθεί η minFileSize αυτόματη συμπύκνωση. 50 spark.databricks.delta.autoCompact.minNumFiles

Σημείωση

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

Σημαντικό

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

Συντήρηση πίνακα Lakehouse

Οι χρήστες μπορούν να εκτελούν ad-hoc λειτουργίες συντήρησης όπως OPTIMIZE από το περιβάλλον εργασίας χρήστη του Lakehouse. Για περισσότερες πληροφορίες, ανατρέξτε στο θέμα Συντήρηση πίνακα lakehouse.

Σύνοψη βέλτιστων πρακτικών

  • Ενεργοποιήστε την αυτόματη συμπίεση για διοχετεύσεις πρόσληψης με συχνές μικρές εγγραφές (ροή ή μικροδέσμη) για να αποφύγετε τον μη αυτόματο προγραμματισμό και να διατηρήσετε τα αρχεία συμπιεσμένα αυτόματα.
    • Για άλλα μοτίβα εγγραφής, μπορεί να είναι ωφέλιμο να ενεργοποιήσετε την ασφάλεια έναντι της συσσώρευσης μικρών αρχείων, αλλά σταθμίστε εάν οι στόχοι επιπέδου υπηρεσίας επεξεργασίας δεδομένων ανέχονται περιοδικές αιχμές στο χρόνο επεξεργασίας.
  • Προγραμματίστε λειτουργίες πλήρους πίνακα OPTIMIZE κατά τη διάρκεια ήσυχων παραθύρων όταν χρειάζεται να ξαναγράψετε πολλά διαμερίσματα ή να εκτελέσετε το Z-Order.
  • Ενεργοποιήστε τη γρήγορη βελτιστοποίηση για να μειώσετε την ενίσχυση εγγραφής και να κάνετε OPTIMIZE πιο ανίκανη.
  • Ενεργοποιήστε τους στόχους συμπίεσης σε επίπεδο αρχείου για να αποτρέψετε την ενίσχυση εγγραφής καθώς οι πίνακες μεγαλώνουν σε μέγεθος και χρησιμοποιήστε μεγαλύτερα μεγέθη αρχείων-στόχων.
  • Να θυμάστε ότι η συμπίεση πριν από την εγγραφή (βελτιστοποίηση εγγραφής) είναι λιγότερο δαπανηρή από τη συμπίεση μετά την εγγραφή (βελτιστοποίηση). Ανατρέξτε στο θέμα βελτιστοποίηση τεκμηρίωσης εγγραφής για βέλτιστες πρακτικές.