hive ppt (1)

Post on 12-Apr-2017

116 Views

Category:

Engineering

7 Downloads

Preview:

Click to see full reader

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 &gt;= 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

top related