hive ppt (1)
TRANSCRIPT
UNIVERSITE HASSAN II-CASABLANCAFACULTE DES SCIENCES BEN MSIK
DEPARTEMENT DES MATHEMATIQUES ETINFORMATIQUE
Master SII 2016/2017
Réalisé par Baich Marwa Mizani Yasmine
Encadré par: Mr M. AZOUAZI
Hive Query Language
3
Plan1. Présentation de Hive Introduction
définition & Historique & utilisation Caractéristiques Architecture & fonctionnement Types de données
2. Langage HiveQL
3. Lab
Requêtes LMD Requêtes LDD Partitionnement des données Jointure dans Hive
4
Hive ?
5
L’écosystème de Hadoop
Exécuter les opérations MapReduce
Programme Java MapReduce : pour les données structurées, semi-structurées, et non-structurées.Hive : pour les données structurées.
→ le langage de requête HiveQL.Pig : pour les données structurées et semi-structurées.
→ l’approche de Script.
C’est quoi Hive ?
• Écrit en Java avec une infrastructure Data Warehouse ,
• Traite les données structurées dans Hadoop ,
• Il se situe dans la partie supérieure de Hadoop, pour faciliter
la fouille et l’analyse des données
• Exécute des requêtes proches de la syntaxe SQL.
Historique et utilisation de Hive2007 : Développé initialement par 2009 : Rendu Open Source par
Architecture de Hive
Web UI HD InsightHive Command Line
Execution Engine
User Interface
s
Meta Store
HiveQL Process Engine
MapReduce
HDFS or Hbase Data Storage
Familier, rapide, évolutif, et extensible
Il n’est pas désigné pour OLTP (OnLine Transaction Processing).
Il est plus proche à OLAP (OnLine Analyse Processing).
N’est pas un langage de requêtes en temps réel.
N’est pas un BD relationnelle.
Structure les données dans un modèle bien connu :Tables, Colonnes, Lignes…
Caractéristiques de Hive
Bases de données HiveLangage SQL HiveQL / HQL
Transactions Oui NonUpdate/Delete Oui Non
Latence Faible ElevéeVolume de données Teraoctet Petaoctet
Caractéristiques de Hive
Fonctionnement de HiveHIVE HADOOP
InterfaceJob
Tracker
Task TrackerMap Reduce
Data Node
Name Node
Mapreduce
HDFS
Driver
Execution Engine
Compilateur Meta
Store
Exécuter la
requête
Obtenir le plan Obtenir les
Metadata
Envoyer les Metadata
Exécuter le planEnvoyer
le plan
Exécuter le job
Exécuter les opération
de Metadata
Chercher les résultats
Envoyer les
résultatsEnvoyer les
résultats
Types de données dans Hive1. Types Colonnes
• Intégrale BIGINT, TINYINT, SMALLINT, INT• Chaînes de caractère
VARCHAR, CHAR• Date temporelle
YYYY-MM-DD HH:MM:SS.fffffffff • Date
(YYYY-MM-DD)
• NULL (les valeurs manquantes)
2. Valeurs Nulles
3. Types littérales
• Flottants(FLOAT, DOUBLE)
Types de données dans Hive
Types de données dans Hive4. Types Complexes
• Arrays ARRAY<data_type>
• Maps MAP<primitive_type, data_type>
• Structs STRUCT<col_name : data_type [COMMENT col_comment], ...>
16
HiveQL
CREATE DATABASELa syntaxe de cette déclaration est la suivante:
CREATE DATABASE|SCHEMA [IF NOT EXISTS] <database name>
Exemple: Créer une base de données userdb:
hive> CREATE DATABASE [IF NOT EXISTS] userdb;
hive> CREATE SCHEMA userdb;
ou
La requête suivante est utilisée pour vérifier une liste de bases de données:
CREATE DATABASE
hive> SHOW DATABASES; Defaultuserdb
Programme JDBC
DROP DATABASE
DROP DATABASE Statement DROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT|CASCADE];
syntaxe
hive> DROP DATABASE IF EXISTS userdb;
Exemple
RESTRICT : Supprimer les tables avant la base de données CASCADE: Supprimer les tables et la base de données en même temps
Programme JDBC
CREATE TABLESyntaxe
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.] table_name
[(col_name data_type [COMMENT col_comment], ...)] [COMMENT table_comment] [ROW FORMAT row_format] [STORED AS file_format]
CREATE TABLEExemple
hive> CREATE TABLE IF NOT EXISTS employee ( eid int, name String, salary String, destination String) COMMENT ‘Employee details’ ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\t’ LINES TERMINATED BY ‘\n’ STORED AS TEXTFILE;
Programme JDBC
LOAD DATASyntaxe
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]
LOCAL est identifiant pour spécifier le chemin d'accès local. Il est facultatif;
OVERWRITE est facultative pour écraser les données dans le tableau.
PARTITION est facultative.
LOAD DATA• Exemple:le fichier s’appelle sample.txt et se trouve dans le répertoire /home/user
1201 Gopal 45000 Technical manager1202 Manisha 45000 Proof reader 1203 Masthanvali 40000 Technical writer 1204 Kiran 40000 Hr Admin 1205 Kranthi 30000 Op Admin
hive> LOAD DATA LOCAL INPATH '/home/user/sample.txt' OVERWRITE INTO TABLE employee;
Programme JDBC
ALTER TABLESyntaxe
La déclaration prend l'une des syntaxes suivantes basées sur les attributs que nous souhaitons modifier dans une table.
ALTER TABLE name RENAME TO new_name
ALTER TABLE name ADD COLUMNS (col_spec[, col_spec ...])
ALTER TABLE name DROP [COLUMN] column_name
ALTER TABLE name CHANGE column_name new_name new_type
ALTER TABLE name REPLACE COLUMNS (col_spec[, col_spec ...])
ALTER TABLE
La requête suivante renomme la table d'employé à emp.
Exemple 1:
hive> ALTER TABLE employee RENAME TO emp;
Programme JDBC
ALTER TABLE
hive> ALTER TABLE employee CHANGE name ename String; hive> ALTER TABLE employee CHANGE salary salary Double;
2) Changer des champs de la table employee
Exemple 2:
Le tableau suivant contient les champs de la table des employés et il montre les champs à modifier (en gras).
ALTER TABLE
Programme JDBC
ALTER TABLEExemple 3:
Ajouter une colonne nommée dept à la table employee
hive> ALTER TABLE employee ADD COLUMNS ( dept STRING COMMENT 'Department name');
Programme JDBC
ALTER TABLE
La requête suivante supprime toutes les colonnes de la table des employés et le remplace par emp et colonnes de noms:
Exemple 4:
hive> ALTER TABLE employee REPLACE COLUMNS ( eid INT empid Int, ename STRING name String);
Programme JDBC
DROP TABLEsyntaxe
DROP TABLE [IF EXISTS] table_name;
• Exemple: Supprimer la table employee
hive> DROP TABLE IF EXISTS employee;
DROP TABLEProgramme JDBC
Le programme JDBC suivant supprime la table des employés.
Création d'une vueVous pouvez créer une vue au moment de l'exécution d'une instruction SELECT. La syntaxe est la suivante:
CREATE VIEW [IF NOT EXISTS] view_name [(column_name [COMMENT column_comment], ...) ] [COMMENT table_comment] AS SELECT ...
Exemple
Création d'une vueLa requête suivante récupère les détails de l'employé en utilisant le scénario ci-dessus:
hive> CREATE VIEW emp_30000 AS SELECT * FROM employee WHERE salary>30000;
Suppression d'une Vue
Utilisez la syntaxe suivante pour supprimer une vue:
DROP VIEW view_name
hive> DROP VIEW emp_30000;
La requête suivante supprime une vue nommée comme emp_30000:
Création d'un indexExemplePrenons un exemple pour l'indice. Utilisez la même table des employés que nous avons utilisé plus tôt avec les champs Id, Nom, Salaire, Désignation et Dept. Créer un index nommé index_salary sur la colonne de salaire de la table des employés.
La requête suivante crée un index:
hive> CREATE INDEX inedx_salary ON TABLE employee(salary) AS 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler';
Suppression d'un index
DROP INDEX <index_name> ON <table_name>
hive> DROP INDEX index_salary ON employee;
Requête SELECTSyntaxe :
SELECT [ALL | DISTINCT] select_expr, select_expr, ... FROM table_reference [WHERE where_condition] [GROUP BY col_list] [HAVING having_condition] [LIMIT number];
Exemple
hive> SELECT * FROM employee WHERE salary>30000;
Programme JDBC// execute statement Resultset res = stmt.executeQuery("SELECT * FROM employee WHERE salary>30000;");
System.out.println("Result:"); System.out.println(" ID \t Name \t Salary \t Designation \t Dept ");
while (res.next()) { System.out.println(res.getInt(1) + " " + res.getString(2) + " " + res.getDouble(3) + " " + res.getString(4) + " " + res.getString(5)); }
con.close(); } }
Sortie:
Le partitionnement des donnéesLe fichier suivant contient le tableau EmployeeData./ Tab1 / EmployeeData / file1
Les données ci-dessus est divisé en deux fichiers en utilisant l'année./ Tab1 / EmployeeData / 2012 / file2 / Tab1 / EmployeeData / 2013 / file3
Le partitionnement des donnéesAjout d'une partitionSyntaxe:
ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION partition_spec [LOCATION 'location1'] partition_spec [LOCATION 'location2'] ...; partition_spec: : (p_column = p_col_value, p_column = p_col_value, ...)
La requête suivante est utilisée pour ajouter une partition à la table des employés.
hive> ALTER TABLE employee ADD PARTITION (year=’2013’) > location '/2012/part2012';
Le partitionnement des données
Renommer une partition
ALTER TABLE table_name PARTITION partition_spec RENAME TO PARTITION partition_spec;
La requête suivante est utilisée pour renommer une partition:
hive> ALTER TABLE employee PARTITION (year=’1203’) RENAME TO PARTITION (Yoj=’1203’);
Le partitionnement des donnéesSuppression d'une partition
La syntaxe suivante est utilisée pour déposer une partition:
ALTER TABLE table_name DROP [IF EXISTS] PARTITION partition_spec, PARTITION partition_spec,...;
hive> ALTER TABLE employee DROP [IF EXISTS] PARTITION (year=’1203’);
Exemple
45
Nous allons créer un fichier appelé data.csv, et placez-le dans votre répertoire personnel. Ce sera notre jeu de données pour cet exemple:
John,45,2012-11-11Tom,18,2012-11-11Lars,59,2012-11-11Bob,34,2012-11-12Taylor,21,2012-11-12
Hive>CREATE TABLE table1(name STRING, age INT, entry_date STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',‘ ;
OKTime taken: 6.223 seconds
Hive> LOAD DATA LOCAL INPATH 'data.csv' OVERWRITE INTO TABLE table1;
Le partitionnement des données
46
Hive > SELECT AVG(age), FROM table1 WHERE age >= 21 AND entry_date='2012-12-12';
Le partitionnement des données
27.5 6.5
hive> CREATE TABLE table1( name STRING, age INT entry_date STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
hive> CREATE TABLE table1 (name STRING, age INT)
PARTITIONED BY (entry_date STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
Le partitionnement des données L'instruction create table pour la table non partitionnée ci-dessus ressemblait à:
hive> SELECT AVG(age), age FROM table1_partitioned WHERE age=21 AND entry_date='2012-11-12';
Hive > INSERT OVERWRITE TABLE table1_partitioned PARTITION (entry_date='2012-11-11’)
SELECT name, age FROM table1 WHERE entry_date='2012-11-11';
Hive > INSERT OVERWRITE TABLE table1_partitioned PARTITION (entry_date='2012-11-12')
SELECT name, age FROM table1 WHERE entry_date='2012-11-12';
Le partitionnement des données
Le résultat est le même que précédemment:
49
Le partitionnement des donnéesConsidérations relatives au partitionnement : Évitez les sous-partitionnements
les partitionnements appliqués à des colonnes contenant uniquement quelques valeurs peuvent entraîner des partitions très réduites.
Évitez les sur-partitionnements
l’autre extrême, le partitionnement appliqué à une colonne avec une valeur unique (par exemple, userid)
Évitez le décalage de données :
choisissez votre clé de partitionnement avec soin, pour que toutes les partitions soient de taille égale.
Les jointures dans HIVE : JOIN
LEFT OUTER JOIN
RIGHT OUTER JOIN FULL OUTER JOIN
Les jointures dans HIVE :Nous allons utiliser les deux tableaux.
Customers Orders
Les jointures dans HIVE :o JOIN:
La requête suivante exécute JOIN sur les tables de clients et les commandes, et récupère les enregistrements:
hive> SELECT c.ID, c.NAME, c.AGE, o.AMOUNT FROM CUSTOMERS c JOIN ORDERS o ON (c.ID = o.CUSTOMER_ID);
Sur l'exécution réussie de la requête, vous obtenez de voir la réponse suivante:
Les jointures dans HIVE :o LEFT OUTER JOIN
La requête suivante montre LEFT OUTER JOIN entre les tables de clients et les commandes:
hive> SELECT c.ID, c.NAME, o.AMOUNT, o.DATE FROM CUSTOMERS c LEFT OUTER JOIN ORDERS o ON (c.ID = o.CUSTOMER_ID);
Sur l'exécution réussie de la requête, vous obtenez de voir la réponse suivante:
Les jointures dans HIVE :o RIGHT OUTER JOINLa requête suivante montre RIGHT OUTER JOIN entre les tables de clients et les commandes.
hive> SELECT c.ID, c.NAME, o.AMOUNT, o.DATE DE CLIENTS c RIGHT OUTER JOIN ORDRES o ON (c.ID = o.CUSTOMER_ID);
Sur l'exécution réussie de la requête, vous obtenez de voir la réponse suivante:
Les jointures dans HIVE :o FULL OUTER JOIN
La requête suivante montre FULL OUTER JOIN entre les tables de clients et les commandes:
hive> SELECT c.ID, c.NAME, o.AMOUNT, o.DATE FROM CUSTOMERS c FULL OUTER JOIN ORDERS o ON (c.ID = o.CUSTOMER_ID);
Sur l'exécution réussie de la requête, vous obtenez de voir la réponse suivante:
56
Lab
Configuration de Hive Configurer le Meta
Store Spécifier le répertoire du Meta Store:
Si aucune configuration n’est fournie, la base de donnée Derby sera utilisée par défaut.
Le fichier de configuration se trouve dans :
$HIVE_HOME/conf/hive-site.xml
Démarrer Hive
start.sh derby
Message affiché :
S’assurer que Apache derby est bien démarré
On exécute le shell
cd $HIVE_HOME/bin./hive
Message affiché :
Démarrer Hive
Tables Managées Crée une table dans Hive
Charger les données dans une table managée
Vérifier l’emplacement de la nouvelle table
hive> CREATE TABLE employee (id INT, name STRING, dept_id int);
hive> LOAD DATA LOCAL INPATH '/home/biadmin/labs/hive/employee.del' OVERWRITE INTO TABLE employee;
hadoop fs -ls /biginsights/hive/warehouse”
Tables externes Créer une table externe qui impose à Hive de se référer aux données qui existent en dehors du répertoire warehouse
EXTERNAL → ne pas déplacer vers le répertoire warehouseROW FORMAT DELIMITED → stockage des lignes dans la table HiveLOCATION → l’emplacement des données externes
hive> CREATE EXTERNAL TABLE dep (id INT, name STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/user/biadmin/external_table';
Modifier et Parcourir les tables
Afficher les détails des colonnes d’une table
Résultat affiché :
hive> DESCRIBE employee;
Modifier et Parcourir les tables Renommer une table
Résultat affiché :
hive> ALTER TABLE dep RENAME TO department;hive> SHOW TABLES;
Ajouter des colonnes
Résultat affiché :
Modifier et Parcourir les tables
hive> ALTER TABLE department ADD COLUMNS (loc STRING);hive> DESC department;
Importer des données
LOCAL → est pour spécifier que l’emplacement du fichier d’entrée se trouve dans le système de fichier local Par défaut, on cherche le fichier dans HDFSOVERWRITE → les données existantes dans la table seront écrasées
hive> LOAD DATA LOCAL INPATH '/home/biadmin/labs/hive/department.del' OVERWRITE INTO TABLE department;
Exporter des données
Insérer les données dans une table Hive
Vérifier la création du fichier dans HDFS
hive> CREATE TABLE names (name STRING);hive> INSERT OVERWRITE TABLE names SELECT name FROM employee WHERE id > 7;
hive> dfs -ls /biginsights/hive/warehouse/names;
Insérer les données dans le système de fichier
Lister le contenu du répertoire
Exporter des données
hive> INSERT OVERWRITE DIRECTORY '/user/biadmin/hdfs_out' SELECT * FROM employee;
hive> dfs -ls /user/biadmin/hdfs_out;
L'exportation, y compris les métadonnées
Vérifier le contenu du répertoire
Exporter des données
hive> dfs -ls /user/biadmin/export ;
hive> EXPORT TABLE names TO '/user/biadmin/export';
MERCI DE VOTRE ATTENTION