HiveQL - Select-Group By
Ce chapitre explique les détails de la clause GROUP BY dans une instruction SELECT. La clause GROUP BY est utilisée pour regrouper tous les enregistrements dans un jeu de résultats à l'aide d'une colonne de collection particulière. Il est utilisé pour interroger un groupe d'enregistrements.
Syntaxe
La syntaxe de la clause GROUP BY est la suivante:
SELECT [ALL | DISTINCT] select_expr, select_expr, ...
FROM table_reference
[WHERE where_condition]
[GROUP BY col_list]
[HAVING having_condition]
[ORDER BY col_list]]
[LIMIT number];
Exemple
Prenons un exemple de clause SELECT… GROUP BY. Supposons que la table des employés soit indiquée ci-dessous, avec les champs Id, Nom, Salaire, Désignation et Département. Générez une requête pour récupérer le nombre d'employés dans chaque service.
+------+--------------+-------------+-------------------+--------+
| ID | Name | Salary | Designation | Dept |
+------+--------------+-------------+-------------------+--------+
|1201 | Gopal | 45000 | Technical manager | TP |
|1202 | Manisha | 45000 | Proofreader | PR |
|1203 | Masthanvali | 40000 | Technical writer | TP |
|1204 | Krian | 45000 | Proofreader | PR |
|1205 | Kranthi | 30000 | Op Admin | Admin |
+------+--------------+-------------+-------------------+--------+
La requête suivante récupère les détails de l'employé à l'aide du scénario ci-dessus.
hive> SELECT Dept,count(*) FROM employee GROUP BY DEPT;
Lors de l'exécution réussie de la requête, vous obtenez la réponse suivante:
+------+--------------+
| Dept | Count(*) |
+------+--------------+
|Admin | 1 |
|PR | 2 |
|TP | 3 |
+------+--------------+
Programme JDBC
Vous trouverez ci-dessous le programme JDBC pour appliquer la clause Group By pour l'exemple donné.
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.DriverManager;
public class HiveQLGroupBy {
private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver";
public static void main(String[] args) throws SQLException {
// Register driver and create driver instance
Class.forName(driverName);
// get connection
Connection con = DriverManager.
getConnection("jdbc:hive://localhost:10000/userdb", "", "");
// create statement
Statement stmt = con.createStatement();
// execute statement
Resultset res = stmt.executeQuery(“SELECT Dept,count(*) ” + “FROM employee GROUP BY DEPT; ”);
System.out.println(" Dept \t count(*)");
while (res.next()) {
System.out.println(res.getString(1) + " " + res.getInt(2));
}
con.close();
}
}
Enregistrez le programme dans un fichier nommé HiveQLGroupBy.java. Utilisez les commandes suivantes pour compiler et exécuter ce programme.
$ javac HiveQLGroupBy.java
$ java HiveQLGroupBy
Production:
Dept Count(*)
Admin 1
PR 2
TP 3