Saltar al contenido

¿Cómo se hace una tabla HIVE con datos JSON?

Solución:

En realidad, no es necesario utilizar JSON SerDe. Hay una gran publicación de blog aquí (no estoy afiliado con el autor de ninguna manera):

Hive Plays Well with JSON

Que describe una estrategia utilizando la función incorporada json_tuple para analizar el json en el momento de la consulta (NO en el momento de la definición de la tabla):

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-json_tuple

Entonces, básicamente, el esquema de su tabla es simplemente cargar cada línea como una sola columna de ‘cadena’ y luego extraer los campos json relevantes según sea necesario por consulta. por ejemplo, esta consulta de esa publicación de blog:

SELECT b.blogID, c.email FROM comments a LATERAL VIEW json_tuple(a.value, 'blogID', 'contact') b 
AS blogID, contact  LATERAL VIEW json_tuple(b.contact, 'email', 'website') c 
AS email, website WHERE b.blogID='64FY4D0B28';

En mi humilde experiencia, esto ha demostrado ser más confiable (encontré varios problemas crípticos relacionados con los serdes JSON, especialmente con objetos anidados).

Deberá usar un serde JSON para que Hive asigne su JSON a las columnas de su tabla.

Un ejemplo realmente bueno que le muestra cómo está aquí:

http://aws.amazon.com/articles/2855

Desafortunadamente, el serde JSON suministrado no maneja muy bien JSON anidado, por lo que es posible que deba aplanar su JSON para poder usarlo.

A continuación, se muestra un ejemplo de la sintaxis correcta del artículo:

create external table impressions (
    requestBeginTime string, requestEndTime string, hostname string
  )
  partitioned by (
    dt string
  )
  row format 
    serde 'com.amazon.elasticmapreduce.JsonSerde'
    with serdeproperties ( 
      'paths'='requestBeginTime, requestEndTime, hostname'
    )
  location 's3://my.bucket/' ;

Solo tenía que resolver el mismo problema, y ​​ninguno de los enlaces hasta ahora vinculados a JSON SerDes parecía lo suficientemente bueno. Amazon puede ser bueno, pero no puedo encontrar la fuente en ningún lado (¿alguien tiene un enlace?).

El JsonSerDe integrado de HCatalog funciona para mí, aunque en realidad no estoy usando HCatalog en ningún otro lugar.

https://github.com/apache/hcatalog/blob/branch-0.5/core/src/main/java/org/apache/hcatalog/data/JsonSerDe.java

Para usar JsonSerDe de HCatalog, agregue hcatalog-core .jar a la ruta auxiliar de Hive y cree su tabla de hive:

$ hive --auxpath /path/to/hcatalog-core.jar

hive (default)>
create table my_table(...)
ROW FORMAT SERDE
  'org.apache.hcatalog.data.JsonSerDe'
...
;

Escribí una publicación aquí con más detalles.

http://ottomata.org/tech/too-many-hive-json-serdes/

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *