Definición de Hive
Apache Hive es una herramienta de de almacenamiento de datos que facilita la lectura, escritura y almacenamiento de grandes volúmenes de datos sobre sistemas HDFS o Amazon S3. Fue creado por Facebook y desarrollado por empresas como Netflix o Finra.
El lenguaje utilizado para consultas es HiveQL, que proporciona un lenguaje basado en SQL que realiza consultas de forma transparente en MapReduce, Apache Tez y tareas Spark.
Características
- La ejecución puede correr bajo YARN.
- Proporciona índices bitmaps para acelerar las consultas.
- Soporta varios tipos de almacenamiento: texto, RCFile, HBase, ORC, …
- Soporta varios formatos de compresión: deflate, bwt, snappy, …
- Almacena metadatos en bases de datos relacionales como MySQL o Derby, para reducir el tiempo verificación semántica.
- Permite al usuario definir funciones UDF para manipular fechas, textos, …
Ejemplo de uso de Hive
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 manipular tablas de una bases de datos en escenario 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;
Buenos dias,
tengo problemas instalando hive en windows.
Me podrías ayudar?
Muchas gracias!
Hola! Tengo tablas creadas en Hive (originalmente son de ORACLE) y quiero agregarle los comentarios (COMMENTS) a las columnas. De oracle las obtengo de all_col_comments, pero no sé cómo modificar en Hive para agregárselas.
Gracias