Ρύθμιση παραμέτρων και διαχείριση αυτοματοποιημένων στατιστικών πίνακα στο Fabric Spark

Ισχύει για:✅ Μηχανική Δεδομένων Fabric και Επιστήμη Δεδομένων

Τα αυτοματοποιημένα στατιστικά στοιχεία πίνακα στο Microsoft Fabric βοηθούν το Spark να βελτιστοποιήσει την εκτέλεση ερωτημάτων συλλέγοντας αυτόματα μετρικά πίνακα και στηλών για πίνακες Delta.

  • Η σειρά μετράει.
  • Μηδενικές μετρήσεις ανά στήλη.
  • Ελάχιστες και μέγιστες τιμές ανά στήλη.
  • Διακριτές τιμές καταμετρώνται ανά στήλη.
  • Μέσα και μέγιστα μήκη στηλών.

Από προεπιλογή, αυτά τα εκτεταμένα στατιστικά στοιχεία συλλέγονται για τις πρώτες 32 στήλες (συμπεριλαμβανομένων των ένθετων στηλών) των πινάκων Delta στο Fabric. Αυτά τα δεδομένα βοηθούν τον βελτιστοποιητή βάσει κόστους (CBO) του Spark να βελτιώσει τον προγραμματισμό για ενώσεις, φίλτρα, συναθροίσεις και κλάδεμα διαμερισμάτων.

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

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

Βασικά πλεονεκτήματα

Τα αυτοματοποιημένα στατιστικά στοιχεία παρέχουν τα ακόλουθα οφέλη:

  • Ενεργοποιείται αυτόματα για πίνακες Delta στο Fabric.
  • Βελτιώνει την ποιότητα σχεδιασμού ερωτημάτων για κοινά μοτίβα ανάλυσης.
  • Μειώνει την ανάγκη για επαναλαμβανόμενη χειροκίνητη συλλογή στατιστικών.
  • Αποθηκεύει στατιστικά στοιχεία εκτός των αρχείων δεδομένων πίνακα για να αποφευχθεί η διόγκωση των αρχείων δεδομένων.

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

Το Fabric Spark συλλέγει εκτεταμένα στατιστικά στοιχεία κατά το χρόνο εγγραφής και τα χρησιμοποιεί κατά τον προγραμματισμό.

Εύρος και συμπεριφορά συλλογής:

  • Τα στατιστικά στοιχεία συλλέγονται κατά τη στιγμή της εγγραφής.
  • Η Συλλογή στοχεύει τις πρώτες 32 στήλες (συμπεριλαμβανομένων των ένθετων στηλών).
  • Οι ιδιότητες πίνακα μπορούν να παρακάμψουν τη συμπεριφορά σε επίπεδο συνεδρίας.
  • Η ρύθμιση παραμέτρων ελέγχει εάν το Spark εισάγει στατιστικά στοιχεία στο εργαλείο βελτιστοποίησης.

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

Ενεργοποίηση ή απενεργοποίηση συλλογής στατιστικών στοιχείων

Χρησιμοποιήστε είτε τις ρυθμίσεις συνεδρίας (εμβέλεια χώρου εργασίας ή σημειωματαρίου) είτε τις ιδιότητες πίνακα (εμβέλεια ανά πίνακα).

Ρύθμιση παραμέτρων περιόδου λειτουργίας

Μπορείτε να ενεργοποιήσετε ή απενεργοποιήσετε την εκτεταμένη συλλογή στατιστικών στοιχείων και την ένεση βελτιστοποίησης σε επίπεδο περιόδου λειτουργίας.

Αυτές οι ρυθμίσεις μπορούν να εφαρμοστούν μέσω Spark SQL, PySpark ή Scala Spark.

Εκτελέστε τις ακόλουθες προτάσεις Spark SQL για να ενεργοποιήσετε την εισαγωγή συλλογής και βελτιστοποίησης:

SET spark.microsoft.delta.stats.collect.extended=true;
SET spark.microsoft.delta.stats.injection.enabled=true;

Για να απενεργοποιήσετε οποιαδήποτε από τις δύο ρυθμίσεις, χρησιμοποιήστε την ίδια εντολή με την τιμή να έχει οριστεί σε false.

Σημείωμα

Η συλλογή στατιστικών στοιχείων αρχείου καταγραφής Delta (spark.databricks.delta.stats.collect) πρέπει επίσης να είναι ενεργοποιημένη (προεπιλογή: true).

Σημαντικό

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

  • Εύρος συνεδρίας: ορίστε spark.microsoft.delta.stats.injection.enabled σε false.
  • Εύρος πίνακα: ορίστε την delta.stats.extended.inject ιδιότητα πίνακα σε false.

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

Μια τακτική στρατηγική συντήρησης τραπεζιού μειώνει αυτόν τον κίνδυνο. OPTIMIZE Εκκαθαρίζει αυτόματα αρχεία όπου περισσότερα από 5% σειρών αναφέρονται από διανύσματα διαγραφής και REORG TABLE ... APPLY (PURGE) μπορεί να αναγκάσει μια επανεγγραφή κάτω από αυτό το όριο. Επειδή τα εκτεταμένα στατιστικά στοιχεία συλλέγονται κατά το χρόνο εγγραφής, η επανεγγραφή ανανεώνει τα στατιστικά στοιχεία για τα επηρεαζόμενα αρχεία. Για πίνακες με συχνές ενημερώσεις ή διαγραφές, κρατήστε την έγχυση απενεργοποιημένη μεταξύ των κύκλων συντήρησης.

Ιδιότητες πίνακα (παράκαμψη ρυθμίσεων συνεδρίας)

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

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

ALTER TABLE tableName
SET TBLPROPERTIES(
    'delta.stats.extended.collect' = 'true',
    'delta.stats.extended.inject' = 'true'
)

Για να απενεργοποιήσετε οποιαδήποτε από τις δύο ιδιότητες πίνακα, ορίστε την τιμή της σε false.

Προεπιλεγμένη συμπεριφορά δημιουργίας πίνακα

Χρησιμοποιήστε αυτή τη ρύθμιση σε επίπεδο συνεδρίας για να απενεργοποιήσετε την αυτόματη σφράγιση των ιδιοτήτων του πίνακα εκτεταμένων στατιστικών στοιχείων κατά τη δημιουργία νέων πινάκων.

Χρησιμοποιήστε αυτήν την πρόταση Spark SQL για να απενεργοποιήσετε την αυτόματη ρύθμιση κατά τη δημιουργία πίνακα:

SET spark.microsoft.delta.stats.collect.extended.property.setAtTableCreation=false;

Ελέγξτε τα στατιστικά στοιχεία

Μπορείτε να επιθεωρήσετε τα στατιστικά στοιχεία που είναι διαθέσιμα σε ένα βελτιστοποιημένο σχέδιο ερωτημάτων χρησιμοποιώντας τα API Spark. Αυτά τα API επιστρέφουν γενικά στατιστικά στοιχεία προγράμματος από οποιαδήποτε διαθέσιμη πηγή, συμπεριλαμβανομένων των στατιστικών στοιχείων καταλόγου Spark. Ένα αποτέλεσμα δεν επιβεβαιώνει ότι συλλέχθηκαν εκτεταμένα στατιστικά στοιχεία Fabric για τον πίνακα.

Έλεγχος πλήθους γραμμών και μεγέθους πίνακα (παράδειγμα Scala):

println(spark.read.table("tableName").queryExecution.optimizedPlan.stats)

Έλεγχος λεπτομερών στατιστικών στηλών:

val stats = spark.read.table("tableName").queryExecution.optimizedPlan.stats

stats.attributeStats.foreach { case (attrName, colStat) =>
    println(s"colName: $attrName distinctCount: ${colStat.distinctCount} min: ${colStat.min} max: ${colStat.max} nullCount: ${colStat.nullCount} avgLen: ${colStat.avgLen} maxLen: ${colStat.maxLen}")
}

Επανυπολογισμός στατιστικών στοιχείων

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

Αναδιατύπωση του πίνακα (σημείωση: η επιλογή επαναφέρει το ιστορικό):

spark.read.table("targetTable").write.partitionBy("partCol").mode("overwrite").saveAsTable("targetTable")

Προτεινόμενη προσέγγιση (Fabric Spark >= 3.2.0.19):

from pyspark.sql.delta import StatisticsStore

StatisticsStore.recomputeStatisticsWithCompaction(spark, "testTable1")

Εάν το σχήμα αλλάξει (για παράδειγμα, προσθέτετε ή αποθέτετε στήλες), καταργήστε τα παλιά στατιστικά στοιχεία πριν από τον επανυπολογισμό:

from pyspark.sql.delta import StatisticsStore

StatisticsStore.removeStatisticsData(spark, "testTable1")
StatisticsStore.recomputeStatisticsWithCompaction(spark, "testTable1")

Χρησιμοποιήστε το ΑΝΑΛΥΣΗ ΠΙΝΑΚΑ

Χρησιμοποιείται ANALYZE TABLE για τον υπολογισμό στατιστικών στοιχείων καταλόγου Spark σε όλες τις στήλες. Αυτή η εντολή δεν υπολογίζει εκ νέου τα εκτεταμένα στατιστικά στοιχεία που αποθηκεύονται από τα Αυτοματοποιημένα στατιστικά στοιχεία πίνακα. Για να υπολογίσετε εκ νέου αυτά τα στατιστικά στοιχεία, χρησιμοποιήστε StatisticsStore.recomputeStatisticsWithCompaction.

Εκτελέστε την εντολή:

Εκτελέστε την ακόλουθη πρόταση Spark SQL:

ANALYZE TABLE tableName COMPUTE STATISTICS FOR ALL COLUMNS

Ενεργοποίηση προσθήκης στατιστικών καταλόγου:

Χρησιμοποιήστε αυτήν την πρόταση Spark SQL για να ενεργοποιήσετε την εισαγωγή στατιστικών στοιχείων καταλόγου:

SET spark.microsoft.delta.stats.injection.catalog.enabled=true;

Για να απενεργοποιήσετε την εισαγωγή στατιστικών στοιχείων καταλόγου, χρησιμοποιήστε την ίδια ρύθμιση με την τιμή να έχει οριστεί σε false.

Περιορισμούς

Είναι σημαντικό να κατανοήσετε τους τρέχοντες περιορισμούς των αυτοματοποιημένων στατιστικών στοιχείων του Fabric, ώστε να μπορείτε να προγραμματίσετε ανάλογα.

  • Τα στατιστικά στοιχεία συλλέγονται μόνο κατά το χρόνο εγγραφής.
  • Οι ενημερώσεις από άλλους μηχανισμούς δεν συγκεντρώνονται αυτόματα.
  • Περιλαμβάνονται μόνο οι πρώτες 32 στήλες (συμπεριλαμβανομένων των ένθετων στηλών).
  • Οι διαγραφές και οι ενημερώσεις μπορούν να κάνουν τα στατιστικά στοιχεία μπαγιάτικα. Για πίνακες που χρησιμοποιούν διανύσματα διαγραφής, η τακτική OPTIMIZE ή REORG TABLE ... APPLY (PURGE) η συντήρηση ξαναγράφει τα επηρεαζόμενα αρχεία και ανανεώνει τα στατιστικά τους. Απενεργοποιήστε την έγχυση στατιστικών στοιχείων μεταξύ των κύκλων συντήρησης σε πίνακες με συχνές ενημερώσεις ή διαγραφές.
  • Ο επανυπολογισμός απαιτεί μια λειτουργία API επανεγγραφής ή στατιστικών.
  • Η έγχυση στατιστικών στοιχείων δεν ισχύει για ένθετες στήλες.
  • Σε ορισμένους φόρτους εργασίας, τα μπαγιάτικα ή ελλιπή στατιστικά στοιχεία μπορεί να οδηγήσουν σε παλινδρομήσεις.
  • ANALYZE TABLE Η υποστήριξη περιορίζεται σε FOR ALL COLUMNS.
  • Η σειρά στηλών ή οι αλλαγές ρύθμισης παραμέτρων μπορεί να απαιτούν πλήρη ανανέωση.