Hive ETL: Φόρτωση παραδειγμάτων δεδομένων JSON, XML, κειμένου

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

Το Hive ETL μετατρέπει αρχεία κειμένου, XML και JSON σε πίνακες με δυνατότητα αναζήτησης, φορτώνοντάς τα στο Hive και σε άλλα.tracΜετατροπή τιμών με xpath() και get_json_object(), δίνοντας στους αναλυτές μια διεπαφή SQL πάνω από ημι-δομημένα δεδομένα Hadoop.

  • 🧱 Δομημένα φορτία: Ένα οριοθετημένο αρχείο κειμένου μετατρέπεται σε πίνακα με ROW FORMAT DELIMITED συν FIELDS TERMINATED BY και, στη συνέχεια, LOAD DATA LOCAL INPATH.
  • 🏷️ XML extraction: Μία μόνο στήλη STRING περιέχει κάθε έγγραφο XML και η συνάρτηση xpath() εξάγει τιμές από τις επώνυμες ετικέτες.
  • 🔑 JSON extraction: Η get_json_object() διαβάζει μία έκφραση JSONPath ανά κλήση, επομένως κάθε πεδίο χρειάζεται τη δική του κλήση.
  • 🪜 Ενσωματωμένα ωφέλιμα φορτία: Το σύνθετο JSON φορτώνεται ακριβώς με τον ίδιο τρόπο και η ιεραρχία περπατιέται με διακεκομμένες εκφράσεις JSONPath.
  • 📍 Κανόνες διαδρομής: Η λέξη-κλειδί LOCAL διαβάζει από το σύστημα αρχείων Linux, ενώ η παράλειψή της επιλύει τη διαδρομή στο HDFS.
  • 🎯 Πού ταιριάζει: Το Hive ταιριάζει στην αποθήκευση παρτίδων και στο ημι-δομημένο ETL αντί για αναζητήσεις εγγραφών με χαμηλή καθυστέρηση.

Hive ETL: Φόρτωση δεδομένων JSON, XML και κειμένου

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

Για μαζική επεξεργασία, θα γράψουμε προσαρμοσμένα σενάρια χρησιμοποιώντας προσαρμοσμένο map και reduce σενάρια σε μια γλώσσα scripting. Παρέχει ένα SQL όπως το περιβάλλον και η υποστήριξη για εύκολη αναζήτηση.

Εργασία με δομημένα δεδομένα χρησιμοποιώντας το Hive

Δομημένα δεδομένα σημαίνουν ότι τα δεδομένα έχουν τη σωστή μορφή γραμμών και στηλών. Αυτό μοιάζει περισσότερο με RDBMS δεδομένα με κατάλληλες γραμμές και στήλες.

Εδώ θα φορτώσουμε δομημένα δεδομένα που υπάρχουν σε αρχεία κειμένου στο Hive.

Βήμα 1) Σε αυτό το βήμα δημιουργούμε τον πίνακα "employees_guru" με ονόματα στηλών όπως ID, Όνομα, Ηλικία, Διεύθυνση, Μισθός και Τμήμα των υπαλλήλων με τύπους δεδομένων.

Δημιουργία του πίνακα employees_guru και φόρτωση του Employees.txt στο Hive

Από το παραπάνω στιγμιότυπο οθόνης, μπορούμε να παρατηρήσουμε τα εξής:

  1. Δημιουργία πίνακα "employees_guru"
  2. Φόρτωση δεδομένων από το Employees.txt στον πίνακα "employees_guru"

Βήμα 2) Σε αυτό το βήμα, εμφανίζουμε τα περιεχόμενα που είναι αποθηκευμένα σε αυτόν τον πίνακα χρησιμοποιώντας την εντολή "Επιλογή". Μπορούμε να παρατηρήσουμε τα περιεχόμενα του πίνακα στο ακόλουθο στιγμιότυπο οθόνης.

Επιλογή εξόδου ερωτήματος που εμφανίζει γραμμές του πίνακα Hive των employees_guru

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

Ερωτήματα που πρέπει να εκτελεστούν

1) Create table employees_guru(Id INT, Name STRING, Age INT, Address STRING, Salary FLOAT, Department STRING)
> Row format delimited
> Fields terminated by ',';
2) load data local inpath '/home/hduser/Employees.txt' into TABLE employees_guru;
3) select * from employees_guru;

Εργασία με ημιδομημένα δεδομένα χρησιμοποιώντας το Hive (XML, JSON)

Το Hive εκτελεί λειτουργίες ETL στο οικοσύστημα Hadoop λειτουργώντας ως Εργαλείο ETLΜπορεί να είναι δύσκολο να εκτελέσετε το MapReduce σε ορισμένους τύπους εφαρμογών. Το Hive μπορεί να μειώσει αυτήν την πολυπλοκότητα και παρέχει την καλύτερη λύση για εφαρμογές πληροφορικής όσον αφορά τον τομέα της αποθήκευσης δεδομένων.

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

XML σε πίνακα ομάδας

Σε αυτό, θα φορτώσουμε δεδομένα XML σε πίνακες Hive και θα ανακτήσουμε τις τιμές που είναι αποθηκευμένες μέσα στις ετικέτες XML.

Βήμα 1) Δημιουργία πίνακα “xmlsample_guru” με στήλη str τύπου δεδομένων string.

Δημιουργία του πίνακα xmlsample_guru και φόρτωση του test.xml στο Hive

Από το παραπάνω στιγμιότυπο οθόνης, μπορούμε να παρατηρήσουμε τα εξής:

  1. Δημιουργία πίνακα "xmlsample_guru"
  2. Φόρτωση δεδομένων από το test.xml στον πίνακα "xmlsample_guru"

Βήμα 2) Χρήση του XPath Με τη μέθοδο xpath(), θα μπορέσουμε να ανακτήσουμε τα δεδομένα που είναι αποθηκευμένα μέσα σε ετικέτες XML.

Ερώτημα xpath() που επιστρέφει τιμές ename και esal από τη στήλη XML

Από το παραπάνω στιγμιότυπο οθόνης, μπορούμε να παρατηρήσουμε τα εξής:

  1. Χρησιμοποιώντας τη μέθοδο xpath() ανακτούμε τις τιμές που είναι αποθηκευμένες στις υπομονάδες /emp/esal/ και /emp/ename/
  2. Τιμές που υπάρχουν μέσα σε ετικέτες XML. Σε αυτό το βήμα, εμφανίζουμε τις πραγματικές τιμές που είναι αποθηκευμένες στις ετικέτες XML στον πίνακα "xmlsample_guru"

Σημειώστε ότι η xpath() επιστρέφει έναν πίνακα από συμβολοσειρές. Η xpath_string(), η xpath_int() και η xpath_double() επιστρέφουν μια μοναδική πληκτρολογημένη τιμή.

Βήμα 3) Σε αυτό το βήμα, θα ανακτήσουμε και θα εμφανίσουμε το ακατέργαστο XML του πίνακα "xmlsample_guru".

Ακατέργαστα έγγραφα XML που είναι αποθηκευμένα στη στήλη str του xmlsample_guru

Από το παραπάνω στιγμιότυπο οθόνης, μπορούμε να παρατηρήσουμε τα εξής:

  • Τα πραγματικά δεδομένα XML που εμφανίζονται με ετικέτες
  • Αν παρατηρήσουμε μία μόνο ετικέτα, αυτή έχει ως γονική ετικέτα το "emp" και ως θυγατρικές ετικέτες το "ename" και το "esal".

Code απόσπασμα:

Ερωτήματα που πρέπει να εκτελεστούν

1) create table xmlsample_guru(str string);                                                                                                   2) load data local inpath '/home/hduser/test.xml' overwrite  into table xmlsample_guru;
3) select xpath(str,'emp/ename/text()'), xpath(str,'emp/esal/text()') from xmlsample_guru;

JSON (JavaΣημείωση αντικειμένου σεναρίου)

Τα δεδομένα των μέσων κοινωνικής δικτύωσης και των ιστότοπων αποθηκεύονται συνήθως σε μορφή JSON. Κάθε φορά που προσπαθούμε να ανακτήσουμε δεδομένα από διαδικτυακούς διακομιστές, θα επιστρέφονται αρχεία JSON. Χρησιμοποιώντας το Hive ως χώρο αποθήκευσης δεδομένων, μπορούμε να φορτώσουμε δεδομένα JSON σε πίνακες Hive δημιουργώντας σχήματα.

JSON σε πίνακα κυψέλης

Σε αυτό, θα φορτώσουμε δεδομένα JSON σε πίνακες Hive και θα ανακτήσουμε τις τιμές που είναι αποθηκευμένες στο σχήμα JSON.

Βήμα 1) Σε αυτό το βήμα, θα δημιουργήσουμε έναν πίνακα JSON με το όνομα "json_guru". Μόλις δημιουργηθεί, φορτώνουμε και εμφανίζουμε τα περιεχόμενα του πραγματικού σχήματος.

Δημιουργία του json_guru, φόρτωση του test.json και εμφάνιση του σχήματος JSON

Από το παραπάνω στιγμιότυπο οθόνης, μπορούμε να παρατηρήσουμε τα εξής:

  1. Δημιουργία πίνακα "json_guru"
  2. Φόρτωση δεδομένων από το test.json στον πίνακα “json_guru”
  3. Εμφάνιση του πραγματικού σχήματος του αρχείου JSON που είναι αποθηκευμένο στον πίνακα json_guru

Βήμα 2) Χρησιμοποιώντας τη μέθοδο get_json_object() μπορούμε να ανακτήσουμε τις τιμές δεδομένων που είναι αποθηκευμένες στην ιεραρχία JSON.

get_json_object() έξοδος με λίστα ecode, ename και μισθό από json_guru

Από το παραπάνω στιγμιότυπο οθόνης, μπορούμε να παρατηρήσουμε τα εξής:

  1. Χρησιμοποιώντας την εντολή get_json_object(str,'$.ecode') μπορεί να ανακτήσει τιμές ecode από τον πίνακα json_guru. Ομοίως, χρησιμοποιώντας την εντολή get_json_object(str,'$.ename') και την εντολή get_json_object(str,'$.sal') θα ανακτήσει τις τιμές ename και sal από τον πίνακα json_guru.
  2. Τιμές που αποθηκεύονται εντός της ιεραρχίας JSON στο json_guru

Επειδή η get_json_object() αναλύει το έγγραφο μία φορά ανά κλήση, η json_tuple() είναι φθηνότερη όταν χρειάζονται πολλά κλειδιά και ένα JSON SerDe αντιστοιχίζει το έγγραφο σε πληκτρολογημένες στήλες κατά τη στιγμή της φόρτωσης.

Code αποσπάσματος

Ερωτήματα που πρέπει να εκτελεστούν

1) create table json_guru(str string);
2) load data inpath 'home/hduser/test.json' into table json_guru;
3) select * from json_guru;
4) select get_json_object(str,'$.ecode') as ecode, get_json_object(str,'$.ename') as ename ,get_json_object(str,'$.sal') as salary from json_guru;

Σύνθετος πίνακας JSON σε Hive

Σε αυτό, θα φορτώσουμε σύνθετα δεδομένα JSON σε πίνακες Hive και θα ανακτήσουμε τις τιμές που είναι αποθηκευμένες στο σχήμα JSON.

Βήμα 1) Δημιουργία complexjson_guru με ένα πεδίο μίας στήλης.

Δημιουργία complexjson_guru και φόρτωση emp.json στον πίνακα Hive

Από το παραπάνω στιγμιότυπο οθόνης, μπορούμε να παρατηρήσουμε τα εξής:

  1. Δημιουργία πίνακα complexjson_guru με ένα πεδίο μίας στήλης ως τύπο δεδομένων συμβολοσειράς
  2. Φόρτωση δεδομένων στο complexjson_guru από το αρχείο complex JSON emp.json

Βήμα 2) Χρησιμοποιώντας την get_json_object μπορούμε να ανακτήσουμε το πραγματικό περιεχόμενο που είναι αποθηκευμένο μέσα στην ιεραρχία αρχείων JSON.

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

Extracted ecode και ένθετες τιμές κλειδιών από το σύνθετο έγγραφο JSON

Βήμα 3) Σε αυτό το βήμα, χρησιμοποιώντας την εντολή "Επιλογή" μπορούμε να δούμε τα σύνθετα δεδομένα JSON που είναι αποθηκευμένα στον πίνακα "complexjson_guru".

Επιλογή εξόδου που εμφανίζει ακατέργαστες σύνθετες γραμμές JSON στο complexjson_guru

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

Ερωτήματα που πρέπει να εκτελεστούν

1) create table complexjson_guru(json string);
2) load data inpath 'home/hduser/emp.json' into table complexjson_guru;
3) select get_json_object(json,'$.ecode') as ecode ,get_json_object(json,'$.b') as code, get_json_object(json,'$.c') from complexjson_guru;
4) select * from complexjson_guru;

Hive σε έργα πραγματικού χρόνου – Πότε και πού να χρησιμοποιηθεί

Πότε και πού να χρησιμοποιήσετε το Hive στο οικοσύστημα Hadoop:

Κατά τη

  • Όταν εργάζεστε με ισχυρές και ισχυρές στατιστικές συναρτήσεις στο οικοσύστημα Hadoop
  • Όταν εργάζεστε με δομημένη και ημιδομημένη επεξεργασία δεδομένων
  • Ως εργαλείο αποθήκης δεδομένων με το Hadoop
  • Πρόσληψη δεδομένων σε πραγματικό χρόνο με HBase, όπου μπορεί να χρησιμοποιηθεί το Hive

Πού

  • Για ευκολία χρήσης ως εργαλείο ETL και αποθήκευσης δεδομένων
  • Για να παρέχετε ένα περιβάλλον τύπου SQL και να υποβάλλετε ερωτήματα όπως το SQL χρησιμοποιώντας HiveQL
  • Για να χρησιμοποιήσετε και να αναπτύξετε προσαρμοσμένα καθορισμένα σενάρια χαρτών και μειωτών για συγκεκριμένες απαιτήσεις πελατών

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

Η LOCAL αντιγράφει το αρχείο από το σύστημα αρχείων του υπολογιστή-πελάτη. Χωρίς την LOCAL, το Hive αντιμετωπίζει τη διαδρομή ως HDFS και μετακινεί το αρχείο, επομένως μια σχετική διαδρομή επιλύεται στην αρχική σελίδα HDFS του χρήστη.

Η json_tuple() είναι συνήθως πιο γρήγορη: αναλύει το έγγραφο μία φορά και επιστρέφει πολλά κλειδιά μαζί, ενώ η get_json_object() αναλύει ξανά τη συμβολοσειρά για κάθε πεδίο. Χρησιμοποιήστε την get_json_object() για μία μόνο τιμή.

Όχι. Μία μόνο στήλη STRING συν τις συναρτήσεις JSON λειτουργεί. Ένα SerDe όπως το org.apache.hive.hcatalog.data.JsonSerDe ταιριάζει σε επαναλαμβανόμενα ερωτήματα παραγωγής, mapping πλήκτρα στις πληκτρολογημένες στήλες μία φορά αντί για κάθε ανάγνωση.

Συνήθως ένα αρχείο με όμορφη εκτύπωση: Το Hive αναμένει ένα πλήρες έγγραφο JSON ανά γραμμή, επομένως ένα έγγραφο που χωρίζεται σε γραμμές καθίσταται μη έγκυρη γραμμή. Ένα ορθογραφικό λάθος ή λάθος πεζά-κεφαλαία στο JSONPath κάνει το ίδιο.

Η xpath() επιστρέφει πάντα έναν πίνακα συμβολοσειρών. Χρησιμοποιήστε μια τυποποιημένη παραλλαγή: xpath_string(), xpath_int(), xpath_long(), xpath_float(), xpath_double() ή xpath_boolean(). Κάθε μία επιστρέφει ένα βαθμωτό μέγεθος αυτού του τύπου.

Το εξωτερικό είναι ασφαλέστερο για τα ακατέργαστα δεδομένα προσγείωσης, επειδή η πτώσηping Ο πίνακας αφήνει τα αρχεία στη θέση τους. Ένας διαχειριζόμενος πίνακας διαγράφει τον κατάλογο δεδομένων του στο DROP — βολικό για πίνακες scratch, καταστροφικό για κοινόχρηστα αρχεία.

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

Συντάσσει εντολές CREATE TABLE, εντολές LOAD DATA και εκφράσεις JSONPath από ένα δείγμα εγγραφής που έχει επικολληθεί στον επεξεργαστή. Δεν μπορεί να δει το σύμπλεγμα, επομένως τα ονόματα, οι διαδρομές και η ορθογραφία των κλειδιών χρειάζονται πρώτα επαλήθευση.

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