Comprender el propósito de la cláusula "having"
En este paso, exploraremos el propósito fundamental de la cláusula "having" en Hive y cómo se relaciona con el filtrado y la agregación de datos.
La cláusula "having" en Hive se utiliza en combinación con la cláusula "group by" para filtrar grupos de datos basados en una condición especificada. Te permite aplicar un filtro después de que los datos han sido agrupados y agregados, lo que te permite filtrar grupos enteros que no cumplen con los criterios especificados.
Aquí hay un ejemplo que demuestra el uso de la cláusula "having":
Primero, asegúrate de estar registrado como el usuario hadoop
ejecutando el siguiente comando en la terminal:
su - hadoop
Luego, lanza la shell de Hive ejecutando el siguiente comando:
hive
Ahora, crea una tabla de ejemplo:
CREATE TABLE sales (
product STRING,
category STRING,
sales_amount FLOAT
);
Inserta algunos datos de ejemplo:
INSERT INTO sales VALUES
('Product A', 'Electrónica', 1000.0),
('Product B', 'Electrónica', 2000.0),
('Product C', 'Ropa', 500.0),
('Product D', 'Ropa', 1500.0),
('Product E', 'Electrónica', 3000.0);
Finalmente, calcula las ventas totales por categoría y filtra las categorías con ventas totales mayores a 3000:
CREATE TABLE result_1
AS
SELECT category, SUM(sales_amount) AS total_sales
FROM sales
GROUP BY category
HAVING SUM(sales_amount) > 3000;
SELECT * FROM result_1;
En este ejemplo, primero creamos una tabla llamada sales
con columnas para product
, category
y sales_amount
. Luego insertamos algunos datos de ejemplo en la tabla.
A continuación, usamos la cláusula "group by" para agrupar los datos por category
, y la función SUM
para calcular las ventas totales para cada categoría. La cláusula "having" se utiliza luego para filtrar las categorías donde el total_sales
es menor o igual a 3000.
La salida de esta consulta solo incluirá la categoría "Electrónica" ya que sus ventas totales (2000.0 + 1000.0 + 3000.0 = 6000.0) exceden de 3000, mientras que la categoría "Ropa" se excluirá porque sus ventas totales (500.0 + 1500.0 = 2000.0) no cumplen con la condición especificada en la cláusula "having".