Παραδείγματα ερωτημάτων κυψέλης: Ταξινόμηση κατά, Ομαδοποίηση κατά & Cluster By
⚡ Έξυπνη Σύνοψη
Τα ερωτήματα Hive χρησιμοποιούν τους όρους ORDER BY, GROUP BY, SORT BY, CLUSTER BY και DISTRIBUTE BY για την ταξινόμηση, την ομαδοποίηση και την κατανομή γραμμών σε μειωτήρες και κάθε όρος παρουσιάζεται εδώ σε έναν μόνο πίνακα δείγματος υπαλλήλων.

Το Hive παρέχει μια γλώσσα ερωτημάτων τύπου SQL για σκοπούς ETL επιπλέον του Hadoop σύστημα αρχείων.
Η γλώσσα ερωτημάτων Hive (HiveQL) παρέχει ένα περιβάλλον τύπου SQL στο Hive για εργασία με πίνακες, βάσεις δεδομένων και ερωτήματα.
Διαφορετικοί τύποι ρητρών σχετίζονται με το Hive για την εκτέλεση διαφορετικών τύπων χειρισμού δεδομένων και ερωτημάτων, και το Hive παρέχει συνδεσιμότητα JDBC για καλύτερες συνδέσεις με κόμβους εκτός του περιβάλλοντος.
Τα ερωτήματα Hive παρέχουν τις ακόλουθες δυνατότητες:
- Μοντελοποίηση δεδομένων όπως δημιουργία βάσεων δεδομένων, πινάκων κ.λπ.
- Λειτουργίες ETL όπως π.χ.tracμετατροπή, μετασχηματισμός και φόρτωση δεδομένων σε πίνακες
- Ενώνει για τη συγχώνευση διαφορετικών πινάκων δεδομένων
- Ειδικά προσαρμοσμένα σενάρια χρήστη για ευκολία στον κώδικα
- Ταχύτερο εργαλείο αναζήτησης πάνω από το Hadoop
Δημιουργία πίνακα στο Hive
Πριν ξεκινήσουμε με το κύριο θέμα αυτού του σεμιναρίου, θα δημιουργήσουμε πρώτα έναν πίνακα που θα χρησιμοποιηθεί ως αναφορά για τις ενότητες που ακολουθούν.
Σε αυτό το σεμινάριο, θα δημιουργήσουμε τον πίνακα "employees_guru" με 6 στήλες, όπως φαίνεται στο παρακάτω στιγμιότυπο οθόνης.
Από το παραπάνω στιγμιότυπο οθόνης,
- Δημιουργούμε τον πίνακα "employees_guru" με 6 τιμές στηλών όπως Id, Name, Age, Address, Salary, Department, οι οποίες ανήκουν στους υπαλλήλους που υπάρχουν στον οργανισμό "guru".
- Σε αυτό το βήμα, φορτώνουμε δεδομένα στον πίνακα employees_guru. Τα δεδομένα που πρόκειται να φορτώσουμε τοποθετούνται στο αρχείο Employees.txt.
Παραγγελία με ερώτημα
Η σύνταξη ORDER BY στο HiveQL είναι παρόμοια με τη σύνταξη του ORDER BY στο SQL Γλώσσα.
Η ORDER BY είναι η πρόταση που χρησιμοποιούμε με την πρόταση "SELECT" στο Ερωτήματα κυψέλης για την ταξινόμηση δεδομένων. Χρησιμοποιεί στήλες σε πίνακες Hive για την ταξινόμηση των συγκεκριμένων τιμών στηλών που αναφέρονται με ORDER BY και το ερώτημα εμφανίζει τα αποτελέσματα σε αύξουσα ή φθίνουσα σειρά αυτών των τιμών.
Εάν το αναφερόμενο πεδίο ORDER BY είναι μια συμβολοσειρά, τότε εμφανίζει το αποτέλεσμα με λεξικογραφική σειρά. Στο παρασκήνιο, ολόκληρο το σύνολο αποτελεσμάτων πρέπει να διαβιβαστεί σε έναν μόνο μειωτή.
Αυτός ο μοναδικός μειωτής καθιστά επίσης την ORDER BY ακριβή σε ένα μεγάλο τραπέζι, επομένως σε αυστηρή λειτουργία (hive.mapred.mode=strict) Το Hive απορρίπτει μια εντολή ORDER BY που δεν περιέχει ρήτρα LIMIT.
Το παρακάτω στιγμιότυπο οθόνης δείχνει το ερώτημα ORDER BY και τις ταξινομημένες γραμμές του.
Από το παραπάνω στιγμιότυπο οθόνης, μπορούμε να παρατηρήσουμε τα εξής:
- Είναι το ερώτημα που εκτελείται στον πίνακα "employees_guru" με τον όρο ORDER BY και το Department ως το καθορισμένο όνομα στήλης ORDER BY. Το "Department" είναι μια συμβολοσειρά, επομένως εμφανίζει αποτελέσματα με βάση τη λεξικογραφική σειρά.
- Αυτή είναι η πραγματική έξοδος για το ερώτημα. Τα αποτελέσματα εμφανίζονται με βάση τη στήλη Τμήμα, όπως ΔΙΟΙΚΗΣΗ, Οικονομικά και ούτω καθεξής, με τη σειρά.
Ερώτηση:
SELECT * FROM employees_guru ORDER BY Department;
Ομαδοποίηση ανά ερώτημα
Η ρήτρα GROUP BY χρησιμοποιεί στήλες σε πίνακες Hive για ομαδοποίηση.ping τις συγκεκριμένες τιμές στήλης που αναφέρονται με την εντολή GROUP BY και το ερώτημα επιλέγει και εμφανίζει τα αποτελέσματα ομαδοποιημένα με βάση αυτές τις τιμές.
Για παράδειγμα, το παρακάτω στιγμιότυπο οθόνης εμφανίζει τον συνολικό αριθμό υπαλλήλων που υπάρχουν σε κάθε τμήμα. Εδώ έχουμε την τιμή "Τμήμα" ως GROUP BY.
Από το παραπάνω στιγμιότυπο οθόνης, θα παρατηρήσουμε τα εξής:
- Είναι το ερώτημα που εκτελείται στον πίνακα "employees_guru" με τον όρο GROUP BY και το Department ως το καθορισμένο όνομα στήλης GROUP BY.
- Το αποτέλεσμα που εμφανίζεται εδώ είναι το όνομα του τμήματος και ο αριθμός των υπαλλήλων στα διάφορα τμήματα. Όλοι οι υπάλληλοι που ανήκουν σε ένα συγκεκριμένο τμήμα ομαδοποιούνται και εμφανίζονται, επομένως κάθε σειρά αποτελεσμάτων είναι ένα όνομα τμήματος με τον συνολικό αριθμό υπαλλήλων του.
Ερώτηση:
SELECT Department, count(*) FROM employees_guru GROUP BY Department;
Ταξινόμηση κατά
Η ρήτρα SORT BY εκτελείται σε ονόματα στηλών πινάκων Hive για να ταξινομήσει την έξοδο. Μπορούμε να αναφέρουμε την DESC για ταξινόμηση κατά φθίνουσα σειρά και την ASC για αύξουσα σειρά ταξινόμησης.
Η ταξινόμηση κατά ταξινομεί τις γραμμές πριν τις εισάγει στον μειωτήρα, επομένως η ταξινόμηση είναι εγγυημένη μέσα σε κάθε μειωτήρα και όχι σε ολόκληρο το αποτέλεσμα. Η ταξινόμηση εξαρτάται πάντα από τον τύπο της στήλης.
Για παράδειγμα, εάν ο τύπος στήλης είναι αριθμητικός, η ταξινόμηση γίνεται με αριθμητική σειρά, ενώ εάν ο τύπος στήλης είναι συμβολοσειρά, η ταξινόμηση γίνεται με λεξικογραφική σειρά.
Το παρακάτω στιγμιότυπο οθόνης δείχνει το ερώτημα SORT BY χρησιμοποιώντας τη συνάρτηση DESC.
Από το παραπάνω στιγμιότυπο οθόνης μπορούμε να παρατηρήσουμε τα εξής:
- Είναι το ερώτημα που εκτελείται στον πίνακα "employees_guru" με τον όρο SORT BY και το "Id" ως το καθορισμένο όνομα στήλης SORT BY. Χρησιμοποιήσαμε τη λέξη-κλειδί DESC.
- Έτσι, η έξοδος που εμφανίζεται είναι κατά φθίνουσα σειρά του "Id".
Ερώτηση:
SELECT * from employees_guru SORT BY Id DESC;
Cluster By
Η συνάρτηση CLUSTER BY χρησιμοποιείται ως εναλλακτική λύση και για τις δύο ρήτρες DISTRIBUTE BY και SORT BY στο HiveQL.
Η ρήτρα CLUSTER BY χρησιμοποιείται σε πίνακες που υπάρχουν στο Hive. Το Hive χρησιμοποιεί τις στήλες στο CLUSTER BY για να κατανείμει τις γραμμές μεταξύ των μειωτήρων και οι στήλες CLUSTER BY πηγαίνουν σε πολλαπλούς μειωτήρες. Επίσης, διασφαλίζει τη σειρά ταξινόμησης των τιμών που υπάρχουν σε αυτούς τους πολλαπλούς μειωτήρες.
Για παράδειγμα, η ρήτρα CLUSTER BY αναφέρεται στο όνομα της στήλης Id του πίνακα employees_guru. Η εκτέλεση αυτού του ερωτήματος δίνει αποτελέσματα σε πολλαπλούς μειωτές στο παρασκήνιο, αλλά στο μπροστινό μέρος είναι μια εναλλακτική ρήτρα τόσο για την SORT BY όσο και για την DISTRIBUTE BY.
Αυτή είναι η διαδικασία back-end όταν εκτελούμε ένα ερώτημα με SORT BY, GROUP BY ή CLUSTER BY στο πλαίσιο MapReduce. Έτσι, αν θέλουμε να αποθηκεύσουμε τα αποτελέσματα σε πολλαπλούς μειωτήρες, επιλέγουμε CLUSTER BY.
Η γραμματική CLUSTER BY δέχεται μόνο ονόματα στηλών, επομένως οι ASC και DESC δεν μπορούν να προστεθούν σε αυτήν. Ένα φθίνον αποτέλεσμα χρειάζεται DISTRIBUTE BY με ξεχωριστό SORT BY … DESC.
Το παρακάτω στιγμιότυπο οθόνης δείχνει το ερώτημα CLUSTER BY στο Id.
Από το παραπάνω στιγμιότυπο οθόνης λαμβάνουμε τις ακόλουθες παρατηρήσεις:
- Είναι το ερώτημα που εκτελεί τον όρο CLUSTER BY στην τιμή του πεδίου Id. Εδώ θα γίνει ταξινόμηση στις τιμές Id.
- Εμφανίζει τις τιμές Id και Name που υπάρχουν στο employees_guru με ταξινομημένη σειρά.
Ερώτηση:
SELECT Id, Name from employees_guru CLUSTER BY Id;
Διανομή κατά
Η ρήτρα DISTRIBUTE BY χρησιμοποιείται σε πίνακες που υπάρχουν στο Hive. Το Hive χρησιμοποιεί τις στήλες στο DISTRIBUTE BY για να κατανείμει τις γραμμές μεταξύ των reducers, έτσι ώστε όλες οι γραμμές που μοιράζονται την ίδια τιμή στήλης DISTRIBUTE BY να πηγαίνουν στον ίδιο reducer.
- Εξασφαλίζει ότι κάθε ένας από τους μειωτήρες Ν δεν λαμβάνει επικάλυψηping σύνολο τιμών στήλης
- Δεν ταξινομεί την έξοδο κάθε μειωτήρα και δεν είναι εγγυημένο ότι οι αντίστοιχες γραμμές θα βρίσκονται η μία δίπλα στην άλλη.
Το παρακάτω στιγμιότυπο οθόνης δείχνει το ερώτημα DISTRIBUTE BY στο Id.
Από το παραπάνω στιγμιότυπο οθόνης, μπορούμε να παρατηρήσουμε τα εξής:
- Η ρήτρα DISTRIBUTE BY εκτελείται στο Id του πίνακα "employees_guru".
- Η έξοδος εμφανίζει το Id και το Όνομα. Στο παρασκήνιο, οι γραμμές με το ίδιο Id πηγαίνουν στον ίδιο μειωτήρα.
Ερώτηση:
SELECT Id, Name from employees_guru DISTRIBUTE BY Id;
Οι τέσσερις προτάσεις είναι εύκολο να συγχέονται, επομένως ο παρακάτω πίνακας τις συγκρίνει.
| Ρήτρα | Μειωτές | Τι εγγυάται |
|---|---|---|
| ΤΑΞΙΝΟΜΗΣΗ ΚΑΤΑ | Ένας | Συνολική σειρά σε ολόκληρο το αποτέλεσμα |
| ΣΥΝΤΟΜΟΠΟΙΗΣΤΕ ΑΠΟ | Πολλές | Παραγγελία μόνο εντός κάθε μειωτήρα |
| ΔΙΑΝΕΜΕΤΑΙ ΑΠΟ | Πολλές | Το ίδιο κλειδί φτάνει στον ίδιο μειωτήρα, χωρίς ταξινόμηση |
| ΟΜΑΔΟΠΟΙΗΣΗ ΜΕ | Πολλές | ΚΑΤΑΝΟΜΗ ΚΑΤΑ συν ΤΑΞΙΝΟΜΗΣΗ ΚΑΤΑ, αύξουσα |






