Δημιουργία πίνακα Hive: Εσωτερική, τροποποίηση και απόθεση με παραδείγματα

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

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

  • 🧱 ΔΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΑ: Μία πρόταση ορίζει τις στήλες, τη μορφή γραμμής και, προαιρετικά, τη θέση αποθήκευσης ενός πίνακα Hive.
  • 🏷️ ΑΛΛΑΓΗ ΠΙΝΑΚΑΣ: Η εντολή ΜΕΤΟΝΟΜΑ αλλάζει το όνομα του πίνακα και η εντολή ΠΡΟΣΘΗΚΗ ΣΤΗΛΩΝ ή ΑΛΛΑΓΗ ΣΤΗΛΗΣ επεξεργάζεται το σχήμα χωρίς να φορτώσει ξανά δεδομένα.
  • 🗑️ ΠΙΝΑΚΑΣ ΡΙΞΗΣ: Πτώσηping Ένας εσωτερικός πίνακας διαγράφει τόσο το σχήμα όσο και τα δεδομένα, ενώ η απόθεσηping Ένας εξωτερικός πίνακας καταργεί μόνο τα μεταδεδομένα.
  • 🔒 Εσωτερικά ανήκει σε: Ένας εσωτερικός ή διαχειριζόμενος πίνακας βρίσκεται στον κατάλογο αποθήκης και το Hive ελέγχει τον πλήρη κύκλο ζωής του.
  • 🔗 Αναφέρεται στο εξωτερικό: Ένας εξωτερικός πίνακας δείχνει σε αρχεία που διαβάζουν επίσης και άλλα εργαλεία, έτσι ώστε αυτά τα αρχεία να επιβιώνουν από την απόρριψη.
  • 🔎 Επαληθεύστε τον τύπο: Η ΠΕΡΙΓΡΑΦΗ FORMATTED αναφέρει MANAGED_TABLE ή EXTERNAL_TABLE, το οποίο αφαιρεί τυχόν εικασίες πριν από μια απόρριψη.

Εντολές δημιουργίας, τροποποίησης και απόθεσης πινάκων από την Hive με παραδείγματα

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

Πώς να δημιουργήσετε, να τροποποιήσετε και να αποθέσετε έναν πίνακα στο Hive

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

  1. Δημιουργία πίνακα guru_sample με δύο ονόματα στηλών όπως "empid" και "empname"
  2. Εμφάνιση πινάκων που υπάρχουν στη βάση δεδομένων guru99
  3. guru_sample που εμφανίζεται κάτω από πίνακες
  4. Τροποποίηση του πίνακα "guru_sample" σε "guru_sampleNew"
  5. Και πάλι, όταν εκτελείτε την εντολή "show", θα εμφανιστεί το νέο όνομα guru_sampleNew

Η παρακάτω συνεδρία περιλαμβάνει και τα πέντε βήματα με τη σειρά κυψέλη> προτροπή και οι δύο κλήσεις SHOW TABLES πριν και μετά την μετονομασία κάνουν το εφέ ορατό.

Συνεδρία Hive που δημιουργεί guru_sample και μετονομάζει το σε guru_sampleNew

Πτώσηping πίνακας guru_sampleΝέο:

Μία μόνο εντολή DROP TABLE καταργεί τον μετονομασμένο πίνακα και το Hive απαντά με OK.

Πτώση κελύφους κυψέληςping ο πίνακας guru_sampleNew με μια απάντηση 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 να διαχειρίζεται τον πλήρη κύκλο ζωής των δεδομένων, συμπεριλαμβανομένης της διαγραφής

Δείγμα αποσπάσματος κώδικα για εσωτερικό πίνακα

  1. Για να δημιουργήσετε τον εσωτερικό πίνακα
     Hive>CREATE TABLE guruhive_internaltable (id INT,Name STRING);
    	 Row format delimited 
    	 Fields terminated by '\t';
  2. Φορτώστε τα δεδομένα στον εσωτερικό πίνακα
        Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO table guruhive_internaltable;
  3. Εμφάνιση του περιεχομένου του πίνακα
        Hive>select * from guruhive_internaltable;
  4. Για να πέσει ο εσωτερικός πίνακας
        Hive>DROP TABLE guruhive_internaltable;

Εάν διαγράψετε τον πίνακα guruhive_internaltable, συμπεριλαμβανομένων των μεταδεδομένων και των δεδομένων του, θα διαγραφούν από το Hive. Εκτός εάν καθοριστεί PURGE, τα αρχεία μετακινούνται στον φάκελο απορριμμάτων HDFS αντί να καταργούνται αμέσως.

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

Δημιουργία, φόρτωση, υποβολή ερωτημάτων και απόθεση συνεδρίας Hiveping guruhive_internaltable

Στον παραπάνω κώδικα και από το στιγμιότυπο οθόνης κάνουμε τα εξής πράγματα:

  • Δημιουργήστε τον εσωτερικό πίνακα
  • Φορτώστε τα δεδομένα στον εσωτερικό πίνακα
  • Εμφάνιση του περιεχομένου του πίνακα
  • Για να πέσει ο εσωτερικός πίνακας

Εξωτερικοί πίνακες στο Hive

  • Ο εξωτερικός πίνακας έχει χαλαρή σύνδεση. Τα δεδομένα θα είναι διαθέσιμα σε HDFS. Ο πίνακας θα δημιουργηθεί σε δεδομένα HDFS.
  • Με άλλα λόγια, μπορούμε να πούμε ότι δημιουργεί σχήματα σε δεδομένα.
  • Κατά τη στιγμή της πτώσηςping Ο πίνακας αφήνει μόνο το σχήμα, τα δεδομένα θα εξακολουθούν να είναι διαθέσιμα σε HDFS όπως και πριν.
  • Οι εξωτερικοί πίνακες παρέχουν μια επιλογή δημιουργίας πολλαπλών σχημάτων για τα δεδομένα που είναι αποθηκευμένα στο HDFS αντί να διαγράφονται τα δεδομένα κάθε φορά κάθε φορά που ενημερώνεται το σχήμα
  • Από το Hive 4.0.0, ο ορισμός της ιδιότητας πίνακα external.table.purge σε true κάνει το DROP να διαγράψει και τα δεδομένα.

Πότε να επιλέξετε εξωτερικό τραπέζι;

  • Εάν τα δεδομένα επεξεργασίας είναι διαθέσιμα σε HDFS
  • Χρήσιμο όταν τα αρχεία χρησιμοποιούνται εκτός του Hive

Δείγμα αποσπάσματος κώδικα για εξωτερικό πίνακα

  1. Δημιουργία εξωτερικού πίνακα
    Hive>CREATE EXTERNAL TABLE guruhive_external(id INT,Name STRING)
    	 Row format delimited
    	 Fields terminated by '\t'
    	 LOCATION '/user/guru99hive/guruhive_external';
  2. Εάν δεν καθορίζουμε την τοποθεσία κατά τη στιγμή της δημιουργίας του πίνακα, μπορούμε να φορτώσουμε τα δεδομένα χειροκίνητα.
        Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO TABLE guruhive_external;
  3. Εμφάνιση του περιεχομένου του πίνακα
      Hive>select * from guruhive_external;
  4. Για να αποθέσετε τον εξωτερικό πίνακα
      Hive>DROP TABLE guruhive_external;

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

Δημιουργία, φόρτωση, υποβολή ερωτημάτων και απόθεση συνεδρίας Hiveping guruhive_external

Στον παραπάνω κώδικα, κάνουμε τα εξής πράγματα

  • Δημιουργήστε τον εξωτερικό πίνακα
  • Φορτώστε τα δεδομένα στον εξωτερικό πίνακα
  • Εμφάνιση του περιεχομένου του πίνακα
  • Πτώση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 πριν από την εκτέλεση της απόθεσης.

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

Εκτελέστε την εντολή DESCRIBE FORMATTED table_name. Η γραμμή Table Type αναφέρει είτε MANAGED_TABLE είτε EXTERNAL_TABLE. Ο έλεγχος πριν από μια απόθεση είναι ο φθηνότερος τρόπος για να αποφύγετε τη διαγραφή δεδομένων που εξακολουθούν να διαβάζουν άλλες εργασίες.

Ναι. Η συνάρτηση ALTER TABLE table_name SET TBLPROPERTIES ('EXTERNAL'='TRUE') αντιστρέφει τον τύπο στο metastore και η συνάρτηση FALSE τον αντιστρέφει. Τα αρχεία δεδομένων παραμένουν εκεί που βρίσκονται, επομένως δεν απαιτείται επαναφόρτωση.

Κανονικά όχι, μόνο η καταχώρηση metastore μεταβαίνει. Από το Hive 4.0.0, ωστόσο, ένας εξωτερικός πίνακας που φέρει την ιδιότητα external.table.purge ορισμένη σε true έχει επίσης τα δεδομένα του διαγραμμένα από το DROP, επομένως ελέγξτε πρώτα τις ιδιότητες.

Ένας απλός πίνακας CREATE TABLE παράγει πλέον έναν διαχειριζόμενο, συναλλακτικό πίνακα ORC από προεπιλογή αντί για έναν απλό πίνακα κειμένου. Η προσθήκη της λέξης-κλειδιού EXTERNAL είναι αυτό που διατηρεί την παλαιότερη, μη ACID συμπεριφορά σε ένα σύμπλεγμα Hive 3.

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

Όχι. Η ομάδα διπλώνει τα αναγνωριστικά σε πεζά γράμματα στο metastore, έτσι ώστε τα GURU_SAMPLE και guru_sample να αναφέρονται στον ίδιο πίνακα. Οι τιμές συμβολοσειρών μέσα στα δεδομένα εξακολουθούν να κάνουν διάκριση πεζών-κεφαλαίων, γι' αυτό και μια σύγκριση WHERE μπορεί να εξακολουθεί να μην χρησιμοποιεί γραμμές.

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

Το Copilot ολοκληρώνει τις εντολές CREATE, ALTER και DROP από ένα σύντομο σχόλιο και οι βοηθοί πρακτόρων μπορούν να δημιουργήσουν ένα ολόκληρο σενάριο μετεγκατάστασης. RevΔείτε τη λέξη-κλειδί EXTERNAL και οποιαδήποτε επιλογή PURGE, επειδή μια λανθασμένη εικασία εκεί διαγράφει τα πραγματικά δεδομένα.

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