En muchos escenarios de trabajo partiré de unos datos en formato JSON que quiero volcar directamente en mi infraestructura Hadoop para posteriormente hacer procesamiento con ellos.
Existen 2 formas de trabajar con estructuras JSON a través de HIVE, veámoslas con un ejemplo:
Supongamos una estructura de datos como esta:
A través de la función get_json_object:
En este caso crearemos una tabla con un campo de tipo STRING y sobre este aplicaremos las funciones:
1. Cargo fichero comments en HDFS cmd>hadoop fs -put comments comments
2. Creamos Tabla: hive>CREATE TABLE comment_data(comment_val STRING);
3. Cargamos datos de fichero HDFS: hive>LOAD DATA INPATH ‘/user/training/comments’ OVERWRITE INTO TABLE comment_data;
4. Realizo query básica:
hive>SELECT * from comment_data LIMIT 5;
5. Realizo query usando function get_json_object:
hive>select get_json_object(comment_data.comment_val, ‘$.commenterId’), get_json_object(comment_data.comment_val, ‘$.commentData’) from comment_data;
6. Consulta algo más compleja:
Hive> SELECT b.commentData,COUNT(b.commentData)
FROM comment_data a LATERAL VIEW json_tuple(a.comment_val, ‘commentData’) b
AS commentData where b.commentData LIKE ‘%cave%’ GROUP BY b.commentData;
Usando el serializador hive-json-serde
Con esta opción podemos cargar los atributos JSON en columnas individuales.
1. Cargo fichero comments en HDFS cmd>hadoop fs -put comments comments2
2. Registramos el JAR del Serializador: hive>ADD JAR /mnt/hgfs/shared/hive-json-serde-0.2.jar;
3. Creamos tabla que corresponda con estructura de mi JSON:
hive>CREATE TABLE comment_data_split(commenterId STRING, commentData STRING, country STRING) ROW FORMAT SERDE ‘org.apache.hadoop.hive.contrib.serde2.JsonSerde’;
7. Cargo datos a la tabla hive>LOAD DATA INPATH ‘/user/training/comments2’ OVERWRITE INTO TABLE comment_data_split;
4. Realizo consultas (en este caso la query es mucho más sencilla):
Hive>select a.commenterId, a.commentData, count(a.commentData) from comment_data_split a where a.commentData like ‘%cave%’ group by a.commenterId, a.commentData;
Esta opción es mucho más recommendable aunque require conocer previamente la estructura de los ficheros JSON a cargar a la hora de crear la tabla.





Deja un comentario