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