HiveQL - Trier par

Ce chapitre explique comment utiliser la clause ORDER BY dans une instruction SELECT. La clause ORDER BY est utilisée pour récupérer les détails en fonction d'une colonne et trier le jeu de résultats par ordre croissant ou décroissant.

Syntaxe

Vous trouverez ci-dessous la syntaxe de la clause ORDER BY:

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 pour la clause SELECT ... ORDER BY. Supposons la table des employés comme indiqué ci-dessous, avec les champs nommés Id, Nom, Salaire, Désignation et Service. Générez une requête pour récupérer les détails de l'employé dans l'ordre en utilisant le nom du 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        | 40000       | Hr Admin          | HR     |
|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 Id, Name, Dept FROM employee ORDER BY DEPT;

Lors de l'exécution réussie de la requête, vous obtenez la réponse suivante:

+------+--------------+-------------+-------------------+--------+
| ID   | Name         | Salary      | Designation       | Dept   |
+------+--------------+-------------+-------------------+--------+
|1205  | Kranthi      | 30000       | Op Admin          | Admin  |
|1204  | Krian        | 40000       | Hr Admin          | HR     |
|1202  | Manisha      | 45000       | Proofreader       | PR     |
|1201  | Gopal        | 45000       | Technical manager | TP     |
|1203  | Masthanvali  | 40000       | Technical writer  | TP     |
+------+--------------+-------------+-------------------+--------+

Programme JDBC

Voici le programme JDBC pour appliquer la clause Order 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 HiveQLOrderBy {
   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 * FROM employee ORDER BY DEPT;");
      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();
   }
}

Enregistrez le programme dans un fichier nommé HiveQLOrderBy.java. Utilisez les commandes suivantes pour compiler et exécuter ce programme.

$ javac HiveQLOrderBy.java
$ java HiveQLOrderBy

Production:

ID       Name           Salary      Designation          Dept
1205     Kranthi        30000       Op Admin             Admin
1204     Krian          40000       Hr Admin             HR
1202     Manisha        45000       Proofreader          PR
1201     Gopal          45000       Technical manager    TP
1203     Masthanvali    40000       Technical writer     TP
1204     Krian          40000       Hr Admin             HR