formato estructura ejemplos ejemplo json hadoop hive amazon-emr emr

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



json ejemplos (5)

Generando esquema SerDe desde el archivo .json

Si su archivo .json es grande, puede ser tedioso escribir el esquema a mano. Si es así, puede usar esta práctica herramienta para generarlo automáticamente.

https://github.com/strelec/hive-serde-schema-gen

Quiero crear una tabla Hive a partir de algunos datos JSON (anidados) y ejecutar consultas sobre ella? ¿Esto es posible?

He llegado al extremo de subir el archivo JSON a S3 y abrir una instancia de EMR, pero no sé qué escribir en la consola de la colmena para que el archivo JSON sea una tabla Hive.

¿Alguien tiene algún comando de ejemplo para comenzar, no puedo encontrar nada útil con Google ...


En realidad no es necesario usar el Servidor JSON. Hay una gran entrada de blog aquí (no estoy afiliado con el autor de ninguna manera):

http://pkghosh.wordpress.com/2012/05/06/hive-plays-well-with-json/

Que describe una estrategia usando la función incorporada json_tuple para analizar 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

Así que, básicamente, el esquema de la tabla es simplemente cargar cada línea como una sola columna ''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 seridores JSON, especialmente con objetos anidados).


Hive 0.12 y más tarde en hcatalog-core tiene JsonSerDe que serializará y deserializará sus datos JSON. Entonces, todo lo que necesita hacer es crear una tabla externa como en el siguiente ejemplo:

CREATE EXTERNAL TABLE json_table ( username string, tweet string, timestamp long) ROW FORMAT SERDE ''org.apache.hive.hcatalog.data.JsonSerDe'' STORED AS TEXTFILE LOCATION ''hdfs://data/some-folder-in-hdfs''

El archivo de datos json correspondiente debe verse como el siguiente ejemplo:

{"username":"miguno","tweet":"Rock: Nerf paper, scissors is fine.","timestamp": 1366150681 } {"username":"BlizzardCS","tweet":"Works as intended. Terran is IMBA.","timestamp": 1366154481 }


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

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

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 al camino auxiliar de Hive y cree su tabla de colmenas:

$ 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/


Tendrá que usar un servidor JSON para que Hive asigne su JSON a las columnas de su tabla.

Un muy buen ejemplo que te muestra cómo está aquí:

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

Lamentablemente, el seridor JSON suministrado no maneja muy bien el JSON anidado, por lo que es posible que necesite aplanar el JSON para poder usarlo.

Aquí hay 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/'' ;