es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Lectura de Hive solo de una fila json.

Tengo un json como este

[{"event": "1", "meta": {"name":"Kumar"," ":"28"}}, {"event": "2", "meta": {"name":"Harsh"," ":"27"}}]

Eliminé el corchete cuadrado ya que en Hive está dando un error

org.apache.hadoop.hive.serde2.SerDeException: java.io.IOException: Start token not found where expected
{"event": "1", "meta": {"name":"Kumar"," ":"28"}}, {"event": "2", "meta": {"name":"Harsh"," ":"27"}}

Estoy creando mi tabla de esta manera

create external table record_two(event string,meta struct<name:string,age:string>)
ROW FORMAT SERDE 'org.apache.hcatalog.data.JsonSerDe'
LOCATION '/test/event_two/';

La tabla se crea, pero cuando ejecuto la consulta de selección, solo devuelve un registro.</name:string,age:string>

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema que estás enfrentando es causado por la falta de corchete cuadrado al final de la cadena JSON. Como resultado, Hive está tratando los dos objetos como un único registro en lugar de dos registros separados. Para solucionar esto, debes agregar el corchete cuadrado de cierre al final de la cadena, de esta manera:

    {"event": "1", "meta": {"name":"Kumar","age":"28"}}, {"event": "2", "meta": {"name":"Harsh","age":"27"}}
    

    Una vez que actualices la cadena JSON, puedes ejecutar nuevamente la sentencia CREATE TABLE para sobrescribir la tabla existente con los datos corregidos. Después de eso, la sentencia SELECT debería devolver ambos registros correctamente.

Comments are closed.