HiveQL - Seleccionar grupo por

Este capítulo explica los detalles de la cláusula GROUP BY en una instrucción SELECT. La cláusula GROUP BY se usa para agrupar todos los registros en un conjunto de resultados usando una columna de colección particular. Se utiliza para consultar un grupo de registros.

Sintaxis

La sintaxis de la cláusula 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 la cláusula SELECT… GROUP BY. Suponga la tabla de empleados como se indica a continuación, con los campos Id, Nombre, Salario, Designación y Departamento. Genere una consulta para recuperar el número 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 del empleado utilizando el escenario anterior.

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

En la ejecución exitosa de la consulta, puede ver la siguiente respuesta:

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

Programa JDBC

A continuación se muestra el programa JDBC para aplicar la cláusula Agrupar por 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();
   }
}

Guarde el programa 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