Δημιουργία πίνακα Hive: Εσωτερική, τροποποίηση και απόθεση με παραδείγματα
⚡ Έξυπνη Σύνοψη
Δημιουργία, τροποποίηση και απόρριψηping Οι πίνακες στο Apache Hive χρησιμοποιούν το γνωστό DDL τύπου SQL, αλλά το αποτέλεσμα εξαρτάται από το αν ο πίνακας είναι εσωτερικός, του οποίου η ιδιοκτησία είναι η Hive, ή εξωτερικός, ο οποίος απλώς περιγράφει αρχεία.

Λειτουργίες πίνακα όπως δημιουργία, τροποποίηση και απόθεσηping Οι πίνακες στο Hive μπορούν να παρατηρηθούν σε αυτήν την αναλυτική παρουσίαση. Κάθε λειτουργία εμφανίζεται πρώτα ως ζωντανή συνεδρία και στη συνέχεια ως επαναχρησιμοποιήσιμη δήλωση.
Πώς να δημιουργήσετε, να τροποποιήσετε και να αποθέσετε έναν πίνακα στο Hive
Στο παρακάτω στιγμιότυπο οθόνης, δημιουργούμε έναν πίνακα με στήλες και αλλάζουμε το όνομα του πίνακα.
- Δημιουργία πίνακα guru_sample με δύο ονόματα στηλών όπως "empid" και "empname"
- Εμφάνιση πινάκων που υπάρχουν στη βάση δεδομένων guru99
- guru_sample που εμφανίζεται κάτω από πίνακες
- Τροποποίηση του πίνακα "guru_sample" σε "guru_sampleNew"
- Και πάλι, όταν εκτελείτε την εντολή "show", θα εμφανιστεί το νέο όνομα guru_sampleNew
Η παρακάτω συνεδρία περιλαμβάνει και τα πέντε βήματα με τη σειρά κυψέλη> προτροπή και οι δύο κλήσεις SHOW TABLES πριν και μετά την μετονομασία κάνουν το εφέ ορατό.
Πτώσηping πίνακας guru_sampleΝέο:
Μία μόνο εντολή DROP TABLE καταργεί τον μετονομασμένο πίνακα και το Hive απαντά με OK.
Σύνταξη και Κοινές Προτάσεις του Hive CREATE TABLE
Το παραπάνω παράδειγμα χρησιμοποιεί τη συντομότερη δυνατή μορφή. Η τεκμηριωμένη πρόταση δέχεται αρκετές προαιρετικές ρήτρες και η καθεμία αποφασίζει κάτι που το παράδειγμα αφήνει ως προεπιλογή.
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name [(col_name data_type [COMMENT col_comment], ...)] [COMMENT table_comment] [PARTITIONED BY (col_name data_type, ...)] [CLUSTERED BY (col_name, ...) INTO num_buckets BUCKETS] [ROW FORMAT row_format] [STORED AS file_format] [LOCATION hdfs_path] [TBLPROPERTIES (property_name=property_value, ...)];
| Ρήτρα | Τι ελέγχει |
|---|---|
| ΕΞΩΤΕΡΙΚΕΣ | Δημιουργεί έναν εξωτερικό πίνακα, επομένως το DROP αφήνει τα αρχεία δεδομένων στη θέση τους |
| ΠΡΟΣΩΡΙΝΟΣ | Δημιουργεί έναν πίνακα με εύρος περιόδου λειτουργίας που εξαφανίζεται όταν λήξει η περίοδος λειτουργίας |
| ΑΝ ΔΕΝ ΥΠΑΡΧΕΙ | Καταστέλλει το σφάλμα όταν υπάρχει ήδη ένας πίνακας με αυτό το όνομα |
| ΧΩΡΙΣΜΕΝΟ ΑΠΟ | Διαχωρίζει τον πίνακα σε έναν κατάλογο ανά τιμή κλειδιού |
| ΟΜΑΔΟΠΟΙΗΜΕΝΟ ΑΠΟ … ΣΕ n ΚΟΥΒΑΔΕΣ | Κατακερματίζει τις γραμμές σε έναν σταθερό αριθμό αρχείων |
| ΜΟΡΦΗ ΓΡΑΜΜΗΣ / ΑΠΟΘΗΚΕΥΜΕΝΟ ΩΣ | Ορίζει τον οριοθέτη ή το SerDe και τη μορφή αρχείου, όπως TEXTFILE, ORC ή Parquet |
| ΤΟΠΟΘΕΣΙΑ | Υποδεικνύει τον πίνακα σε μια συγκεκριμένη διαδρομή HDFS αντί για την προεπιλεγμένη διαδρομή αποθήκης |
| TBL PROPERTIES | Επισυνάπτει ζεύγη κλειδιού-τιμής μεταδεδομένων, συμπεριλαμβανομένου του external.table.purge |
Μια σχετική φόρμα, ΔΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΑ new_table ΟΠΩΣ existing_table, αντιγράφει ένα σχήμα χωρίς να αντιγράψει καμία γραμμή. Δομικοί όροι όπως PARTITIONED BY και CLUSTERED BY καλύπτονται λεπτομερώς στον οδηγό για Χωρίσματα και κουβάδες κυψέλης.
Τύποι πινάκων και η χρήση του
Όσον αφορά τους πίνακες, είναι ακριβώς όπως ο τρόπος που δημιουργούμε σε παραδοσιακές σχεσιακές βάσεις δεδομένων. Λειτουργίες όπως το φιλτράρισμα και οι ενώσεις μπορούν να εκτελεστούν στους πίνακες.
Το Hive ασχολείται με δύο τύπους δομών πινάκων, εσωτερικούς και εξωτερικούς πίνακες, ανάλογα με τη φόρτωση και τον σχεδιασμό του σχήματος στο ΚυψέληΗ επιλογή δεν είναι αισθητική: αποφασίζει ποιος κατέχει τα αρχεία δεδομένων και τι συμβαίνει σε αυτά όταν ο πίνακας απορρίπτεται.
Εσωτερικοί πίνακες στο Hive
- Ο εσωτερικός πίνακας είναι στενά συνδεδεμένος στη φύση του. Σε αυτόν τον τύπο πίνακα, πρώτα πρέπει να δημιουργήσουμε τον πίνακα και να φορτώσουμε τα δεδομένα.
- Μπορούμε να το ονομάσουμε αυτό ως δεδομένα σε σχήμα.
- Με πτώσηping Σε αυτόν τον πίνακα, τόσο τα δεδομένα όσο και το σχήμα θα καταργηθούν.
- Η αποθηκευμένη τοποθεσία αυτού του πίνακα θα είναι στο /user/hive/warehouse.
- Οι εσωτερικοί πίνακες ονομάζονται επίσης διαχειριζόμενοι πίνακες και μόνο αυτοί υποστηρίζουν συναλλαγές TRUNCATE, ARCHIVE, MERGE, CONCATENATE και ACID.
Πότε να επιλέξετε εσωτερικό πίνακα;
- Εάν τα δεδομένα επεξεργασίας είναι διαθέσιμα στο τοπικό σύστημα αρχείων
- Αν θέλουμε η Hive να διαχειρίζεται τον πλήρη κύκλο ζωής των δεδομένων, συμπεριλαμβανομένης της διαγραφής
Δείγμα αποσπάσματος κώδικα για εσωτερικό πίνακα
- Για να δημιουργήσετε τον εσωτερικό πίνακα
Hive>CREATE TABLE guruhive_internaltable (id INT,Name STRING); Row format delimited Fields terminated by '\t';
- Φορτώστε τα δεδομένα στον εσωτερικό πίνακα
Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO table guruhive_internaltable;
- Εμφάνιση του περιεχομένου του πίνακα
Hive>select * from guruhive_internaltable;
- Για να πέσει ο εσωτερικός πίνακας
Hive>DROP TABLE guruhive_internaltable;
Εάν διαγράψετε τον πίνακα guruhive_internaltable, συμπεριλαμβανομένων των μεταδεδομένων και των δεδομένων του, θα διαγραφούν από το Hive. Εκτός εάν καθοριστεί PURGE, τα αρχεία μετακινούνται στον φάκελο απορριμμάτων HDFS αντί να καταργούνται αμέσως.
Από το ακόλουθο στιγμιότυπο οθόνης, μπορούμε να παρατηρήσουμε την έξοδο και των τεσσάρων δηλώσεων σε μία συνεδρία, η οποία ολοκληρώνεται με την επιτυχημένη απόθεση.
Στον παραπάνω κώδικα και από το στιγμιότυπο οθόνης κάνουμε τα εξής πράγματα:
- Δημιουργήστε τον εσωτερικό πίνακα
- Φορτώστε τα δεδομένα στον εσωτερικό πίνακα
- Εμφάνιση του περιεχομένου του πίνακα
- Για να πέσει ο εσωτερικός πίνακας
Εξωτερικοί πίνακες στο Hive
- Ο εξωτερικός πίνακας έχει χαλαρή σύνδεση. Τα δεδομένα θα είναι διαθέσιμα σε HDFS. Ο πίνακας θα δημιουργηθεί σε δεδομένα HDFS.
- Με άλλα λόγια, μπορούμε να πούμε ότι δημιουργεί σχήματα σε δεδομένα.
- Κατά τη στιγμή της πτώσηςping Ο πίνακας αφήνει μόνο το σχήμα, τα δεδομένα θα εξακολουθούν να είναι διαθέσιμα σε HDFS όπως και πριν.
- Οι εξωτερικοί πίνακες παρέχουν μια επιλογή δημιουργίας πολλαπλών σχημάτων για τα δεδομένα που είναι αποθηκευμένα στο HDFS αντί να διαγράφονται τα δεδομένα κάθε φορά κάθε φορά που ενημερώνεται το σχήμα
- Από το Hive 4.0.0, ο ορισμός της ιδιότητας πίνακα external.table.purge σε true κάνει το DROP να διαγράψει και τα δεδομένα.
Πότε να επιλέξετε εξωτερικό τραπέζι;
- Εάν τα δεδομένα επεξεργασίας είναι διαθέσιμα σε HDFS
- Χρήσιμο όταν τα αρχεία χρησιμοποιούνται εκτός του Hive
Δείγμα αποσπάσματος κώδικα για εξωτερικό πίνακα
- Δημιουργία εξωτερικού πίνακα
Hive>CREATE EXTERNAL TABLE guruhive_external(id INT,Name STRING) Row format delimited Fields terminated by '\t' LOCATION '/user/guru99hive/guruhive_external';
- Εάν δεν καθορίζουμε την τοποθεσία κατά τη στιγμή της δημιουργίας του πίνακα, μπορούμε να φορτώσουμε τα δεδομένα χειροκίνητα.
Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO TABLE guruhive_external;
- Εμφάνιση του περιεχομένου του πίνακα
Hive>select * from guruhive_external;
- Για να αποθέσετε τον εξωτερικό πίνακα
Hive>DROP TABLE guruhive_external;
Από το ακόλουθο στιγμιότυπο οθόνης, μπορούμε να παρατηρήσουμε την έξοδο. Σημειώστε ότι η απόθεση στο τέλος αφαιρεί μόνο το σχήμα – το αρχείο κάτω από τη διαδρομή LOCATION δεν έχει επηρεαστεί.
Στον παραπάνω κώδικα, κάνουμε τα εξής πράγματα
- Δημιουργήστε τον εξωτερικό πίνακα
- Φορτώστε τα δεδομένα στον εξωτερικό πίνακα
- Εμφάνιση του περιεχομένου του πίνακα
- Πτώσηping εξωτερικό τραπέζι
Διαφορά μεταξύ εσωτερικών και εξωτερικών πινάκων
| Χαρακτηριστικό | Εσωτερικός | Εξωτερικός |
|---|---|---|
| Schema | Δεδομένα για το σχήμα | Σχήμα σε δεδομένα |
| Τοποθεσία αποθήκευσης | /user/hive/warehouse | Η τοποθεσία HDFS δίνεται από την LOCATION |
| Διαθεσιμότητα δεδομένων | Μέσα σε τοπικό σύστημα αρχείων | Εντός HDFS |
| Επίδραση της ΠΤΩΣΗΣ | Διαγράφει σχήμα και δεδομένα | Διαγράφει μόνο το σχήμα, εκτός εάν η τιμή external.table.purge είναι true. |
| Υποστήριξη TRUNCATE | υποστηριζόνται! | Δεν υποστηρίζεται |
| Συναλλαγές ACID | υποστηριζόνται! | Δεν υποστηρίζεται |
The Τεκμηρίωση Apache Hive Ο κανόνας δηλώνεται ξεκάθαρα: Η Hive υποθέτει ότι της ανήκουν τα δεδομένα για τους διαχειριζόμενους πίνακες και υποθέτει ότι δεν της ανήκουν για τους εξωτερικούς πίνακες, και κάθε παραπάνω διαφορά προκύπτει από αυτή τη μία και μοναδική υπόθεση.
Αναφορά εντολών ALTER TABLE και DROP TABLE
Τα παραπάνω στιγμιότυπα οθόνης δείχνουν μόνο μια μετονομασία και μια απόθεση. Αυτές είναι οι δηλώσεις που χρησιμοποιεί πιο συχνά ένας επαγγελματίας σε έναν υπάρχοντα πίνακα.
| Δήλωση | Σκοπός |
|---|---|
| ΑΛΛΑΓΗ ΠΙΝΑΚΑ όνομα_πίνακα Μετονομασία σε νέο_όνομα; | Μετονομάζει τον πίνακα. Για έναν διαχειριζόμενο πίνακα, αυτό μετακινεί επίσης τον κατάλογο HDFS του. |
| ΑΛΛΑΓΗ ΠΙΝΑΚΑ όνομα_πίνακα ΠΡΟΣΘΗΚΗ ΣΤΗΛΩΝ (όνομα_στήλης_τύπος_δεδομένων); | Προσθέτει μία ή περισσότερες στήλες στο τέλος του σχήματος |
| ΤΡΟΠΟΠΟΙΗΣΗ ΠΙΝΑΚΑ όνομα_πίνακα ΑΛΛΑΓΗ ΣΤΗΛΗΣ old_name νέο_όνομα_δεδομένων_τύπος_δεδομένων; | Μετονομάζει μια στήλη ή αλλάζει τον τύπο της |
| ΑΛΛΑΓΗ ΠΙΝΑΚΑ όνομα_πίνακα ΑΝΤΙΚΑΤΑΣΤΑΣΗ ΣΤΗΛΩΝ (…); | Αντικαθιστά ολόκληρη τη λίστα στηλών με μια νέα |
| ΑΛΛΑΓΗ ΠΙΝΑΚΑ table_name SET TBLPROPERTIES ('ΕΞΩΤΕΡΙΚΟ'='TRUE'); | Μετατρέπει έναν διαχειριζόμενο πίνακα σε εξωτερικό και η τιμή FALSE τον αντιστρέφει. |
| ΑΠΟΡΡΙΨΗ ΠΙΝΑΚΑ [ΑΝ ΥΠΑΡΧΕΙ] table_name [ΕΚΚΑΘΑΡΙΣΜΟΣ]; | Καταργεί τον πίνακα. Το PURGE παρακάμπτει τον φάκελο απορριμμάτων, επομένως τα δεδομένα δεν μπορούν να ανακτηθούν. |
| ΠΕΡΙΚΟΠΗ [ΠΙΝΑΚΑΣ] όνομα_πίνακα; | Καταργεί όλες τις γραμμές αλλά διατηρεί το σχήμα. Μόνο διαχειριζόμενους πίνακες. |
Δύο μέτρα ασφαλείας αξίζει να ενσωματωθούν σε οποιοδήποτε σενάριο. Η συνάρτηση IF EXISTS εμποδίζει την αποτυχία μιας απόθεσης σε έναν πίνακα που έχει ήδη αφαιρεθεί και η συνάρτηση DESCRIBE FORMATTED επιβεβαιώνει εάν ο στόχος είναι MANAGED_TABLE ή EXTERNAL_TABLE πριν από την εκτέλεση της απόθεσης.




