Comment effectuer une jointure interne (inner join) dans Hive

HadoopHadoopBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans le monde du traitement des gros données (big data), Hadoop est apparu comme un cadre (framework) puissant, et Hive, une interface de type SQL pour Hadoop, est devenu l'outil incontournable pour de nombreux analystes et ingénieurs en données. Ce tutoriel vous guidera tout au long du processus d'exécution d'une jointure interne (inner join) dans Hive, une technique essentielle de manipulation de données pour combiner des données issues de plusieurs sources.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL hadoop(("Hadoop")) -.-> hadoop/HadoopHiveGroup(["Hadoop Hive"]) hadoop/HadoopHiveGroup -.-> hadoop/hive_setup("Hive Setup") hadoop/HadoopHiveGroup -.-> hadoop/hive_shell("Hive Shell") hadoop/HadoopHiveGroup -.-> hadoop/create_tables("Creating Tables") hadoop/HadoopHiveGroup -.-> hadoop/describe_tables("Describing Tables") hadoop/HadoopHiveGroup -.-> hadoop/join("join Usage") hadoop/HadoopHiveGroup -.-> hadoop/sort_by("sort by Usage") hadoop/HadoopHiveGroup -.-> hadoop/explain_query("Explaining Query Plan") subgraph Lab Skills hadoop/hive_setup -.-> lab-414547{{"Comment effectuer une jointure interne (inner join) dans Hive"}} hadoop/hive_shell -.-> lab-414547{{"Comment effectuer une jointure interne (inner join) dans Hive"}} hadoop/create_tables -.-> lab-414547{{"Comment effectuer une jointure interne (inner join) dans Hive"}} hadoop/describe_tables -.-> lab-414547{{"Comment effectuer une jointure interne (inner join) dans Hive"}} hadoop/join -.-> lab-414547{{"Comment effectuer une jointure interne (inner join) dans Hive"}} hadoop/sort_by -.-> lab-414547{{"Comment effectuer une jointure interne (inner join) dans Hive"}} hadoop/explain_query -.-> lab-414547{{"Comment effectuer une jointure interne (inner join) dans Hive"}} end

Introduction à Hive et aux jointures internes (Inner Joins)

Qu'est-ce que Hive ?

Hive est un logiciel de entrepôt de données (data warehouse) open source construit sur Apache Hadoop pour fournir des fonctionnalités de requête et d'analyse de données. Il permet aux utilisateurs de gérer, interroger et analyser de grands ensembles de données stockés dans le système de fichiers distribué (distributed file system) Hadoop (HDFS) en utilisant un langage de type SQL appelé HiveQL.

Qu'est-ce qu'une jointure interne (Inner Join) ?

Une jointure interne (inner join) est un type d'opération de jointure en SQL qui renvoie un ensemble de résultats contenant uniquement les lignes ayant des valeurs correspondantes dans les deux tables. En d'autres termes, elle combine les lignes de deux tables ou plus sur la base d'une colonne liée entre elles et ne renvoie que les lignes pour lesquelles la condition est vraie.

Pourquoi utiliser des jointures internes (Inner Joins) dans Hive ?

Les jointures internes (inner joins) dans Hive sont utiles lorsque vous avez besoin de combiner des données issues de plusieurs tables sur la base d'une colonne ou d'une clé commune. Il s'agit d'une opération courante dans l'analyse de données et l'intelligence commerciale, où vous devrez peut-être joindre des données provenant de différentes sources pour mieux comprendre vos données.

Syntaxe de la jointure interne (Inner Join) dans Hive

La syntaxe de base d'une jointure interne (inner join) dans Hive est la suivante :

SELECT column1, column2, ...
FROM table1
INNER JOIN table2
ON table1.column = table2.column;

Ici, table1 et table2 sont les deux tables que vous souhaitez joindre, et la clause ON spécifie la ou les colonnes sur lesquelles la jointure doit être effectuée.

Mise en œuvre des jointures internes (Inner Joins) dans Hive

Création de tables d'exemple

Créons deux tables d'exemple dans Hive pour illustrer les jointures internes (inner joins) :

CREATE TABLE customers (
  customer_id INT,
  customer_name STRING,
  city STRING
)
STORED AS TEXTFILE;

CREATE TABLE orders (
  order_id INT,
  customer_id INT,
  order_amount DOUBLE
)
STORED AS TEXTFILE;

Exécution d'une jointure interne (Inner Join)

Pour exécuter une jointure interne (inner join) entre les tables customers et orders, nous pouvons utiliser la requête SQL suivante :

SELECT c.customer_name, o.order_id, o.order_amount
FROM customers c
INNER JOIN orders o
ON c.customer_id = o.customer_id;

Cette requête ne renverra que les lignes où il y a une correspondance entre la colonne customer_id des deux tables.

Jointure de plusieurs tables

Vous pouvez également effectuer des jointures internes (inner joins) sur plus de deux tables. Par exemple, pour joindre les tables customers, orders et une table products, vous pouvez utiliser la requête suivante :

SELECT c.customer_name, o.order_id, p.product_name, o.order_amount
FROM customers c
INNER JOIN orders o ON c.customer_id = o.customer_id
INNER JOIN products p ON o.product_id = p.product_id;

Cela renverra le nom du client, l'identifiant de commande, le nom du produit et le montant de la commande pour toutes les commandes où il y a une correspondance entre les trois tables.

Gestion des valeurs nulles

Si des valeurs nulles sont présentes dans les colonnes de jointure, la jointure interne (inner join) exclura ces lignes de l'ensemble de résultats. Si vous souhaitez inclure les lignes avec des valeurs nulles, vous pouvez utiliser une jointure gauche (left join) ou une jointure externe complète (full outer join) à la place.

Optimisation des requêtes de jointure interne (Inner Join)

Élagage des partitions (Partition Pruning)

L'élagage des partitions (partition pruning) est une technique utilisée dans Hive pour optimiser les requêtes en réduisant la quantité de données à scanner. Lorsque vous avez des tables partitionnées, Hive peut sauter la lecture des partitions inutiles en fonction des conditions de votre requête.

Pour tirer parti de l'élagage des partitions, assurez-vous de partitionner vos tables sur les colonnes utilisées dans les conditions de jointure. Par exemple :

CREATE TABLE orders (
  order_id INT,
  customer_id INT,
  order_amount DOUBLE
)
PARTITIONED BY (order_date STRING)
STORED AS TEXTFILE;

Ensuite, lorsque vous effectuez une jointure interne (inner join) avec la table orders, Hive ne lira que les partitions pertinentes en fonction des conditions de votre requête.

Bucketage et tri (Bucketing and Sorting)

Le bucketage (bucketing) et le tri (sorting) sont d'autres techniques que vous pouvez utiliser pour optimiser les requêtes de jointure interne (inner join) dans Hive. Le bucketage divise les données en un nombre fixe de compartiments (buckets) en fonction du hachage d'une ou plusieurs colonnes, tandis que le tri ordonne les données en fonction d'une ou plusieurs colonnes.

Le bucketage et le tri peuvent aider à améliorer les performances des jointures internes (inner joins) en réduisant la quantité de données à mélanger et à trier lors de l'opération de jointure. Voici un exemple :

CREATE TABLE customers (
  customer_id INT,
  customer_name STRING,
  city STRING
)
CLUSTERED BY (customer_id) INTO 8 BUCKETS
SORTED BY (customer_id) STORED AS TEXTFILE;

CREATE TABLE orders (
  order_id INT,
  customer_id INT,
  order_amount DOUBLE
)
CLUSTERED BY (customer_id) INTO 8 BUCKETS
SORTED BY (customer_id) STORED AS TEXTFILE;

En effectuant le bucketage et le tri des deux tables sur la colonne customer_id, Hive peut effectuer une jointure côté carte (map-side join) plus efficace, réduisant ainsi la quantité de données à mélanger et à trier.

Utilisation de stratégies de jointure appropriées

Hive prend en charge différentes stratégies de jointure, telles que les jointures côté carte (map-side joins), les jointures de tri-fusion (sort-merge joins) et les jointures de diffusion (broadcast joins). Le choix de la stratégie de jointure peut avoir un impact significatif sur les performances de vos requêtes de jointure interne (inner join).

Hive choisira automatiquement la stratégie de jointure appropriée en fonction de la taille des tables et d'autres facteurs. Cependant, vous pouvez également spécifier manuellement la stratégie de jointure en utilisant les indications /*+ MAPJOIN */ ou /*+ STREAMTABLE */ dans votre requête.

En utilisant la bonne stratégie de jointure et d'autres techniques d'optimisation, vous pouvez améliorer considérablement les performances de vos requêtes de jointure interne (inner join) dans Hive.

Résumé

À la fin de ce tutoriel, vous aurez une bonne compréhension de la mise en œuvre des jointures internes (inner joins) dans Hive, une compétence essentielle pour travailler avec Hadoop et les gros données (big data). Vous apprendrez également des techniques pour optimiser vos requêtes de jointure interne (inner join) dans Hive afin d'améliorer les performances, garantissant ainsi un traitement efficace des données dans vos applications basées sur Hadoop.