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


Ομαδοποίηση δεδομένων στην αποθήκη δεδομένων Fabric

Ισχύει για:✅ Warehouse στο Microsoft Fabric

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

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

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

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

Ακολουθεί μια απλοποιημένη εννοιολογική απεικόνιση της ομαδοποίησης δεδομένων:

Διάγραμμα που απεικονίζει την έννοια της ομαδοποίησης δεδομένων σε μια αποθήκη δεδομένων.

Σε αυτό το διάγραμμα, ένας πίνακας με Source data ετικέτα εμφανίζει γραμμές που αναμειγνύονται και επισημαίνονται με διαφορετικά χρώματα για να αναπαραστήσουν ομαδοποιήσεις ομαδοποίησης στον προορισμό. Ένας πίνακας Ordered χωρίζεται σε τρία τμήματα αρχείων, καθένα από τα οποία ομαδοποιεί γραμμές με παρόμοια χρώματα, δείχνοντας πώς η ομαδοποίηση οργανώνει τα δεδομένα σε βελτιστοποιημένα τμήματα αποθήκευσης με βάση τις τιμές στηλών.

Τα μεταδεδομένα ομαδοποίησης δεδομένων ενσωματώνονται στη διακήρυξη κατά την πρόσληψη, επιτρέποντας στη μηχανή αποθήκης να λαμβάνει έξυπνες αποφάσεις σχετικά με τα αρχεία στα οποία θα έχει πρόσβαση κατά τη διάρκεια ερωτημάτων χρήστη. Αυτά τα μετα-δεδομένα, σε συνδυασμό με τον τρόπο αποθήκευσης γραμμών με παρόμοιες τιμές, εξασφαλίζουν ότι τα ερωτήματα με κατηγορήματα φίλτρου μπορούν να παραλείπουν ολόκληρα αρχεία και ομάδες γραμμών που δεν εμπίπτουν στο πεδίο του κατηγορήματος. Για παράδειγμα: εάν ένα ερώτημα στοχεύει μόνο το 10% των δεδομένων ενός πίνακα, η δημιουργία συμπλέγματος εξασφαλίζει ότι σαρώνονται μόνο τα αρχεία που περιέχουν τα δεδομένα εντός της περιοχής του φίλτρου, μειώνοντας την κατανάλωση εισόδου/εξόδου και υπολογισμού. Οι μεγαλύτεροι πίνακες επωφελούνται περισσότερο από την ομαδοποίηση δεδομένων, καθώς τα οφέλη της παράβλεψης αρχείων κλιμακώνονται με τον όγκο δεδομένων.

Πότε να χρησιμοποιήσετε την ομαδοποίηση δεδομένων

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

  • Επαναλαμβανόμενα ερωτήματα με WHERE φίλτρα: Εάν ο φόρτος εργασίας περιλαμβάνει συχνά ερωτήματα που φιλτράρουν συγκεκριμένες στήλες, η ομαδοποίηση δεδομένων διασφαλίζει ότι μόνο τα σχετικά αρχεία σαρώνονται κατά τη διάρκεια των ερωτημάτων ανάγνωσης. Αυτό ισχύει επίσης όταν τα φίλτρα χρησιμοποιούνται επανειλημμένα σε πίνακες εργαλείων, αναφορές ή προγραμματισμένες εργασίες και προωθούνται προς τα κάτω στη μηχανή αποθήκης ως προτάσεις SQL.
  • Μεγαλύτεροι πίνακες: η ομαδοποίηση δεδομένων είναι πιο αποτελεσματική όταν εφαρμόζεται σε μεγάλους πίνακες όπου η σάρωση του πλήρους συνόλου δεδομένων είναι δαπανηρή. Οργανώνοντας γραμμές με ομαδοποίηση δεδομένων, ο μηχανισμός αποθήκης μπορεί να παραλείψει ολόκληρα αρχεία και ομάδες γραμμών που δεν ταιριάζουν με το φίλτρο ερωτήματος, γεγονός που μπορεί να μειώσει τη χρήση εισόδου/εξόδου και υπολογισμού.
  • Στήλες μέσης προς υψηλή πληθικότητας: Οι στήλες με υψηλότερη πληθικότητα (για παράδειγμα: στήλες που έχουν πολλές διακριτές τιμές, όπως ένα αναγνωριστικό ή μια ημερομηνία) επωφελούνται περισσότερο από την ομαδοποίηση δεδομένων, επειδή επιτρέπουν στη μηχανή να απομονώνει και να συντονίζει παρόμοιες τιμές. Αυτό επιτρέπει την αποτελεσματική παράβλεψη αρχείων, ειδικά για επιλεκτικά ερωτήματα. Οι στήλες με χαμηλή πληθικότητα (για παράδειγμα: φύλο, περιοχή) από τη φύση τους έχουν τις τιμές τους κατανεμημένες σε περισσότερα αρχεία, προσφέροντας επομένως περιορισμένες ευκαιρίες για παράβλεψη αρχείων.
  • Επιλεκτικά ερωτήματα με περιορισμένο εύρος: όταν τα ερωτήματα στοχεύουν συνήθως ένα μικρό υποσύνολο δεδομένων και συνδυάζονται με ένα φίλτρο WHERE, η ομαδοποίηση δεδομένων διασφαλίζει ότι διαβάζονται μόνο τα αρχεία που περιέχουν τις σχετικές γραμμές.

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

CLUSTER BY Σύνταξη

Η ομαδοποίηση δεδομένων ορίζεται κατά τη δημιουργία πίνακα, χρησιμοποιώντας τον CLUSTER BY όρο. Η σύνταξη έχει ως εξής:

Σύνταξη CREATE TABLE (Transact-SQL):

CREATE TABLE { warehouse_name.schema_name.table_name | schema_name.table_name | table_name } (
 [ ,... n ] –- Column list
) WITH (CLUSTER BY [ ,... n ]);

ΔΗΜΙΟΥΡΓΊΑ ΠΊΝΑΚΑ ΩΣ ΣΎΝΤΑΞΗ SELECT (Transact-SQL):

CREATE TABLE { warehouse_name.schema_name.table_name | schema_name.table_name | table_name } (
) WITH (CLUSTER BY[ ,... n ])
AS <select_statement>;

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

Η δημιουργία ενός πίνακα που χρησιμοποιεί ομαδοποίηση δεδομένων με SELECT INTO δεν υποστηρίζεται.

Υποστήριξη τύπου δεδομένων

Ο παρακάτω πίνακας συνοψίζει τους τύπους στηλών που μπορούν να χρησιμοποιηθούν στον CLUSTER BY όρο:

Κατηγορία Τύπος δεδομένων Υποστηρίζεται η ομαδοποίηση δεδομένων
Ακριβείς αριθμοί χαλινάρι Όχι
Ακριβείς αριθμοί bigint, int, smallint, δεκαδικό2, αριθμητικό Yes
Αριθμητικά στοιχεία κατά προσέγγιση float, πραγματικό Yes
Ημερομηνία και ώρα ημερομηνία, ημερομηνία/ώρα2, ώρα Yes
Συμβολοσειρές χαρακτήρων1 καρβουνιάζω Yes
Συμβολοσειρές χαρακτήρων1 βαρτσάρ Yes
Τύποι LOB varchar (μέγιστο),varbinary (μέγιστο) Όχι
Δυαδικές συμβολοσειρές varbinary, uniqueidentifier Όχι

1 Για τύπους συμβολοσειρών (char/varchar), χρησιμοποιούνται μόνο οι πρώτοι 32 χαρακτήρες όταν παράγονται στατιστικά στοιχεία στηλών. Ως αποτέλεσμα, οι στήλες με τιμές που περιέχουν μεγάλα προθήματα ενδέχεται να έχουν περιορισμένα οφέλη με την ομαδοποίηση δεδομένων.

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

Οι στήλες με μη υποστηριζόμενους τύπους δεδομένων μπορούν να εξακολουθούν να υπάρχουν σε έναν πίνακα που χρησιμοποιεί ομαδοποίηση δεδομένων, αλλά δεν μπορούν να χρησιμοποιηθούν με CLUSTER BYτο .

Βέλτιστες πρακτικές με την ομαδοποίηση δεδομένων

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

Λάβετε υπόψη τις ακόλουθες βέλτιστες πρακτικές κατά τη χρήση της ομαδοποίησης δεδομένων:

  • Η ομαδοποίηση δεδομένων είναι πιο αποτελεσματική σε μεγάλους πίνακες.
  • Όποτε είναι δυνατό, μαζική πρόσληψη και ενημερώσεις για την επεξεργασία μεγαλύτερου αριθμού γραμμών ταυτόχρονα, αντί για τη χρήση μικρότερων εργασιών. Για βέλτιστη απόδοση, οι λειτουργίες DML θα πρέπει να έχουν τουλάχιστον 1 εκατομμύριο γραμμές για να επωφεληθούν από την ομαδοποίηση δεδομένων. Μετά από διαδοχικές εισαγωγές, ενημερώσεις και διαγραφές, η συμπίεση δεδομένων μπορεί να ενοποιήσει σειρές από μικρότερα αρχεία σε αρχεία βέλτιστου μεγέθους.
  • Επιλέξτε στήλες με μεσαία προς υψηλή πληθικότητα για δημιουργία συμπλεγμάτων δεδομένων, καθώς αποδίδουν καλύτερα αποτελέσματα λόγω της διακριτής κατανομής τιμών τους. Οι στήλες με χαμηλή πληθικότητα ενδέχεται να προσφέρουν περιορισμένες ευκαιρίες για κλάδεμα λίμας.
  • Επιλέξτε στήλες με βάση τη συχνή χρήση WHERE κατηγορημάτων σε πίνακες εργαλείων, αναφορές, προγραμματισμένες εργασίες ή ερωτήματα χρήστη. Οι συνθήκες συμμετοχής στην ισότητα δεν επωφελούνται από την ομαδοποίηση δεδομένων. Για μια επισκόπηση του τρόπου χρήσης του Query Insights για την επιλογή στηλών για ομαδοποίηση δεδομένων με βάση τον τρέχοντα φόρτο εργασίας σας, ανατρέξτε στο Πρόγραμμα εκμάθησης: Χρήση συμπλεγμάτων δεδομένων στην αποθήκη δεδομένων Fabric.
  • Μην χρησιμοποιείτε ομαδοποίηση δεδομένων με περισσότερες στήλες από όσες είναι απολύτως απαραίτητες. Η δημιουργία συμπλεγμάτων πολλών στηλών προσθέτει πολυπλοκότητα στον χώρο αποθήκευσης, προσθέτει επιβάρυνση και ενδέχεται να μην προσφέρει πλεονεκτήματα, εκτός εάν όλες οι στήλες χρησιμοποιούνται μαζί σε ερωτήματα με κατηγορήματα.
  • Η σειρά στηλών που χρησιμοποιείται δεν CLUSTER BY είναι σημαντική και δεν αλλάζει τον τρόπο αποθήκευσης των γραμμών.
  • Κατά τη δημιουργία ενός πίνακα με ομαδοποίηση δεδομένων χρησιμοποιώντας CREATE TABLE AS SELECT (CTAS) ή την πρόσληψη δεδομένων με INSERT INTO ... SELECT, διατηρήστε το επιλεγμένο τμήμα αυτών των προτάσεων όσο το δυνατόν πιο απλό για βέλτιστη ποιότητα ομαδοποίησης δεδομένων.

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

Προβολές συστήματος

Τα μεταδεδομένα ομαδοποίησης δεδομένων μπορούν να ερωτηθούν χρησιμοποιώντας sys.index_columns. Εμφανίζει όλες τις στήλες που χρησιμοποιούνται στην ομαδοποίηση δεδομένων, συμπεριλαμβανομένης της τακτικής στήλης που χρησιμοποιείται στον CLUSTER BY όρο.

Το παρακάτω ερώτημα παραθέτει όλες τις στήλες που χρησιμοποιούνται στην ομαδοποίηση δεδομένων στην τρέχουσα αποθήκη και τους πίνακές τους:

SELECT
    t.name AS table_name,
    c.name AS column_name,
    ic.data_clustering_ordinal AS clustering_ordinal
FROM sys.tables t
JOIN sys.columns c
    ON t.object_id = c.object_id
JOIN sys.index_columns ic
    ON c.object_id = ic.object_id
   AND c.column_id = ic.column_id
WHERE ic.data_clustering_ordinal > 0
ORDER BY
    t.name,
    ic.data_clustering_ordinal;

Σημείωμα

Η τακτική στήλη εμφανίζεται για αναφορά μόνο ως η σειρά που χρησιμοποιήθηκε κατά CLUSTER BY τον ορισμό του πίνακα. Όπως αναφέρεται στις Βέλτιστες πρακτικές, η σειρά στηλών δεν επηρεάζει τις επιδόσεις.

Περιορισμοί και παρατηρήσεις

  • Οι επιδόσεις πρόσληψης δεδομένων ενδέχεται να υποβαθμιστούν όταν οι πίνακες περιέχουν μεγάλες στήλες varchar με πολύ μεταβλητά μεγέθη δεδομένων.
    • Για παράδειγμα, σκεφτείτε έναν πίνακα με στήλη varchar(200): εάν ορισμένες γραμμές περιέχουν μόνο λίγους χαρακτήρες ενώ άλλες πλησιάζουν το μέγιστο μήκος, η σημαντική διακύμανση στο μέγεθος των δεδομένων μπορεί να επηρεάσει αρνητικά την ταχύτητα πρόσληψης.
    • Αυτό το πρόβλημα είναι γνωστό και θα αντιμετωπιστεί σε μια επερχόμενη έκδοση.
  • IDENTITY Οι στήλες δεν μπορούν να χρησιμοποιηθούν με CLUSTER BYτο . Οι πίνακες που περιέχουν μια IDENTITY στήλη μπορούν ακόμα να χρησιμοποιηθούν για ομαδοποίηση δεδομένων, δεδομένου ότι χρησιμοποιεί διαφορετικές στήλες με CLUSTER BY.
  • Η ομαδοποίηση δεδομένων πρέπει να οριστεί κατά τη δημιουργία πίνακα. Η μετατροπή ενός κανονικού πίνακα σε πίνακα με CLUSTER BY δεν υποστηρίζεται. Ομοίως, η τροποποίηση των στηλών συμπλέγματος μετά τη δημιουργία ενός πίνακα δεν επιτρέπεται. Εάν απαιτούνται διαφορετικές στήλες ομαδοποίησης, χρησιμοποιήστε προαιρετικά το CREATE TABLE AS SELECT (CTAS) για να δημιουργήσετε έναν νέο πίνακα με τις επιθυμητές στήλες ομαδοποίησης.
  • Σε ορισμένες περιπτώσεις, η ομαδοποίηση δεδομένων μπορεί να εφαρμοστεί ασύγχρονα. Σε αυτές τις περιπτώσεις, τα δεδομένα αναδιοργανώνονται με μια εργασία παρασκηνίου και ο πίνακας ενδέχεται να μην είναι πλήρως βελτιστοποιημένος όταν ολοκληρωθεί η πρόσληψη. Αυτό μπορεί να συμβεί υπό τις ακόλουθες συνθήκες:
    • Όταν χρησιμοποιείτε INSERT INTO ... SELECT ή CREATE TABLE AS SELECT (CTAS) και η συρραφή των πινάκων προέλευσης και προορισμού είναι διαφορετική.
    • Κατά την πρόσληψη από εξωτερικά δεδομένα που είναι συμπιεσμένης μορφής CSV.
    • Όταν μια δήλωση πρόσληψης έχει λιγότερες από 1 εκατομμύριο γραμμές.
  • Η πρόσληψη δεδομένων σε πίνακες ομαδοποίησης δεδομένων συνεπάγεται επιβάρυνση σε σύγκριση με έναν πίνακα με το ίδιο σχήμα που δεν χρησιμοποιεί ομαδοποίηση δεδομένων. Αυτό συμβαίνει λόγω επιπλέον υπολογισμού που απαιτείται για τη βελτιστοποίηση της αποθήκευσης. Όταν η στήλη ομαδοποίησης έχει συρραφή χωρίς διάκριση πεζών-κεφαλαίων, αναμένονται επίσης περισσότερα έξοδα.
  • Η ομαδοποίηση δεδομένων μπορεί να ωφελήσει τον χρόνο απόκρισης ερωτήματος, την κατανάλωση μονάδας χωρητικότητας (CU) ή και τα δύο.

Παραδείγματα

Ένας. Δημιουργία ομαδοποιημένου πίνακα για δεδομένα πωλήσεων

Αυτό το παράδειγμα δημιουργεί έναν απλό Sales πίνακα και χρησιμοποιεί τις στήλες και CustomerID για ομαδοποίηση SaleDate δεδομένων.

CREATE TABLE Sales (
    SaleID INT,
    CustomerID INT,
    SaleDate DATE,
    Amount DECIMAL(10,2)
) WITH (CLUSTER BY (CustomerID, SaleDate))

B. Δημιουργήστε έναν ομαδοποιημένο πίνακα χρησιμοποιώντας το CREATE TABLE AS SELECT

Αυτό το παράδειγμα χρησιμοποιείται CREATE TABLE AS SELECT για τη δημιουργία ενός αντιγράφου του Sales υπάρχοντος πίνακα, με CLUSTER BY τη SaleDate στήλη.

CREATE TABLE Sales_CTAS 
WITH (CLUSTER BY (SaleDate)) 
AS SELECT * FROM Sales

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

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

SELECT
    c.name AS column_name,
    ic.data_clustering_ordinal AS clustering_ordinal
FROM sys.tables t
JOIN sys.columns c
    ON t.object_id = c.object_id
JOIN sys.index_columns ic
    ON c.object_id = ic.object_id
   AND c.column_id = ic.column_id
WHERE 
    ic.data_clustering_ordinal > 0
   AND t.name = 'Sales'
ORDER BY
    t.name,
    ic.data_clustering_ordinal;

Αποτελέσματα:

Πίνακας που εμφανίζει τις στήλες ομαδοποίησης και τις τακτικές θέσεις τους. Η πρώτη γραμμή παραθέτει το CustomerID με τακτική ομαδοποίηση 1. Η δεύτερη σειρά παραθέτει το SaleDate με τακτική ομαδοποίηση 2.

Δ. Έλεγχος της αποτελεσματικότητας των επιλογών στηλών για ομαδοποίηση δεδομένων

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

SELECT 
    allocated_cpu_time_ms, 
    data_scanned_disk_mb, 
    data_scanned_memory_mb, 
    data_scanned_remote_storage_mb
FROM 
    queryinsights.exec_requests_history 
WHERE 
     distributed_statement_id = '<Query_Statement_ID>'

Πού <Query_Statement_ID> βρίσκεται το αναγνωριστικό κατανεμημένης πρότασης του ερωτήματος που θέλετε να αξιολογήσετε.

Επόμενο βήμα