Συμμετοχή στην ομάδα & Εγχειρίδιο SubQuery με παραδείγματα

Πίνακας περιεχομένων:

Anonim

Σε αυτό το σεμινάριο, θα μάθετε-

  • Συμμετοχή σε ερωτήματα
  • Διαφορετικός τύπος συμμετοχών
  • Υπο ερωτήματα
  • Ενσωμάτωση προσαρμοσμένων σεναρίων
  • UDFs (Λειτουργίες ορισμού χρήστη)

Συμμετοχή σε ερωτήματα:

Τα ερωτήματα συμμετοχής μπορούν να εκτελεστούν σε δύο πίνακες που υπάρχουν στην ομάδα Για την κατανόηση του Join Concepts με σαφήνεια εδώ δημιουργούμε δύο πίνακες από εδώ,

  • Sample_joins (Σχετικά με τις λεπτομέρειες των πελατών)
  • Sample_joins1 (Σχετικά με τις λεπτομέρειες παραγγελιών που πραγματοποιούνται από υπαλλήλους)

Βήμα 1) Δημιουργία πίνακα "sample_joins" με αναγνωριστικά ονομάτων στήλης, όνομα, ηλικία, διεύθυνση και μισθό των υπαλλήλων

Βήμα 2) Φόρτωση και εμφάνιση δεδομένων

Από το παραπάνω στιγμιότυπο οθόνης

  1. Φόρτωση δεδομένων σε sample_joins από το Customers.txt
  2. Εμφανίζεται το sample_joins περιεχόμενο του πίνακα

Βήμα 3) Δημιουργία του sample_joins1 πίνακα και φόρτωση, εμφάνιση δεδομένων

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

  1. Δημιουργία πίνακα sample_joins1 με στήλες Orderid, Date1, Id, Amount
  2. Φόρτωση δεδομένων σε sample_joins1 από orders.txt
  3. Εμφάνιση εγγραφών που υπάρχουν στο sample_joins1

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

Μερικά σημεία που πρέπει να παρατηρήσετε στο Joins:

  • Επιτρέπονται μόνο οι συμμετοχές Equality In Joins
  • Μπορούν να ενωθούν περισσότεροι από δύο πίνακες στο ίδιο ερώτημα
  • ΑΡΙΣΤΕΡΑ, ΔΕΞΙΑ, ΠΛΗΡΕΣ ΕΞΩΤΕΡΙΚΕΣ συνδέσεις υπάρχουν για να παρέχουν περισσότερο έλεγχο επί της ρήτρας ON για την οποία δεν υπάρχει αντιστοιχία
  • Οι συνδέσεις δεν είναι Commutative
  • Οι συνδέσεις είναι συνεργάτες αριστερά, ανεξάρτητα από το αν συμμετέχουν ΑΡΙΣΤΕΡΑ ή ΔΕΞΙΑ

Διαφορετικός τύπος συμμετοχών

Οι ενότητες είναι 4 τύπων, αυτοί είναι

  • Εσωτερική σύνδεση
  • Αριστερά εξωτερικά Συμμετοχή
  • Δεξιά εξωτερική συμμετοχή
  • Πλήρης εξωτερική συμμετοχή

Εσωτερική σύνδεση:

Οι κοινές εγγραφές και στους δύο πίνακες θα ανακτηθούν από αυτήν την Εσωτερική Συμμετοχή.

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

  1. Εδώ εκτελούμε ένα ερώτημα συμμετοχής χρησιμοποιώντας τη λέξη-κλειδί JOIN μεταξύ των πινάκων sample_joins και sample_joins1 με συνθήκη αντιστοίχισης ως (c.Id = o.Id).
  2. Η έξοδος που εμφανίζει κοινές εγγραφές που υπάρχουν και στους δύο πίνακες ελέγχοντας την κατάσταση που αναφέρεται στο ερώτημα

Ερώτηση:

SELECT c.Id, c.Name, c.Age, o.Amount FROM sample_joins c JOIN sample_joins1 o ON(c.Id=o.Id);

Αριστερή εξωτερική εγγραφή:

  • Γλώσσα ερωτήματος κυψέλης LEFT OUTER JOIN επιστρέφει όλες τις σειρές από τον αριστερό πίνακα παρόλο που δεν υπάρχουν αντιστοιχίσεις στο δεξί τραπέζι
  • Εάν το ON Clause ταιριάζει με μηδενικές εγγραφές στον σωστό πίνακα, οι συνδέσεις εξακολουθούν να επιστρέφουν μια εγγραφή στο αποτέλεσμα με NULL σε κάθε στήλη από τον σωστό πίνακα

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

  1. Εδώ εκτελούμε το ερώτημα συμμετοχής χρησιμοποιώντας τη λέξη-κλειδί "LEFT OUTER JOIN" ανάμεσα στους πίνακες sample_joins και sample_joins1 με συνθήκη αντιστοίχισης ως (c.Id = o.Id).

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

  2. Η έξοδος που εμφανίζει κοινές εγγραφές που υπάρχουν και στους δύο πίνακες ελέγχοντας την κατάσταση που αναφέρεται στο ερώτημα.

    Οι τιμές NULL στην παραπάνω έξοδο είναι στήλες χωρίς τιμές από το δεξί πίνακα που είναι sample_joins1

Ερώτηση:

SELECT c.Id, c.Name, o.Amount, o.Date1 FROM sample_joins c LEFT OUTER JOIN sample_joins1 o ON(c.Id=o.Id)

Δεξιά εξωτερική ένωση:

  • Γλώσσα ερωτήματος κυψέλης Το RIGHT OUTER JOIN επιστρέφει όλες τις σειρές από το δεξί τραπέζι, παρόλο που δεν υπάρχουν αντιστοιχίες στον αριστερό πίνακα
  • Εάν το ON Clause ταιριάζει με μηδενικές εγγραφές στον αριστερό πίνακα, οι συνδέσεις επιστρέφουν ακόμη μια εγγραφή στο αποτέλεσμα με NULL σε κάθε στήλη από τον αριστερό πίνακα
  • Οι ΔΕΞΙΕΣ συνδέουν πάντοτε την επιστροφή εγγραφών από έναν Δεξί πίνακα και τις αντίστοιχες εγγραφές από τον αριστερό πίνακα. Εάν ο αριστερός πίνακας δεν έχει τιμές που να αντιστοιχούν στη στήλη, θα επιστρέψει τιμές NULL σε αυτό το μέρος.

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

  1. Εδώ εκτελούμε ένα ερώτημα συμμετοχής χρησιμοποιώντας τη λέξη-κλειδί "RIGHT OUTER JOIN" μεταξύ των πινάκων sample_joins και sample_joins1 με συνθήκη αντιστοίχισης ως (c.Id = o.Id).
  2. Η έξοδος που εμφανίζει κοινές εγγραφές που υπάρχουν και στους δύο πίνακες ελέγχοντας την κατάσταση που αναφέρεται στο ερώτημα

Ερώτημα :

 SELECT c.Id, c.Name, o.Amount, o.Date1 FROM sample_joins c RIGHT OUTER JOIN sample_joins1 o ON(c.Id=o.Id)

Πλήρης εξωτερική ένωση:

Συνδυάζει εγγραφές και των δύο πινάκων sample_joins και sample_joins1 με βάση την συνθήκη JOIN που δίνεται στο ερώτημα.

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

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

  1. Εδώ εκτελούμε ένα ερώτημα συμμετοχής χρησιμοποιώντας τη λέξη-κλειδί "FULL OUTER JOIN" μεταξύ των πινάκων sample_joins και sample_joins1 με συνθήκη αντιστοίχισης ως (c.Id = o.Id).
  2. Η έξοδος που εμφανίζει όλες τις εγγραφές που υπάρχουν και στον δύο πίνακα ελέγχοντας την κατάσταση που αναφέρεται στο ερώτημα. Οι μηδενικές τιμές στην έξοδο δείχνουν τις τιμές που λείπουν από τις στήλες και των δύο πινάκων.

Ερώτηση

SELECT c.Id, c.Name, o.Amount, o.Date1 FROM sample_joins c FULL OUTER JOIN sample_joins1 o ON(c.Id=o.Id)

Υπο ερωτήματα:

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

Τα υποερώματα μπορούν να ταξινομηθούν σε δύο τύπους

  • Υποερωτήματα στην ενότητα FROM
  • Ερωτήματα στην ενότητα WHERE

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

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

Σύνταξη:

Subquery in FROM clauseSELECT From (SubQuery) Subquery in WHERE clauseSELECT  FromWHERE col1 IN (SubQuery);

Παράδειγμα:

SELECT col1 FROM (SELECT a+b AS col1 FROM t1) t2

Εδώ τα t1 και t2 είναι ονόματα πινάκων. Το έγχρωμο είναι Subquery που εκτελείται στον πίνακα t1. Εδώ τα a και b είναι στήλες που προστίθενται σε ένα υποερώτημα και αντιστοιχίζονται στο col1. Το Col1 είναι η τιμή της στήλης που υπάρχει στον Κύριο πίνακα. Αυτή η στήλη "col1" που υπάρχει στο υποερώτημα είναι ισοδύναμη με το κύριο ερώτημα πίνακα στη στήλη col1.

Ενσωμάτωση προσαρμοσμένων σεναρίων:

Hive παρέχει τη δυνατότητα σύνταξης σεναρίων συγκεκριμένων χρηστών για τις απαιτήσεις του πελάτη. Οι χρήστες μπορούν να γράψουν το δικό τους χάρτη και να μειώσουν τα σενάρια για τις απαιτήσεις. Αυτά ονομάζονται Ενσωματωμένα προσαρμοσμένα σενάρια. Η λογική κωδικοποίησης ορίζεται στα προσαρμοσμένα σενάρια και μπορούμε να χρησιμοποιήσουμε αυτό το σενάριο στην ώρα ETL.

Πότε να επιλέξετε Ενσωματωμένα Σενάρια:

  • Σε συγκεκριμένες απαιτήσεις πελάτη οι προγραμματιστές πρέπει να γράφουν και να αναπτύσσουν σενάρια στην ομάδα
  • Όπου οι ενσωματωμένες συναρτήσεις Hive δεν θα λειτουργούν για συγκεκριμένες απαιτήσεις τομέα

Για αυτό στο Hive χρησιμοποιεί ρήτρα TRANSFORM για την ενσωμάτωση σεναρίων χάρτη και μειωτή.

Σε αυτό το Ενσωματωμένο προσαρμοσμένο σενάριο, πρέπει να τηρήσουμε τα ακόλουθα σημεία

  • Οι στήλες θα μετατραπούν σε συμβολοσειρά και θα οριοθετηθούν από το TAB προτού την δώσουν στο script χρήστη
  • Η τυπική έξοδος του σεναρίου χρήστη θα αντιμετωπίζεται ως στήλη συμβολοσειράς διαχωρισμένη με TAB

Δείγμα ενσωματωμένου σεναρίου,

FROM (FROM pv_usersMAP pv_users.userid, pv_users.dateUSING 'map_script'AS dt, uidCLUSTER BY dt) map_outputINSERT OVERWRITE TABLE pv_users_reducedREDUCE map_output.dt, map_output.uidUSING 'reduce_script'AS date, count;

Από το παραπάνω σενάριο, μπορούμε να παρατηρήσουμε τα ακόλουθα

Αυτό είναι μόνο το δείγμα σεναρίου για κατανόηση

  • Το pv_users είναι ο πίνακας χρηστών που έχει πεδία όπως userid και ημερομηνία όπως αναφέρεται στο map_script
  • Το σενάριο μειωτή καθορίστηκε κατά την ημερομηνία και τον αριθμό των πινάκων pv_users