2. UNIVERSITE HASSAN II-CASABLANCA
FACULTE DES SCIENCES BEN MSIK
DEPARTEMENT DES MATHEMATIQUES ET
INFORMATIQUE
Master SII 2016/2017
Réalisé par
Baich Marwa
Mizani Yasmine
Encadré par: Mr M. AZOUAZI
Hive Query Language
6. 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.
7. 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.
9. Architecture de Hive
Web UI HD InsightHive Command Line
Execution Engine
User
Interfaces
Meta Store
HiveQL Process Engine
MapReduce
HDFS or Hbase Data Storage
10. 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
11. Bases de données Hive
Langage SQL HiveQL / HQL
Transactions Oui Non
Update/Delete Oui Non
Latence Faible Elevée
Volume de données Teraoctet Petaoctet
Caractéristiques de Hive
12. Fonctionnement de Hive
HIVE HADOOP
Interface
Job Tracker
Task Tracker
Map Reduce
Data
Node
Name
Node
Mapreduce
HDFS
Driver
Execution
Engine
Compilate
ur Meta Store
Exécuter
la requête
Obtenir
le plan Obtenir les
Metadata
Envoyer les
Metadata
Exécuter
le plan
Envoyer
le plan
Exécuter
le job
Exécuter les
opération de
Metadata
Chercher les
résultats
Envoyer les
résultats
Envoyer les
résultats
13. Types de données dans Hive
1. 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)
17. CREATE DATABASE
La 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
18. La requête suivante est utilisée pour vérifier une liste de bases de données:
CREATE DATABASE
hive> SHOW DATABASES;
Default
userdb
20. 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
22. CREATE TABLE
Syntaxe
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]
23. CREATE TABLE
Exemple
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;
25. LOAD DATA
Syntaxe
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.
26. LOAD DATA
• Exemple:
le fichier s’appelle sample.txt et se trouve dans le répertoire /home/user
1201 Gopal 45000 Technical manager
1202 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;
28. ALTER TABLE
Syntaxe
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 ...])
29. ALTER TABLE
La requête suivante renomme la table d'employé à emp.
Exemple 1:
hive> ALTER TABLE employee RENAME TO emp;
Programme JDBC
30. 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).
32. ALTER TABLE
Exemple 3:
Ajouter une colonne nommée dept à la table employee
hive> ALTER TABLE employee ADD COLUMNS ( dept STRING
COMMENT 'Department name');
Programme JDBC
33. 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
34. DROP TABLE
syntaxe
DROP TABLE [IF EXISTS] table_name;
• Exemple: Supprimer la table employee
hive> DROP TABLE IF EXISTS employee;
36. Création d'une vue
Vous 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
37. Création d'une vue
La 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:
38. Création d'un index
Exemple
Prenons 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;
39. Requête SELECT
Syntaxe :
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;
40. 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:
41. Le partitionnement des données
Le 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
42. Le partitionnement des données
Ajout d'une partition
Syntaxe:
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';
43. 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’);
44. Le partitionnement des données
Suppression 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. 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-11
Tom,18,2012-11-11
Lars,59,2012-11-11
Bob,34,2012-11-12
Taylor,21,2012-11-12
Hive>CREATE TABLE table1(name STRING, age INT, entry_date STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',‘ ;
OK
Time taken: 6.223 seconds
Hive> LOAD DATA LOCAL INPATH 'data.csv' OVERWRITE INTO TABLE table1;
Le partitionnement des données
47. 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 à:
48. 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. 49
Le partitionnement des données
Considé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.
50. Les jointures dans HIVE :
JOIN
LEFT OUTER JOIN
RIGHT OUTER JOIN
FULL OUTER JOIN
51. Les jointures dans HIVE :
Nous allons utiliser les deux tableaux.
Customers Orders
52. 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:
53. 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:
54. Les jointures dans HIVE :
o RIGHT OUTER JOIN
La 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:
55. 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:
57. 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
59. On exécute le shell
cd $HIVE_HOME/bin./hive
Message affiché :
Démarrer Hive
60. 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”
61. 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 warehouse
ROW FORMAT DELIMITED
→ stockage des lignes dans la table Hive
LOCATION
→ 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';
62. Modifier et Parcourir les tables
Afficher les détails des colonnes d’une table
Résultat affiché :
hive> DESCRIBE employee;
63. Modifier et Parcourir les tables
Renommer une table
Résultat affiché :
hive> ALTER TABLE dep RENAME TO department;
hive> SHOW TABLES;
64. Ajouter des colonnes
Résultat affiché :
Modifier et Parcourir les tables
hive> ALTER TABLE department ADD COLUMNS (loc STRING);
hive> DESC department;
65. 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 HDFS
OVERWRITE
→ 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;
66. 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;
67. 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;
68. 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';
L’écosystème de Hadoop offre à la fois du temps et l’efficacité en regroupant différents sous-projets (outils) qui sont utilisés pour l’aide des modules Hadoop.
Dans les exposés précédents, nous avons vu quelques outils, (comme mapreduce, hdfs, hbase …) et maintenant c’est le tour de hive !
On distingue plusieurs façons pour exécuter les opérations de MapReduce :
La première c’est L’approche traditionnelle en codant des programmes Java complexes et souvent très difficiles.
d'où l'idée de créer un outil au-dessus de Hadoop qui serait facile et accessible au plus large publique. C'est là où Hive entre en jeu en fournissant un langage de requête (aussi connu comme Hive Query Language ou HiveQL) pour extraire des données sur le système Hadoop.
La façon qui reste est L’approche de script, en utilisant Pig qui est un logiciel d'analyse de données comparable à Hive.
Hive est un outil écrit en Java qu’on peut tout simplement considérer comme un entrepôt de données, utile pour traiter 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 ; tout en exécutant des requêtes proches de la syntaxe SQL.
En premier, Hive était développé par Facebook, après Apache Software Foundation l’a pris pour le rendre Open Source sous le nom Apache Hive.
Plusieurs grands noms de l'informatique ont déclaré utiliser Hive, comme Facebook, Yahoo et Microsoft.
Amazon l’utilise également dans Amazon Elastic MapReduce.
Hive est un logiciel avec une infrastructure de data warehouse, qui permet les interactions entre l’utilisateur et le système de fichier.
Les interfaces utilisateurs que Hive supporte sont : Hive Web UI, Hive command line, et Hive HD Insight (pour Windows server).
Le Meta Store représente le serveur de BD choisit par hive respectivement pour stocker les schémas de tables, les BD, les colonnes d’une table, leurs types de données, ainsi que le mapping HDFS.
HiveQL est similaire à SQL pour interroger les informations schéma dans le Meta Store.
HiveQL Process Engine : Le moteur de traitement est l’un des remplacements de l’approche traditionnelle du programme MapReduce. Au lieu d’écrire le programme MapReduce en Java, on peut écrire une requête pour le job MapReduce et l’exécuter.
Execution Engine : (moteur d’exécution) c’est la partie de liaison entre HiveQL Process Engine et MapReduce. Il exécute les requêtes et génère les mêmes résultats que MapReduce.
HDFS or HBASE : ce sont les techniques de stockage de données dans un système de fichiers.
Hive est tout d’abord familier, rapide, évolutif, et extensible.
Il n’est pas désigné pour les opérations transactionnelles, par contre on peut dire qu’il est plus proche aux opérations OLAP.
Hive ne traite pas les données en temps réel,
Ses BD ne sont pas relationnelles,
Et les données sont structurées dans un modèle bien connu
Comme j’ai déjà mentionné au début, le langage de requête fournis par hive se nomme HiveQL.
Contrairement aux BD traditionnelles, hive ne traite pas les transactions,
Pas de requete update ou delete
Un des principaux défauts de hive c’est la latence
Et finalement le volume de données se mesure en Teraoctet pour les BD traditionnelles et en Petaoctet pour hive.
Le tableau suivant définit comment Hive interagit avec framework Hadoop
1.l’interface de Hive (que ça soit une interface web ou sur ligne de commande) envoie la requête au Driver pour l’exécuter (n’importe quel Driver de base de données que ça soit JDBC ou autre).
2,le Driver demande l’aide du compilateur de requête qui analyse la requête pour vérifier le plan de la syntaxe et de la requête (cad les conditions requises)
3 . le compilateur envoie la requête de métadonnées au Metastore.
4 .le Metastore envoie les métadonnées comme réponse au compilateur.
5 le compilateur vérifie les conditions requises et renvoie le plan au Driver. l'analyse et la compilation d'une requête est terminée.
6.Exécuter planLe pilote envoie le plan pour le moteur d'exécution exécuter
7 à l’intérieur, le processus de l’exécution du job est un travail du MapReduce. Le moteur d’exécution envoie le job au JobTracker, qui l’envoie au Name node, et qui attribue ce job au TaskTracker, qui est au Data node.
8.pendant le temps de l’exécution du job, le moteur d’exécution peut exécuter les opérations de métadonnées avec le Metastore.
9.le moteur d’exécution reçoit les résultats des nœuds de données pour les envoyer au Driver qui les renvoie à son tour aux interfaces de Hive.
Hive est un système d'entrepôt de données pour Hadoop qui permet de
résumer des données,
d’envoyer des requêtes et
d'analyser des données à l’aide de HiveQL (un langage de requête similaire à SQL).
Apache Hive est un système d'entreposage de données qui permet aux utilisateurs d'interroger les données stockées dans les systèmes de fichiers Hadoop compatibles avec la syntaxe SQL. requêtes Hive sont écrites dans un langage de type SQL appelée Hive Query Language (HQL)
Ruche est une technologie de base de données qui permet de définir les bases de données et de tables pour analyser des données structurées. Le thème de l'analyse des données structurées est de stocker les données d'une manière tabulaire, et de transmettre les requêtes pour l'analyser. Ce chapitre explique comment créer la base de données Hive. Hive contient une base de données par défaut nommé par défaut.
Une base de données dans hive est un espace de noms ou une collection de tables. La syntaxe de cette déclaration est la suivante:
Ici, IF NOT EXISTS est une clause facultative, qui avertit l'utilisateur qu'une base de données avec le même nom existe déjà.
Nous pouvons utiliser SCHEMA en place de base de données dans cette commande. La requête suivante est exécutée pour créer une base de données nommée userdb:
Base de données Drop est une déclaration qui tombe toutes les tables et supprime la base de données. Sa syntaxe est la suivante:
Supposons que le nom de la base de données est userdb.
La requête suivante supprime la base de données en utilisant CASCADE. Cela signifie la suppression de tables respectives avant de laisser tomber la base de données.
Supposons que vous devez créer une table nommée employé en utilisant l' instruction CREATE TABLE. Le tableau suivant dresse la liste des champs et leurs types de données dans le tableau des employés:Si vous ajoutez l'option IF NOT EXISTS, Hive ignore la déclaration au cas où la table existe déjà.
Le programme JDBC pour créer une table est donnée par exemple.
En général, après la création d'une table dans SQL, nous pouvons insérer des données à l'aide de l'instruction Insert. Mais dans la ruche, on peut insérer des données à l'aide de l'instruction LOAD DATA.
Lors de l'insertion des données dans la ruche, il est préférable d'utiliser les données de charge pour stocker les enregistrements en vrac. Il existe deux façons de charger les données: l'une est à partir du système de fichiers local et est du système de fichiers Hadoop seconde.
La requête suivante charge le texte donné dans le tableau.
Les requêtes suivantes renommer le nom de colonne et de la colonne type de données en utilisant les données ci-dessus:
Étant donné ci - dessous est le programme JDBC pour remplacer la colonne de eid avec colonne empid et ename avec le nom.
Prenons un exemple pour une vue. Supposons table des employés comme indiqué ci - dessous, avec les champs Id, Nom, Salaire, Désignation et Dept. Générer une requête pour récupérer les informations sur les employés qui gagnent un salaire de plus de Rs 30000. Nous stockons le résultat dans une vue nommée emp_30000.
Un indice est rien, mais un pointeur sur une colonne particulière d'une table. Création d'un index signifie la création d'un pointeur sur une colonne particulière d'une table. Sa syntaxe est la suivante:
Il est un pointeur vers la colonne de salaire. Si la colonne est modifiée, les modifications sont stockées en utilisant une valeur d'index.
La requête suivante supprime un index nommé index_salary:
les simples requêtes dans HiveQL s’utilisent de la même façon que dans SQL
L’exemple cité ici représente une simple requête select en limitant le nombre de sorties à 5 donc seulement les 5 premières lignes seront affichées
Prenons un exemple pour SELECT ... clause WHERE. Supposons que nous ayons la table des employés comme indiqué ci-dessous, avec des champs nommés Id, Nom, Salaire, Désignation et Dept. Générer une requête pour récupérer les informations sur les employés qui gagnent un salaire de plus de Rs 30000.
Hive organise des tables en partitions. Il est un moyen de diviser une table en parties liées sur la base des valeurs de colonnes partitionnées telles que la date, la ville et département. En utilisant une partition, il est facile d'interroger une partie des données.
Les tables ou les cloisons sont subdivisées en segments, pour fournir une structure supplémentaire aux données qui peuvent être utilisées pour l' interrogation plus efficace. Bucketing travaux basés sur la valeur de la fonction de hachage d'une certaine colonne d'une table.
Par exemple, une table nommée Tab1 contient les données des employés tels que id, nom, département et yoj (ie, année d'adhésion). Supposons que vous devez récupérer les détails de tous les employés qui ont adhéré en 2012. Une requête recherche dans toute la table pour les informations requises. Toutefois, si vous partitionner les données des employés à l'année et de le stocker dans un fichier séparé, il réduit le temps de traitement des requêtes. L'exemple suivant montre comment partitionner un fichier et ses données:
Si on applique le partitionnement sur cette table , selon le dernier champs qui est le yoj, on aura 2 fichiers :
Nous pouvons ajouter des partitions à une table en modifiant la table. Supposons que nous avons un employé de la table appelée avec des domaines tels que Id, Nom, Salaire, Désignation, Dept, et YOJ.
les données dans une table est divisée sur plusieurs partitions. Chaque partition correspond à une valeur particulière (s) de la colonne (s) de partition et est stockée sous forme d'un sous-répertoire dans le répertoire de la table sur HDFS. Lorsque la table est interrogée, le cas échéant, seules les partitions requises de la table sont interrogés, réduisant ainsi le I / O requis par la requête.
1 - Maintenant, créez une table sur l'ensemble de données téléchargé. Démarrer la ligne de commande en tapant la ruche ruche sur votre ligne de commande bash:
2 - Cette commande crée une table appelée table1 avec les colonnes spécifiées. Le reste de l'instruction create précise que les champs dans le fichier sous-jacent sont séparés par des virgules. Si ce n'est pas spécifié, Hive utilise ^ A comme séparateur de champ par défaut.
3 - Ce tableau est actuellement vide, mais vous pouvez faire en sorte que la table est créée en procédant comme suit:
4 - Maintenant, nous allons charger des données dans ce tableau:
La requête ci-dessus découvre l'âge moyen et l'écart type dans notre jeu de données en appelant les fonctions de définition de l'utilisateur avg et STDDEV_POP (UDF) sur la colonne d'âge pour les personnes dont l'âge est supérieur à 21. Le résultat ressemble à ceci:
1 Avec la requête ci-dessus, si la table avait un million de disques, chacun d'entre eux seront nourris à l'emploi de MapReduce.
2 L'instruction create table pour la table non partitionnée ci-dessus ressemblait à:
3 Maintenant, nous allons convertir le même exemple d'utiliser une table partitionnée, partitionné par le Date d'entréecolonne. La create table dans ce cas ressemblerait à:
4 Notez que nous avons supprimé la Date d'entrée colonne de la liste des colonnes, mais a ajouté dans le PARTITION BY l'article, ce qui en fait une colonne virtuelle.
L'exemple dans notre blog initial, Introduction à la ruche , a couru une requête simple sur notre ensemble de données. Toutefois, la requête de lire l'ensemble des données ,même si nous avions un filtre où la clause sur laâgecolonne. Dans la plupart des emplois MapReduce plus grandes quantités de données, le goulot d'étranglement est d'E / S sur les données. Par conséquent, si nous pouvons réduire les E / S besoin de notre travail de MapReduce, nos requêtes deviendraient plus rapidement. Une méthode très courante de le faire est le partitionnement des données. Dans la mise en œuvre de la ruche de partitionnement, les données dans une table est divisée sur plusieurs partitions. Chaque partition correspond à une valeur particulière (s) de la colonne (s) de partition et est stockée sous forme d'un sous-répertoire dans le répertoire de la table sur HDFS. Lorsque la table est interrogée, le cas échéant, seules les partitions requises de la table sont interrogés, réduisant ainsi le I / O requis par la requête.
Ajoutons partitions pour entry_date = '11/11/2012' et entry_date = '12/11/2012':
Maintenant, nous allons exécuter la même requête que précédemment sur la table partitionnée:
https://www.safaribooksonline.com/blog/2012/12/03/tip-partitioning-data-in-hive/
Évitez les sous-partitionnements : les partitionnements appliqués à des colonnes contenant uniquement quelques valeurs peuvent entraîner des partitions très réduites. Par exemple, un partitionnement de genre crée uniquement deux partitions (masculin et féminin), ce qui réduit la latence de moitié seulement.
Évitez les sur-partitionnements : l’autre extrême, le partitionnement appliqué à une colonne avec une valeur unique (par exemple, userid) va entraîner de nombreuses partitions et communiquer un stress important au cluster namenode, car ce dernier devra gérer de grandes quantités de répertoires.
Évitez le décalage de données : choisissez votre clé de partitionnement avec soin, pour que toutes les partitions soient de taille égale. Par exemple, le partitionnement sur Région peut entraîner un nombre d’enregistrements sous Île-de-France 30 fois supérieur à celui sous Franche-Comté, en raison de la différence de population.
JOIN est une clause qui est utilisé pour combiner des domaines spécifiques de deux tables en utilisant des valeurs communes à chacun. Il est utilisé pour combiner les enregistrements de deux ou plusieurs tables de la base de données. Il est plus ou moins similaire à SQL JOIN.
JOIN est une clause qui est utilisé pour combiner des domaines spécifiques de deux tables en utilisant des valeurs communes à chacun. Il est utilisé pour combiner les enregistrements de deux ou plusieurs tables de la base de données. Il est plus ou moins similaire à SQL JOIN.
Clause JOIN est utilisé pour combiner et récupérer les enregistrements de plusieurs tables. JOIN est la même que OUTER JOIN dans SQL. Une condition JOIN doit être augmentée en utilisant les clés primaires et les clés étrangères des tables
La HiveQL LEFT OUTER JOIN renvoie toutes les lignes de la table de gauche, même s'il n'y a aucune correspondance dans la bonne table. Cela signifie, si la clause ON correspond à 0 (zéro) les enregistrements de la table de droite, l'JOIN retourne encore une ligne dans le résultat, mais avec NULL dans chaque colonne de la table de droite.
A LEFT JOIN renvoie toutes les valeurs de la table de gauche, ainsi que les valeurs appariées de la table de droite, ou NULL en cas de non correspondance REJOIGNEZ prédicat.
Le HiveQL RIGHT OUTER JOIN renvoie toutes les lignes de la table de droite, même s'il n'y a pas les matches de la table de gauche. Si la clause ON correspond à 0 (zéro) des enregistrements dans la table de gauche, la REJOIGNEZ encore retourne une ligne dans le résultat, mais avec NULL dans chaque colonne de la table de gauche.
UN DROIT JOIN renvoie toutes les valeurs de la table de droite, ainsi que les valeurs appariées de la table à gauche, ou NULL en cas de non correspondance prédicat de jointure.
Le HiveQL FULL OUTER JOIN combine les enregistrements des deux tables extérieures droite qui remplissent la condition JOIN gauche et. La table jointe contient soit tous les enregistrements des deux tables, ou remplit les valeurs NULL pour les matches manquants de chaque côté.