Τι είναι η γλώσσα ερωτημάτων Hive; HiveQL Operaκορμοί
⚡ Έξυπνη Σύνοψη
Η γλώσσα ερωτημάτων Hive παρέχει τους τελεστές που οδηγούν κάθε έκφραση HiveQL, ομάδαping τα χωρίζει σε σχεσιακές, αριθμητικές, λογικές, μιγαδικού τύπου και κατασκευαστικές οικογένειες που καλύπτουν από κοινού τη σύγκριση, τον υπολογισμό και την πρόσβαση σε ένθετα δεδομένα.
Τι είναι η Hive Query Language (HiveQL);
Hive Query Language (HiveQL) είναι μια γλώσσα ερωτημάτων σε Κυψέλη Apache για την επεξεργασία και ανάλυση δομημένων δεδομένων. Διαχωρίζει τους χρήστες από την πολυπλοκότητα του προγραμματισμού MapReduce. Επαναχρησιμοποιεί κοινές έννοιες από σχεσιακές βάσεις δεδομένων, όπως πίνακες, γραμμές, στήλες και σχήματα, για να διευκολύνει τη μάθηση. Το Hive παρέχει ένα CLI για τη σύνταξη ερωτημάτων Hive χρησιμοποιώντας τη γλώσσα ερωτημάτων Hive (HiveQL).
Οι περισσότερες αλληλεπιδράσεις τείνουν να πραγματοποιούνται μέσω μιας διεπαφής γραμμής εντολών (CLI). Γενικά, η σύνταξη HiveQL είναι παρόμοια με την SQL σύνταξη με την οποία είναι εξοικειωμένοι οι περισσότεροι αναλυτές δεδομένων. Οι τέσσερις μορφές αρχείων που αναφέρονται στην αρχική τεκμηρίωση του Hive είναι TEXTFILE, SEQUENCEFILE, ORC και RCFILE (Record Columnar File). Οι τρέχουσες εκδόσεις διαβάζουν και γράφουν επίσης τα Parquet και Avro, και το ORC είναι η μορφή που υποθέτει η πλειονότητα των οδηγιών συντονισμού.
Το Hive χρησιμοποιεί μια ενσωματωμένη βάση δεδομένων Derby για αποθήκευση μεταδεδομένων ενός χρήστη. Για αναπτύξεις πολλαπλών χρηστών ή κοινόχρηστων μετακαταστημάτων, το Hive χρησιμοποιεί MySQL ή μια άλλη εξωτερική σχεσιακή βάση δεδομένων, επειδή το Derby επιτρέπει μόνο μία συνεδρία κάθε φορά.
Ενσωματωμένο HiveQL Operaκορμοί
Το Hive παρέχει ενσωματωμένους τελεστές για τις λειτουργίες δεδομένων που εκτελούνται σε σχέση με τους πίνακες που διατηρούνται στην αποθήκη Hive.
Αυτοί οι τελεστές επιδρούν σε τελεστέους μέσα σε μια παράσταση και επιστρέφουν μια τιμή σύμφωνα με τη λογική που εφαρμόζεται, είτε αυτή η λογική είναι σύγκριση, υπολογισμός είτε αναζήτηση σε μια ένθετη στήλη.
Παρακάτω παρατίθενται οι κύριοι τύποι ενσωματωμένων τελεστών στο HiveQL:
- Σχεσιακοί τελεστές
- Αριθμητικοί τελεστές
- λογικούς τελεστές
- Operaπαράγοντες σε σύνθετους τύπους
- Κατασκευαστές σύνθετων τύπων
Κάθε οικογένεια καλύπτεται στην δική της ενότητα παρακάτω, με τον πλήρη πίνακα τελεστών για αυτήν την οικογένεια.
Σχετικός Operators στο HiveQL
Χρησιμοποιούμε σχεσιακούς τελεστές για συγκρίσεις σχέσεων μεταξύ δύο τελεστέων.
- Operaόροι όπως ίσο, όχι ίσο, μικρότερο από και μεγαλύτερο από.
- Οι τύποι τελεστών είναι όλοι πρωτόγονοι τύποι σε αυτούς τους τελεστές και οι τελεστές αντιστοίχισης προτύπων δέχονται μόνο συμβολοσειρές.
Κάθε σχεσιακός τελεστής επιστρέφει μια τιμή BOOLEAN, γι' αυτό και αυτοί οι τελεστές είναι η βάση για την οποία κατασκευάζονται μια ρήτρα WHERE, μια συνθήκη JOIN και ένας κλάδος CASE WHEN. Ο παρακάτω πίνακας παρέχει λεπτομέρειες σχετικά με τους σχεσιακούς τελεστές και τη χρήση τους στο HiveQL:
| Built-in OperaTor | Περιγραφή | Operand |
|---|---|---|
| Χ = Υ | TRUE αν η έκφραση X είναι ισοδύναμη με την έκφραση Y. Διαφορετικά FALSE. | Παίρνει όλους τους πρωτόγονους τύπους |
| Χ != Υ | TRUE αν η έκφραση X δεν είναι ισοδύναμη με την έκφραση Y. Διαφορετικά FALSE. | Παίρνει όλους τους πρωτόγονους τύπους |
| Χ < Υ | TRUE αν η έκφραση X είναι μικρότερη από την έκφραση Y. Διαφορετικά FALSE. | Παίρνει όλους τους πρωτόγονους τύπους |
| X <= Υ | TRUE αν η έκφραση X είναι μικρότερη ή ίση με την έκφραση Y. Διαφορετικά FALSE. | Παίρνει όλους τους πρωτόγονους τύπους |
| Χ > Υ | TRUE αν η έκφραση X είναι μεγαλύτερη από την έκφραση Y. Διαφορετικά FALSE. | Παίρνει όλους τους πρωτόγονους τύπους |
| Χ >= Υ | TRUE αν η έκφραση X είναι μεγαλύτερη ή ίση με την έκφραση Y. Διαφορετικά FALSE. | Παίρνει όλους τους πρωτόγονους τύπους |
| Το X ΕΙΝΑΙ ΜΗΧΑΝΟ | TRUE αν η έκφραση X αξιολογηθεί ως NULL, διαφορετικά FALSE. | Παίρνει όλους τους τύπους |
| Το X ΔΕΝ ΕΙΝΑΙ ΜΗΧΑΝΟ | FALSE αν η έκφραση X αξιολογηθεί ως NULL, διαφορετικά TRUE. | Παίρνει όλους τους τύπους |
| X LIKE Y | TRUE αν το μοτίβο συμβολοσειράς X ταιριάζει με το Y, διαφορετικά FALSE. | Παίρνει μόνο χορδές |
| X RLIKE Υ | NULL εάν το X ή το Y είναι NULL, TRUE εάν οποιαδήποτε υποσυμβολοσειρά του X ταιριάζει με το Java κανονική έκφραση Υ, διαφορετικά FALSE. | Παίρνει μόνο χορδές |
| X REGEXP Y | Το ίδιο με το RLIKE. | Παίρνει μόνο χορδές |
Σημειώστε ότι μια σύγκριση με το NULL δεν επιστρέφει ποτέ την τιμή TRUE ή FALSE. Αυτός είναι ο λόγος για τον οποίο ο πίνακας παραθέτει τους τελεστές IS NULL και IS NOT NULL ως ξεχωριστούς τελεστές αντί να αναμένει ότι το X = NULL θα λειτουργήσει.
Αριθμητική HiveQL Operaκορμοί
Χρησιμοποιούμε αριθμητικούς τελεστές για την εκτέλεση αριθμητικών πράξεων σε τελεστέους.
- Αριθμητικές πράξεις όπως πρόσθεση, υποδιαίρεσηtracΗ μετατροπή, ο πολλαπλασιασμός και η διαίρεση μεταξύ τελεστέων χρησιμοποιούν αυτούς τους τελεστές.
- Οι τύποι τελεστέων είναι όλοι αριθμητικοί τύποι σε αυτούς τους τελεστές.
Δείγμα παραδείγματος:
Το 2 + 3 δίνει το αποτέλεσμα 5.
Σε αυτό το παράδειγμα, το '+' είναι ο τελεστής, τα 2 και 3 είναι οι τελεστέοι και η τιμή που επιστρέφεται είναι 5.
Ο παρακάτω πίνακας παρέχει λεπτομέρειες σχετικά με τους αριθμητικούς τελεστές στη γλώσσα ερωτημάτων Hive:
| Built-in OperaTor | Περιγραφή | Operand |
|---|---|---|
| Χ + Υ | Θα επιστρέψει την έξοδο της προσθήκης των τιμών X και Y. | Παίρνει όλους τους τύπους αριθμών |
| Χ – Υ | Θα επιστρέψει την έξοδο του subtracαπόκλιση του Y από την τιμή X. | Παίρνει όλους τους τύπους αριθμών |
| Χ * Υ | Θα επιστρέψει την έξοδο πολλαπλασιασμού των τιμών X και Y. | Παίρνει όλους τους τύπους αριθμών |
| Χ/Υ | Θα επιστρέψει την έξοδο της διαίρεσης του Y από το X. | Παίρνει όλους τους τύπους αριθμών |
| X % Υ | Θα επιστρέψει το υπόλοιπο που προκύπτει από τη διαίρεση του X με το Y. | Παίρνει όλους τους τύπους αριθμών |
| Χ & Υ | Θα επιστρέψει την έξοδο των bitwise AND των X και Y. | Παίρνει όλους τους τύπους αριθμών |
| Χ | Υ | Θα επιστρέψει την έξοδο του bitwise OR των X και Y. | Παίρνει όλους τους τύπους αριθμών |
| Χ ^ Υ | Θα επιστρέψει την έξοδο του XOR των X και Y. | Παίρνει όλους τους τύπους αριθμών |
| ~X | Θα επιστρέψει την έξοδο του bitwise ΟΧΙ του X. | Παίρνει όλους τους τύπους αριθμών |
Οι τελευταίες τέσσερις γραμμές είναι αριθμητικές κατά bit και όχι συνηθισμένες: λειτουργούν με βάση τη δυαδική αναπαράσταση ακέραιων τελεστέων, επομένως τα &, | και ^ δεν είναι τα ίδια με τα λογικά AND, OR και NOT που καλύπτονται στην επόμενη ενότητα.
HiveQL Λογική Operaκορμοί
Χρησιμοποιούμε λογικούς τελεστές για την εκτέλεση λογικών πράξεων σε τελεστέους.
- Λογικές πράξεις όπως AND, OR και NOT μεταξύ τελεστέων χρησιμοποιούν αυτούς τους τελεστές.
- Οι τύποι τελεστέων είναι όλοι τύπου BOOLEAN σε αυτούς τους τελεστές.
Ο παρακάτω πίνακας παρέχει λεπτομέρειες σχετικά με τους λογικούς τελεστές στο HiveQL:
| Operaκορμοί | Περιγραφή | OperaNDS |
|---|---|---|
| Χ ΚΑΙ Υ | ΣΩΣΤΟ αν και το Χ και το Υ είναι ΣΩΣΤΟ, διαφορετικά ΛΑΘΟΣ. | Μόνο τύποι Boolean |
| X && Υ | Το ίδιο όπως τα X ΚΑΙ Y, αλλά εδώ χρησιμοποιούμε το σύμβολο &&. | Μόνο τύποι Boolean |
| Χ Ή Υ | ΣΩΣΤΟ εάν είτε το Χ είτε το Υ είτε και τα δύο είναι ΑΛΛΗ, διαφορετικά FALSE. | Μόνο τύποι Boolean |
| Χ || Υ | Το ίδιο όπως το X Ή το Y, αλλά εδώ χρησιμοποιούμε το σύμβολο ||. | Μόνο τύποι Boolean |
| ΟΧΙ Χ | ΣΩΣΤΟ αν το X είναι FALSE, διαφορετικά FALSE. | Μόνο τύποι Boolean |
| !X | Το ίδιο με το NOT X, αλλά εδώ χρησιμοποιούμε το σύμβολο !. | Μόνο τύποι Boolean |
Επειδή οι σχεσιακοί τελεστές επιστρέφουν τιμές BOOLEAN, οι λογικοί τελεστές είναι αυτοί που τις συνδυάζουν: ένα κατηγόρημα όπως μισθός > 50000 ΚΑΙ τμήμα = 'Πωλήσεις' συνδέει τη μία οικογένεια με την άλλη.
Operaσε σύνθετους τύπους
Οι σχεσιακοί, αριθμητικοί και λογικοί τελεστές λειτουργούν όλοι σε μεμονωμένες βαθμωτές τιμές. Το Hive αποθηκεύει επίσης στήλες πίνακα, χάρτη και δομής, και αυτές χρειάζονται διαφορετικό μηχανισμό για να φτάσουν στα στοιχεία που βρίσκονται μέσα σε αυτές. Ο παρακάτω πίνακας παρέχει λεπτομέρειες σχετικά με τους τελεστές σύνθετου τύπου, οι οποίοι παρέχουν αυτόν τον μηχανισμό:
| Operaκορμοί | OperaNDS | Περιγραφή |
|---|---|---|
| Ενα] | Το A είναι ένας πίνακας και το n είναι ένας ακέραιος τύπος | Θα επιστρέψει το n-οστό στοιχείο στον πίνακα A. Το πρώτο στοιχείο έχει δείκτη 0. |
| M[κλειδί] | Το Μ είναι ένας Χάρτης και το κλειδί έχει τύπο Κ | Θα επιστρέψει την τιμή που ανήκει στο κλειδί στον χάρτη. |
Και οι δύο μορφές είναι συνηθισμένες εκφράσεις, επομένως μπορούν να εμφανιστούν σε μια λίστα SELECT, σε έναν όρο WHERE ή σε μια GROUP BY, και ένα πεδίο struct προσεγγίζεται με συμβολισμό τελείας όπως S.field αντί για αγκύλη.
Κατασκευαστές σύνθετου τύπου
Όταν οι παραπάνω τελεστές διαβάζουν μια υπάρχουσα σύνθετη στήλη, οι κατασκευαστές δημιουργούν μια. Ο παρακάτω πίνακας παρέχει λεπτομέρειες σχετικά με τους κατασκευαστές σύνθετων τύπων, οι οποίοι δημιουργούν στιγμιότυπα των σύνθετων τύπων δεδομένων — Array, Map και Struct — στο Hive.
Σε αυτήν την ενότητα, θα δούμε τις λειτουργίες που εκτελούνται σε κατασκευαστές σύνθετων τύπων.
| Operaκορμοί | OperaNDS | Περιγραφή |
|---|---|---|
| παράταξη | (val1, val2,…) | Θα δημιουργήσει έναν πίνακα με τα δεδομένα στοιχεία όπως αναφέρθηκε, όπως val1, val2. |
| δημιουργία_ένωσης | (ετικέτα, val1, val2,…) | Θα δημιουργήσει έναν τύπο ένωσης με την τιμή που αναφέρεται από την παράμετρο ετικέτας. |
| χάρτη | (κλειδί1, τιμή1, κλειδί2, τιμή 2,…) | Θα δημιουργήσει έναν χάρτη με τα δεδομένα ζεύγη κλειδιού/τιμής που αναφέρονται στους τελεστές. |
| ονομασμένη_δομή | (όνομα1, val1, όνομα2, val2,…) | Θα δημιουργήσει μια δομή με τα δεδομένα ονόματα πεδίων και τιμές που αναφέρονται στους τελεστές. |
| δομ | (val1, val2, val3,…) | Δημιουργεί μια δομή με τις δεδομένες τιμές πεδίου. Τα ονόματα των πεδίων δομής θα είναι στήλη1, στήλη2 και ούτω καθεξής. |
Οι κατασκευαστές χρησιμοποιούνται συχνότερα σε μια συνάρτηση INSERT που συμπληρώνει μια σύνθετη στήλη ή σε μια συνάρτηση SELECT που συσκευάζει πολλές βαθμωτές στήλες σε μία δομή πριν γράψει το αποτέλεσμα σε έναν άλλο πίνακα.
Ενσωματωμένες λειτουργίες HiveQL
OperaΟι tors καλύπτουν τη σύγκριση, τον υπολογισμό και την πρόσβαση σε στοιχεία, αλλά δεν στρογγυλοποιούν έναν αριθμό, δεν περικόπτουν μια συμβολοσειρά ή ένα δευτερεύον στοιχείο.tract δύο ημερομηνίες. Αυτή η εργασία ανήκει στις ενσωματωμένες συναρτήσεις του Hive, οι οποίες καλούνται ονομαστικά μέσα στις ίδιες εκφράσεις στις οποίες εμφανίζονται οι τελεστές. Ο παρακάτω πίνακας ομαδοποιεί τις οικογένειες που συναντά πρώτα ένας αρχάριος.
| Οικογένεια συναρτήσεων | Τυπικά μέλη | Σε τι χρησιμοποιείται |
|---|---|---|
| Μαθηματικός | στρογγυλό(), δάπεδο(), οροφή(), abs(), pow(), sqrt(), rand() | Στρογγυλοποιήσεις, δυνάμεις και άλλοι αριθμητικοί υπολογισμοί σε μία τιμή στήλης. |
| Σπάγγος | concat(), substr(), upper(), lower(), trim(), length(), regexp_replace() | Καθαρισμός, κλάδεμα και ανανέωση του κουρέματοςping κείμενο πριν συγκριθεί ή ομαδοποιηθεί. |
| Ημερομηνία | τρέχουσα_ημερομηνία, έτος(), μήνας(), datediff(), προσθήκη_ημερομηνίας(), unix_timestamp() | Extracπροσδιορισμός τμημάτων ημερομηνίας και μέτρηση διαστημάτων μεταξύ δύο ημερομηνιών. |
| Υποθετικός | αν(), ΠΕΡΙΠΤΩΣΗ ΟΤΑΝ, συγχώνευση(), nvl(), isnull() | Επιλογή τιμής σε επίπεδο γραμμής και αντικατάσταση NULL με εφεδρική τιμή. |
| Συλλογή | μέγεθος(), κλειδιά_μαπ(), τιμές_μαπ(), περιέχει_πίνακες(), ταξινόμηση_πίνακα() | Επιθεώρηση των στηλών πίνακα, χάρτη και δομής στις οποίες έχουν πρόσβαση οι τελεστές σύνθετου τύπου. |
| Τύπος μετατροπής | cast(), δυαδικό() | Επιβολή εισαγωγής μιας στήλης στον τύπο που αναμένει ένας τελεστής. |
| Αδρανή (UDAF) | count(), sum(), avg(), min(), max(), collect_set() | Σύμπτυξη πολλών γραμμών σε μία τιμή, συνήθως παράλληλα με την GROUP BY. |
Η λίστα συναρτήσεων εξαρτάται από την έκδοση του Hive, επομένως αξίζει να την διαβάσετε από την ίδια την συνεδρία και όχι από μια στατική σελίδα. Δύο εντολές το κάνουν αυτό:
SHOW FUNCTIONS; DESCRIBE FUNCTION round; DESCRIBE FUNCTION EXTENDED round;
Η SHOW FUNCTIONS παραθέτει κάθε καταχωρημένο όνομα, η DESCRIBE FUNCTION εκτυπώνει την υπογραφή μίας γραμμής και η φόρμα EXTENDED προσθέτει παραδείγματα χρήσης όπου τα παρέχει η κλάση υλοποίησης. Όταν δεν ταιριάζει καμία ενσωματωμένη συνάρτηση, το Hive δέχεται ένα συνάρτηση που ορίζεται από τον χρήστη Γραμμένο σε Java.
HiveQL vs SQL: Βασικές διαφορές
Το HiveQL δανείζεται σκόπιμα τη σύνταξη SQL και οι παραπάνω πίνακες τελεστών θα φαίνονται οικείοι σε όποιον έχει γράψει SQL. Το μοντέλο εκτέλεσης παρακάτω δεν είναι το ίδιο και οι διαφορές εμφανίζονται μόλις ένα ερώτημα ξεπεράσει ένα απλό SELECT.
| συμπεριφορά | HiveQL | Παραδοσιακή SQL (RDBMS) |
|---|---|---|
| Χειρισμός σχήματος | Σχήμα κατά την ανάγνωση — το σχήμα εφαρμόζεται όταν υποβάλλεται ερώτημα στο αρχείο | Σχήμα κατά την εγγραφή — το σχήμα επιβάλλεται όταν εισάγεται η γραμμή |
| ΕΝΗΜΕΡΩΣΗ και ΔΙΑΓΡΑΦΗ σε επίπεδο γραμμής | Υποστηρίζεται μόνο σε πίνακες ACID. Οι διαχειριζόμενοι πίνακες είναι ACID από προεπιλογή από το Hive 3.0. | Υποστηρίζεται σε κάθε πίνακα από προεπιλογή |
| Δείκτες | Η υποστήριξη ευρετηρίου αφαιρέθηκε στο Hive 3.0 (HIVE-18448). Τα ευρετήρια σε επίπεδο αρχείου ORC ή Parquet και οι υλοποιημένες προβολές την αντικαθιστούν. | Το B-tree και άλλα δευτερεύοντα ευρετήρια αποτελούν βασικό χαρακτηριστικό |
| Εκτέλεση και καθυστέρηση | Μεταγλωττίζει σε μαζικές εργασίες σε Tez, MapReduce ή Spark, επομένως ακόμη και τα μικρά ερωτήματα συνεπάγονται κόστος έναρξης εργασίας | Διαδραστική εκτέλεση, συνήθως σε χιλιοστά του δευτερολέπτου |
| Στόχος σχεδιασμού | Απόδοση σε πολύ μεγάλα αρχεία σε HDFS ή σε χώρο αποθήκευσης αντικειμένων | Χαμηλή καθυστέρηση ανάγνωσης και εγγραφής σε έναν μόνο διακομιστή ή σύμπλεγμα |
Η πρακτική συνέπεια για τη γραφή με εκφράσεις είναι μικρή αλλά πραγματική. OperaΟι τελεστές συμπεριφέρονται όπως αναμένεται, ωστόσο ένα κατηγόρημα που θα απαντηθεί από ένα ευρετήριο σε μια σχεσιακή βάση δεδομένων απαντάται στο Hive σαρώνοντας αρχεία, επομένως το φιλτράρισμα σε μια στήλη διαμερίσματος συνήθως αξίζει πολύ περισσότερο από τη ρύθμιση του ίδιου του τελεστή.

