HiveQL - Sélectionnez-Où

Hive Query Language (HiveQL) est un langage de requête permettant à Hive de traiter et d'analyser des données structurées dans un Metastore. Ce chapitre explique comment utiliser l'instruction SELECT avec la clause WHERE.

L'instruction SELECT est utilisée pour récupérer les données d'une table. La clause WHERE fonctionne comme une condition. Il filtre les données en utilisant la condition et vous donne un résultat fini. Les opérateurs et fonctions intégrés génèrent une expression qui remplit la condition.

Syntaxe

Voici la syntaxe de la requête SELECT:

SELECT [ALL | DISTINCT] select_expr, select_expr, ... 
FROM table_reference 
[WHERE where_condition] 
[GROUP BY col_list] 
[HAVING having_condition] 
[CLUSTER BY col_list | [DISTRIBUTE BY col_list] [SORT BY col_list]] 
[LIMIT number];

Exemple

Prenons un exemple pour la clause SELECT… WHERE. Supposons que nous ayons le tableau des employés comme indiqué ci-dessous, avec des champs nommés Id, Nom, Salaire, Désignation et Département. Générez une requête pour récupérer les détails des employés qui gagnent un salaire supérieur à 30000 Rs.

+------+--------------+-------------+-------------------+--------+
| 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 * FROM employee WHERE salary>30000;

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

+------+--------------+-------------+-------------------+--------+
| 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     |
+------+--------------+-------------+-------------------+--------+

Programme JDBC

Le programme JDBC à appliquer la clause where pour l'exemple donné est le suivant.

import java.sql.SQLException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.DriverManager;

public class HiveQLWhere {
   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 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();
   }
}

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

$ javac HiveQLWhere.java
$ java HiveQLWhere

Production:

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