Rejoignez la ruche & Tutoriel de sous-requête avec des exemples

Table des matières:

Anonim

Dans ce didacticiel, vous apprendrez-

  • Rejoindre les requêtes
  • Différents types de jointures
  • Requêtes secondaires
  • Incorporation de scripts personnalisés
  • UDF (fonctions définies par l'utilisateur)

Rejoindre les requêtes:

Les requêtes de jointure peuvent s'exécuter sur deux tables présentes dans Hive. Pour comprendre les concepts de jointure en clair ici, nous créons deux tables ici,

  • Sample_joins (lié aux détails des clients)
  • Sample_joins1 (lié aux détails des commandes effectuées par les employés)

Étape 1) Création de la table "sample_joins" avec les noms de colonnes ID, Nom, Âge, adresse et salaire des employés

Étape 2) Chargement et affichage des données

À partir de la capture d'écran ci-dessus

  1. Chargement de données dans sample_joins à partir de Customers.txt
  2. Affichage du contenu de la table sample_joins

Étape 3) Création de la table sample_joins1 et chargement, affichage des données

À partir de la capture d'écran ci-dessus, nous pouvons observer ce qui suit

  1. Création de la table sample_joins1 avec les colonnes Orderid, Date1, Id, Amount
  2. Chargement de données dans sample_joins1 à partir de orders.txt
  3. Affichage des enregistrements présents dans sample_joins1

À l'avenir, nous verrons différents types de jointures qui peuvent être effectuées sur les tables que nous avons créées, mais avant cela, vous devez prendre en compte les points suivants pour les jointures.

Quelques points à observer dans les jointures:

  • Seules les jointures d'égalité sont autorisées dans les jointures
  • Plus de deux tables peuvent être jointes dans la même requête
  • Les jointures GAUCHE, DROITE, FULL OUTER existent afin de fournir plus de contrôle sur la clause ON pour laquelle il n'y a pas de correspondance
  • Les jointures ne sont pas commutatives
  • Les jointures sont associatives à gauche, qu'il s'agisse de jointures GAUCHE ou DROITE

Différents types de jointures

Les jointures sont de 4 types, ce sont

  • Jointure interne
  • Jointure externe gauche
  • Jointure externe droite
  • Jointure externe complète

Jointure interne:

Les enregistrements communs aux deux tables seront récupérés par cette jointure interne.

À partir de la capture d'écran ci-dessus, nous pouvons observer ce qui suit

  1. Ici, nous effectuons une requête de jointure à l'aide du mot-clé JOIN entre les tables sample_joins et sample_joins1 avec la condition de correspondance comme (c.Id = o.Id).
  2. La sortie affichant les enregistrements communs présents à la fois dans la table en vérifiant la condition mentionnée dans la requête

Mettre en doute:

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

Jointure externe gauche:

  • Le langage de requête Hive LEFT OUTER JOIN renvoie toutes les lignes de la table de gauche même s'il n'y a pas de correspondance dans la table de droite
  • Si la clause ON correspond à zéro enregistrement dans la table de droite, les jointures renvoient toujours un enregistrement dans le résultat avec NULL dans chaque colonne de la table de droite

À partir de la capture d'écran ci-dessus, nous pouvons observer ce qui suit

  1. Ici, nous effectuons une requête de jointure en utilisant le mot clé "LEFT OUTER JOIN" entre les tables sample_joins et sample_joins1 avec la condition de correspondance comme (c.Id = o.Id).

    Par exemple, ici, nous utilisons l'identifiant d'employé comme référence, il vérifie si l'identifiant est commun à droite et à gauche de la table ou non. Il agit comme une condition correspondante.

  2. La sortie affichant les enregistrements communs présents à la fois dans la table en vérifiant la condition mentionnée dans la requête.

    Les valeurs NULL dans la sortie ci-dessus sont des colonnes sans valeurs de la table Right qui est sample_joins1

Mettre en doute:

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

Jointure externe droite:

  • Le langage de requête Hive RIGHT OUTER JOIN renvoie toutes les lignes de la table de droite même s'il n'y a aucune correspondance dans la table de gauche
  • Si la clause ON correspond à zéro enregistrement dans la table de gauche, les jointures renvoient toujours un enregistrement dans le résultat avec NULL dans chaque colonne de la table de gauche
  • Les jointures DROITE renvoient toujours les enregistrements d'une table de droite et les enregistrements correspondants de la table de gauche. Si la table de gauche n'a aucune valeur correspondant à la colonne, elle renverra des valeurs NULL à cet endroit.

À partir de la capture d'écran ci-dessus, nous pouvons observer ce qui suit

  1. Ici, nous effectuons une requête de jointure en utilisant le mot clé "RIGHT OUTER JOIN" entre les tables sample_joins et sample_joins1 avec la condition de correspondance comme (c.Id = o.Id).
  2. La sortie affichant les enregistrements communs présents à la fois dans la table en vérifiant la condition mentionnée dans la requête

Requête :

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

Jointure externe complète:

Il combine les enregistrements des tables sample_joins et sample_joins1 en fonction de la condition JOIN donnée dans la requête.

Il renvoie tous les enregistrements des deux tables et remplit les valeurs NULL pour les colonnes manquantes de valeurs correspondantes de chaque côté.

À partir de la capture d'écran ci-dessus, nous pouvons observer ce qui suit:

  1. Ici, nous effectuons une requête de jointure en utilisant le mot clé "FULL OUTER JOIN" entre les tables sample_joins et sample_joins1 avec la condition de correspondance comme (c.Id = o.Id).
  2. La sortie affichant tous les enregistrements présents à la fois dans la table en vérifiant la condition mentionnée dans la requête. Les valeurs nulles en sortie indiquent ici les valeurs manquantes dans les colonnes des deux tables.

Mettre en doute

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

Sous-requêtes:

Une requête présente dans une requête est appelée sous-requête. La requête principale dépendra des valeurs renvoyées par les sous-requêtes.

Les sous-requêtes peuvent être classées en deux types

  • Sous-requêtes dans la clause FROM
  • Sous-requêtes dans la clause WHERE

Quand utiliser:

  • Pour obtenir une valeur particulière combinée à partir de deux valeurs de colonne provenant de tables différentes
  • Dépendance d'une valeur de table sur d'autres tables
  • Vérification comparative des valeurs d'une colonne à partir d'autres tables

Syntaxe:

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

Exemple:

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

Ici, t1 et t2 sont des noms de table. La couleur est la sous-requête effectuée sur la table t1. Ici, a et b sont des colonnes qui sont ajoutées dans une sous-requête et affectées à col1. Col1 est la valeur de colonne présente dans la table principale. Cette colonne "col1" présente dans la sous-requête est équivalente à la requête de table principale de la colonne col1.

Intégration de scripts personnalisés:

Hive offre la possibilité d'écrire des scripts spécifiques à l'utilisateur pour les exigences du client. Les utilisateurs peuvent écrire leur propre carte et réduire les scripts pour les besoins. Ceux-ci sont appelés scripts personnalisés intégrés. La logique de codage est définie dans les scripts personnalisés et nous pouvons utiliser ce script dans le temps ETL.

Quand choisir les scripts intégrés:

  • Dans les exigences spécifiques du client, les développeurs doivent écrire et déployer des scripts dans Hive
  • Où les fonctions intégrées de Hive ne fonctionneront pas pour des exigences de domaine spécifiques

Pour cela, dans Hive, il utilise la clause TRANSFORM pour incorporer à la fois des scripts de mappage et de réduction.

Dans ces scripts personnalisés embarqués, nous devons observer les points suivants

  • Les colonnes seront transformées en chaîne et délimitées par TAB avant de les donner au script utilisateur
  • La sortie standard du script utilisateur sera traitée comme des colonnes de chaînes séparées par des tabulations

Exemple de script intégré,

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;

À partir du script ci-dessus, nous pouvons observer ce qui suit

Ceci n'est qu'un exemple de script pour comprendre

  • pv_users est la table users qui contient des champs comme userid et date comme mentionné dans map_script
  • Script de réduction défini à la date et au nombre des tables pv_users