Προβολή και Ευρετηρίαση Κυψέλης: Δημιουργία με Παραδείγματα

⚡ Έξυπνη Σύνοψη

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

  • 👁️ Η άποψη είναι λογική: Μια προβολή αποθηκεύει μόνο την εντολή SELECT στο metastore, επομένως δεν καταλαμβάνει δικό της χώρο στο δίσκο.
  • 🔒 Μόνο για ανάγνωση εκ κατασκευής: Μια προβολή δεν μπορεί να είναι ο στόχος των εντολών LOAD, INSERT ή ALTER, επειδή το Hive την αξιολογεί εκ νέου σε κάθε ερώτημα.
  • 📍 Μονάδες δείκτη στα δεδομένα: Ένας δείκτης είναι ένας δείκτης προς μια τιμή στήλης που επιτρέπει στο Hive να διαβάσει ένα μέρος ενός αρχείου αντί για ολόκληρο τον πίνακα.
  • 🗂️ Δύο χειριστές: Η συμπαγής δημιουργία ευρετηρίου ταιριάζει σε στήλες υψηλής πληθικότητας και η δημιουργία ευρετηρίου bitmap ταιριάζει σε στήλες με λίγες διακριτές τιμές.
  • 🔄 Χειροκίνητη ανακατασκευή: Ένα ευρετήριο δεν ανανεώνεται ποτέ αυτόματα, επομένως η εντολή ALTER INDEX REBUILD πρέπει να εκτελεστεί μετά τις αλλαγές στον βασικό πίνακα.
  • 🚫 Αφαιρέθηκε στο Hive 3.0: Η δημιουργία ευρετηρίου καταργήθηκε στο HIVE-18448 και αντικαταστάθηκε από υλοποιημένες προβολές, αποθήκευση ORC ή Parquet και διαμέριση.

Προβολές και ευρετήρια στο Hive εξηγούνται με παραδείγματα

Τι είναι η Προβολή;

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

  • Μπορούμε να αποθηκεύσουμε οποιαδήποτε δεδομένα συνόλου αποτελεσμάτων ως προβολή στο Hive
  • Η χρήση είναι παρόμοια με τις προβολές που χρησιμοποιούνται στο SQL
  • Μια προβολή είναι μόνο για ανάγνωση, επομένως δεν μπορεί να είναι ο στόχος μιας εντολής LOAD, INSERT ή ALTER που γράφει δεδομένα.

Δημιουργία προβολής:

Σύνταξη:

Create VIEW <VIEWNAME> AS SELECT

Η πλήρης τεκμηριωμένη φόρμα δέχεται επίσης μια ρήτρα IF NOT EXISTS και μια προαιρετική λίστα στηλών, η οποία είναι χρήσιμη όταν η λίστα SELECT περιέχει παραστάσεις αντί για απλά ονόματα στηλών.

Παράδειγμα:

Hive>Create VIEW Sample_View AS SELECT * FROM employees WHERE salary>25000

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

Τι είναι το Index;

Τα ευρετήρια είναι δείκτες προς ένα συγκεκριμένο όνομα στήλης ενός πίνακα. Ο στόχος ενός ευρετηρίου είναι η βελτίωση της ταχύτητας αναζήτησης: χωρίς αυτό, ένα ερώτημα με ένα κατηγόρημα όπως ΟΠΟΥ tab1.col1 = 10 φορτώνει ολόκληρο τον πίνακα ή το διαμέρισμα και επεξεργάζεται κάθε γραμμή, ενώ ένα ευρετήριο στη στήλη 1 επιτρέπει στο Hive να διαβάσει μόνο ένα μέρος του αρχείου.

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

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

Σύνταξη:

Create INDEX <INDEX_NAME> ON TABLE <TABLE_NAME(column names)>

Παράδειγμα:

Create INDEX sample_Index ON TABLE guruhive_internaltable(id)

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

Διαφορά μεταξύ προβολής και ευρετηρίου στην κυψέλη

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

Άποψη Προβολή Περιεχόμενα
Τι αποθηκεύει Μόνο η πρόταση SELECT, στο metastore Ένας ξεχωριστός πίνακας ευρετηρίου που περιέχει δείκτες προς τα δεδομένα
Σκοπός Απλοποίηση ή περιορισμός του τι επιστρέφει ένα ερώτημα Μειώστε την ποσότητα δεδομένων που σαρώνονται για ένα κατηγόρημα
Κόστος δίσκου Ν/Α Επιπλέον αποθηκευτικός χώρος συν ανακατασκευή μετά από αλλαγές δεδομένων
Πρόσβαση εγγραφής Μόνο για ανάγνωση Δεν ερωτάται απευθείας· το χρησιμοποιεί ο βελτιστοποιητής
Τρέχουσα κατάσταση Υποστηρίζεται πλήρως Αφαιρέθηκε στο Hive 3.0

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

Τύποι ευρετηρίου στο Hive με σύνταξη

Οι εκδόσεις έως και το Hive 2.x περιελάμβαναν δύο χειριστές ευρετηρίου, ο οποίος ονομάζεται στην υποχρεωτική ρήτρα AS. Η συμπαγής ευρετηρίαση έφτασε στο Hive 0.7.0 και η ευρετηρίαση bitmap στο Hive 0.8.0.

  • Συμπαγής δείκτης: Αποθηκεύει την τιμή μαζί με τη διεύθυνση του μπλοκ HDFS που την περιέχει, αντί να καταγράφει την τοποθεσία κάθε μεμονωμένης εμφάνισης. Κατάλληλο για στήλες με πολλές διακριτές τιμές.
  • Ευρετήριο bitmap: αποθηκεύει ένα bitmap ανά διακριτή τιμή, η οποία είναι η συνήθης προσέγγιση για μια στήλη με μόνο έναν μικρό αριθμό διακριτών τιμών, όπως μια σημαία κατάστασης ή φύλου.

Ένα συμπαγές ευρετήριο δημιουργείται, παρατίθεται και αποσύρεται ως εξής:

CREATE INDEX table01_index ON TABLE table01 (column2) AS 'COMPACT';
SHOW INDEX ON table01;
DROP INDEX table01_index ON table01;

Η επιλογή WITH DEFERRED REBUILD καταχωρεί το ευρετήριο χωρίς να το συμπληρώσει, επομένως η δημιουργία μπορεί να προγραμματιστεί ξεχωριστά με ALTER INDEX. Ένα ευρετήριο bitmap δημιουργείται με τον ίδιο τρόπο, με διαφορετικό όνομα χειριστή:

CREATE INDEX table03_index ON TABLE table03 (column4) AS 'BITMAP' WITH DEFERRED REBUILD;
ALTER INDEX table03_index ON table03 REBUILD;
SHOW FORMATTED INDEX ON table03;
DROP INDEX table03_index ON table03;

Ένα ευρετήριο δεν ανανεώνεται αυτόματα. Κάθε φορά που ο βασικός πίνακας λαμβάνει νέα δεδομένα, η εντολή ALTER INDEX … REBUILD πρέπει να εκτελεστεί ξανά και σε έναν πίνακα με διαμερίσματα η αναδόμηση μπορεί να περιοριστεί σε ένα μόνο διαμέρισμα.

Γιατί καταργήθηκε η δημιουργία ευρετηρίου στο Hive 3.0

Η δημιουργία ευρετηρίου αφαιρέθηκε από το Hive στην έκδοση 3.0 με το HIVE-18448, επομένως οι λειτουργίες CREATE INDEX, SHOW INDEX και DROP INDEX δεν υπάρχουν πλέον σε ένα τρέχον σύμπλεγμα. Η λειτουργία σπάνια άξιζε το κόστος ανακατασκευής της μόλις ωρίμασε η αποθήκευση σε στήλες και ο βελτιστοποιητής βάσει κόστους. Τρεις αντικαταστάσεις καλύπτουν το ίδιο πεδίο.

  • Υλοποιημένες προβολές: που εισήχθη στο Hive 3.0.0, ένα υλοποιημένη άποψη Αποθηκεύει το προ-υπολογισμένο αποτέλεσμα ενός ερωτήματος και ο βελτιστοποιητής ξαναγράφει τα εισερχόμενα ερωτήματα σε σχέση με αυτό αυτόματα.
  • Μορφές αρχείων σε σχήμα στήλης: Τα ORC και Parquet διαθέτουν τους δικούς τους δείκτες χαμηλού βάρους και στατιστικά στοιχεία ελάχιστου/μέγιστου, έτσι ώστε ο αναγνώστης να μπορεί να παραλείψει ολόκληρες λωρίδες, μπλοκ ή αρχεία χωρίς κανένα δείκτη που να ορίζεται από τον χρήστη.
  • Χωρίσματα και κουβάδες: διαμέριση και ομαδοποίηση κλαδεύουν δεδομένα σε επίπεδο καταλόγου και αρχείου, κάτι που συνήθως αφαιρεί πολύ περισσότερα δεδομένα εισόδου από ό,τι αφαιρούσε ποτέ ένα ευρετήριο.

Στο Hive 2.x, ένα ευρετήριο εξακολουθεί να είναι έγκυρο, αλλά η νέα εργασία εξυπηρετείται καλύτερα με μία από τις παραπάνω επιλογές.

Συχνές Ερωτήσεις

Η εντολή DROP VIEW view_name το καταργεί και η εντολή ALTER VIEW view_name RENAME TO new_name το μετονομάζει. Επειδή μια προβολή δεν περιέχει δεδομένα, η εντολή dropping Δεν αγγίζει κανείς ποτέ τον βασικό πίνακα. Μόνο η καταχώρηση του metastore εξαφανίζεται.

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

Όχι. Το metastore διατηρεί την πρόταση SELECT και τη λίστα επιλυμένων στηλών, τίποτα περισσότερο. Κάθε αναφορά εκτελεί ξανά το υποκείμενο ερώτημα, γι' αυτό και μια προβολή σε μια αργή ένωση παραμένει αργή.

Στο Hive 0.12.0 και παλαιότερες εκδόσεις, το όνομα έκανε διάκριση πεζών-κεφαλαίων για τα CREATE INDEX και DROP INDEX, ενώ το ALTER INDEX χρειαζόταν πεζά γράμματα. Το Hive 0.13.0 έκανε τα ονόματα ευρετηρίων μη ευαίσθητα σε πεζά-κεφαλαία για κάθε πρόταση.

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

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

Παράγει αξιόπιστα εντολές CREATE VIEW από ένα σύντομο σχόλιο. Ελέγξτε οτιδήποτε αφορά συγκεκριμένη έκδοση, επειδή εξακολουθεί να εκπέμπει σύνταξη CREATE INDEX την οποία ένα σύμπλεγμα Hive 3.0 ή νεότερη έκδοση απορρίπτει κατηγορηματικά.

Το ευρετήριο είναι ένας ξεχωριστός πίνακας δεικτών και το Hive δεν το ανανεώνει ποτέ όταν αλλάζει ο βασικός πίνακας. Χωρίς αναδόμηση, οι δείκτες παύουν να είναι παλιοί, επομένως ο βελτιστοποιητής είτε παραλείπει το ευρετήριο είτε επιστρέφει παρωχημένες αντιστοιχίσεις.

Συνοψίστε αυτήν την ανάρτηση με: