La quête de données des moines

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 les terres mystérieuses de l'Est, un monastère réputé se dressait au sommet d'une montagne haute, enveloppé dans les brumes de la sagesse ancienne. A l'intérieur de ses murs sacrés résidait un guerrier moine réputé nommé Hiro, un maître de l'art sacré de la manipulation de données. Son dévouement inébranlable pour découvrir les secrets des données lui avait valu le respect des érudits et des moines également.

Un jour, l'abbé du monastère convoqua Hiro dans ses chambres, son visage marqué par l'inquiétude. "Hiro, une situation critique est survenue", commença l'abbé. "Nos parchemins sacrés, contenant la sagesse ancienne de nos ancêtres, ont été dispersés dans tout le royaume. Nous devons retrouver et organiser cette information inestimable avant qu'elle ne soit perdue pour toujours."

Hiro s'inclina profondément, ses yeux brillant de détermination. "Je ne vous laisserai pas tomber, vénérable maître", il promit. "Avec le pouvoir de Hadoop et de ses fonctions de génération de tables, je parcourrai le pays et ramènerai l'ordre à la sagesse de nos ancêtres."

L'abbé hocha la tête gravement, plaçant sa confiance dans la résolution inébranlable d'Hiro. Ainsi commença la quête d'Hiro pour maîtriser les fonctions de génération de tables de Hive, un voyage qui allait tester ses compétences et sa résolution jusqu'à leurs limites extrêmes.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL hadoop(("Hadoop")) -.-> hadoop/HadoopHiveGroup(["Hadoop Hive"]) hadoop/HadoopHiveGroup -.-> hadoop/hive_shell("Hive Shell") hadoop/HadoopHiveGroup -.-> hadoop/basic_hiveql("Basic HiveQL Queries") hadoop/HadoopHiveGroup -.-> hadoop/table_generating("Table Generating Function") hadoop/HadoopHiveGroup -.-> hadoop/udf("User Defined Function") subgraph Lab Skills hadoop/hive_shell -.-> lab-289002{{"La quête de données des moines"}} hadoop/basic_hiveql -.-> lab-289002{{"La quête de données des moines"}} hadoop/table_generating -.-> lab-289002{{"La quête de données des moines"}} hadoop/udf -.-> lab-289002{{"La quête de données des moines"}} end

Explorer la fonction Lateral View

Dans cette étape, nous allons approfondir la puissante fonction Lateral View, qui nous permet de décomposer des structures de données complexes en formes plus faciles à gérer.

Tout d'abord, créons un ensemble de données d'échantillonnage avec lequel travailler. Accédez au répertoire /home/hadoop et créez un nouveau fichier appelé sample.txt avec le contenu suivant :

Changez en tant qu'utilisateur hadoop dans le terminal en utilisant :

su - hadoop
## Entrez dans le répertoire et créez un nouveau fichier
cd /home/hadoop
vim sample.txt

Entrez le contenu suivant :

1,2,3|4,5|6,7,8
9,10|11,12,13|14,15

Vérifiez que le fichier est enregistré et accessible.

Ensuite, nous allons créer une table Hive pour stocker ces données. Ouvrez l'interface de ligne de commande Hive en exécutant la commande suivante dans votre terminal :

hive

Dans l'interface de ligne de commande Hive, exécutez les commandes suivantes :

CREATE TABLE sample_table (line STRING);
LOAD DATA LOCAL INPATH '/home/hadoop/sample.txt' INTO TABLE sample_table;

Maintenant, utilisons la fonction Lateral View pour décomposer les données de chaîne complexes dans la colonne line :

SELECT line, x, y
FROM sample_table
LATERAL VIEW OUTER EXPLODE(SPLIT(line, '\\|')) temp AS x
LATERAL VIEW OUTER EXPLODE(SPLIT(x, ',')) temp2 AS y;

La requête SQL donnée extrait des données d'une table appelée sample_table en utilisant le langage de requête Hive. Voici une explication simplifiée de la requête :

  1. Nous souhaitons sélectionner trois colonnes de la table : line, x et y.

  2. Les données sont extraites de la table sample_table.

  3. La requête utilise la clause LATERAL VIEW OUTER EXPLODE deux fois pour effectuer deux opérations distinctes :

    • La première LATERAL VIEW OUTER EXPLODE(SPLIT(line, '\\|')) temp AS x divise les valeurs de la colonne line en utilisant le délimiteur |. La fonction EXPLODE transforme ensuite le tableau résultant en plusieurs lignes. Ces valeurs éclatées sont assignées à l'alias x.
    • La seconde LATERAL VIEW OUTER EXPLODE(SPLIT(x, ',')) temp AS y divise les valeurs de la colonne x (qui a été créée dans l'étape précédente) en utilisant le délimiteur ,. Encore une fois, la fonction EXPLODE convertit le tableau résultant en plusieurs lignes. Ces valeurs éclatées sont assignées à l'alias y.

En résumé, la requête prend chaque ligne de sample_table et effectue deux divisions. Tout d'abord, elle divise la colonne line par |, créant plusieurs lignes avec des valeurs différentes dans la colonne x. Ensuite, elle divise la colonne x par ,, créant encore plus de lignes avec des valeurs différentes dans la colonne y. Le résultat est un ensemble de lignes avec toutes les combinaisons possibles des valeurs de line, x et y.

Maîtriser la fonction Explode

Dans cette étape, nous allons explorer la fonction Explode, qui nous permet de transformer des types de données complexes tels que les tableaux et les cartes en plusieurs lignes.

Commençons par créer un nouvel ensemble de données d'échantillonnage. Accédez au répertoire /home/hadoop et créez un fichier appelé array_data.txt avec le contenu suivant :

## Entrez dans le répertoire et créez un nouveau fichier
cd /home/hadoop
vim array_data.txt

Entrez le contenu suivant :

[1,2,3],[4,5],[6,7,8,9]
[10,11],[12,13,14],[15]

Ensuite, créez une table Hive pour stocker ces données :

CREATE TABLE array_table (arr ARRAY<STRING>);
LOAD DATA LOCAL INPATH '/home/hadoop/array_data.txt' INTO TABLE array_table;

Maintenant, utilisons la fonction Explode pour aplatir les données du tableau en lignes individuelles :

SELECT explode(arr) AS num FROM array_table;

Cette requête convertira chaque élément du tableau arr en une ligne distincte, avec la valeur correspondante dans la colonne num.

Nous pouvons également utiliser la fonction Explode en conjonction avec la vue latérale pour traiter des types de données complexes comme les cartes :

CREATE TABLE map_table (key STRING, value MAP<STRING, INT>);

INSERT INTO map_table
SELECT * FROM (
  SELECT 'entry1' AS key, map('a', 1, 'b', 2, 'c', 3) AS value
  UNION ALL
  SELECT 'entry2' AS key, map('d', 4, 'e', 5) AS value
) AS temp_table;

SELECT key, map_keys, map_values
FROM map_table
LATERAL VIEW EXPLODE(value) temp AS map_keys, map_values;

La requête SQL donnée est une requête écrite dans le langage de requête Hive. Voici une explication de la requête :

  1. SELECT key, map_keys, map_values : Cela spécifie les colonnes à sélectionner dans le résultat. Le résultat inclura trois colonnes : key, map_keys et map_values.
  2. FROM map_table : Cela indique que la requête est exécutée sur la table map_table.
  3. LATERAL VIEW EXPLODE(value) temp AS map_keys, map_values : Il s'agit d'une vue latérale qui éclate la colonne value de la table map_table. La fonction EXPLODE est utilisée pour transformer chaque paire clé-valeur de la colonne MAP en lignes distinctes. Les valeurs éclatées sont assignées aux alias map_keys et map_values.

En résumé, la requête extrait des données de la table map_table. Elle utilise ensuite la clause LATERAL VIEW EXPLODE pour étendre la colonne value, ce qui résulte en des lignes distinctes pour chaque paire clé-valeur de la colonne MAP. Les lignes résultantes auront la colonne key de la table map_table, ainsi que les colonnes map_keys et map_values éclatées représentant respectivement les clés et les valeurs individuelles de la colonne MAP.

Sommaire

Dans ce laboratoire, nous avons entrepris un voyage dans les royaumes mystérieux des fonctions de génération de tables Hive, guidés par la résolution inébranlable du guerrier moine Hiro. Par une exploration pratique, nous avons découvert le pouvoir des fonctions Lateral View et Explode, maîtrisant l'art de transformer des structures de données complexes en formes plus faciles à gérer.

En divisant les données complexes en éléments individuels, nous avons dévoilé les secrets cachés à l'intérieur, révélant des informations précieuses et ouvrant la voie à une compréhension plus approfondie. Tout comme la quête d'Hiro a réuni les parchemins dispersés de la sagesse ancienne, notre maîtrise de ces fonctions puissantes nous a permis d'organiser et d'analyser les données de manière inédite auparavant.

Ce laboratoire a non seulement renforcé nos compétences techniques, mais a également suscité en nous une profonde admiration pour l'héritage durable de la manipulation de données. Lorsque nous poursuivons notre chemin, que les leçons apprises ici servent de lumière guidante, éclairant notre parcours vers une maîtrise toujours plus grande des arts du données.