HiveQL - Select-Group By



Este captulo explica los detalles de clusula GROUP BY en una instruccin SELECT. La clusula GROUP BY se usa para agrupar todos los registros de un conjunto de resultados con una coleccin particular columna. Se utiliza para realizar una consulta a un grupo de registros.

Sintaxis

La sintaxis de clusula GROUP BY es la siguiente:

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];

Ejemplo

Tomemos un ejemplo de SELECTde la clusula GROUP. Asumir tabla de empleados como se indica a continuacin, con el Id, el nombre, el sueldo, la designacin, y Depto. Generar una consulta para recuperar el nmero de empleados de cada departamento.

+------+--------------+-------------+-------------------+--------+ 
| 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 siguiente consulta recupera los detalles de empleado con el escenario anterior.

hive> SELECT Dept,count(*) FROM employee GROUP BY DEPT;

El xito de la ejecucin de la consulta, se llega a ver la siguiente respuesta:

+------+--------------+ 
| Dept | Count(*)     | 
+------+--------------+ 
|Admin |    1         | 
|PR    |    2         | 
|TP    |    3         | 
+------+--------------+

Programa JDBC

A continuacin se muestra el programa JDBC para aplicar la clusula Group By para el ejemplo dado.

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();
   }
}

El programa se guarda en un archivo llamado HiveQLGroupBy.java. Utilice los siguientes comandos para compilar y ejecutar este programa.

$ javac HiveQLGroupBy.java
$ java HiveQLGroupBy

Salida:

 Dept     Count(*)
 Admin       1
 PR          2
 TP          3
Advertisements