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