HIVE – Convierte sentencias SQL en un trabajo de MapReduce

Prerequisitos

Consultar el apartado de “Comandos para manipular ficheros HDFS

 

Bases de datos

Antes de poder utilizarlo es necesario arrancar el servicio de Hadoop

Y arrancar el servicio de HIVE para poder ejecutar comandos, para ello buscar la carpeta hive y una vez allí ejecutar:

$ cd hive
$ bin/hive

 

Consultar BBDD existentes

hive> SHOW DATABASES;

 

Crear BBDD

Al estar dentro ya podemos ejecutar la sentencia para crear una base de datos, como ejemplo:

hive> CREATE DATABASE diegocalvo

 

Seleccionar la base de datos con la que trabajar

hive> use diegocalvo;

 

Tablas

Antes de manupular tablas de una bases de datos en escesario indicar al sistema que bases de datos usar, mediante el comando “use nombre_bbdd”

Ver tablas

hive> show tables;

 

Crear Tabla externa

Sino esta iniciado el servicio de hive realizar todos los pasos indicados en la creación de la BBDD y después:

CREATE EXTERNAL TABLE localizacion (LocalizacionID INT, Zona STRING, Barrio STRING)
 COMMENT 'tabla de localizacion'
 ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
 STORED AS TEXTFILE
 LOCATION '/user/hadoop/localizacion';
CREATE EXTERNAL TABLE consumo (Fecha TIMESTAMP, Compania STRING, ConsumoID INT)
 COMMENT 'tabla de consumo'
 ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
 STORED AS TEXTFILE
 LOCATION '/user/hadoop/consumo';

 

Crear tabla interna para Joins

CREATE EXTERNAL TABLE union ( Fecha TIMESTAMP, Compania STRING, ID INT, Zona STRING, Barrio STRING)
 COMMENT 'tabla de union entre el consumo y la localización'
 ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
 STORED AS PARQUET

 

Insertar datos en tabla interna

INSERT INTO TABLE union
 SELECT C.Fecha, C.Compania, C.ID, L.Zona, L.Barrio
 FROM consumo C INNER JOIN location L
 ON C.ConsumoID = L.LocalizacionID

 

Consultas: Contar días de las semana repetidos

SELECT count(*), date_format(Fecha, 'EEEE')
 FROM union
 GROUP BY date_format(Fecha, 'EEEE');

 

Consultas: Los 10 barrios más activos

SELECT count(*) AS cnt, barrio
 FROM union
 GROUP BY barrio
 SORT BY cnt DESC LIMIT 10;

 

Consultas: Contar cuantos  elementos por cada día del mes

SELECT dayofmonth(Fecha), count(*)
 FROM union
 GROUP BY dayofmonth(Fecha);

 

Consultas: Franjas de horario más activas

SELECT hour(Fecha), count(*) as cnt
 FROM union
 GROUP BY hour(Fecha)
 ORDER BY cnt DESC LIMIT 5;

 

Autor: Diego Calvo