Off Topic - Completar columna de datos vacía en Hive a través de los datos de otra tabla

 
Vista:
Imágen de perfil de María de Alejandría
Val: 2
Ha disminuido su posición en 24 puestos en Off Topic (en relación al último mes)
Gráfica de Off Topic

Completar columna de datos vacía en Hive a través de los datos de otra tabla

Publicado por María de Alejandría (1 intervención) el 14/01/2021 16:20:07
Saludos
Formulo la presente cuestión en este apartado, puesto que no he visto ninguno relacionado con Hive y/o Cloudera.

Estoy trabajando con Hive en Cloudera Manager. Cuento con las siguientes tablas de datos asociadas a vuelos:

Tabla de mensajes: En ella se encuentran mensajes asociados al estado de los vuelos varios puntos. Cada vuelo cuenta con varios mensajes. Sus atributos son: id (identificador del mensaje), aid (identificador de la aeronave), descripcion y mtemp(marca temporal relacionada con la fecha y hora del envío).

Por otra parte tengo una tabla de vuelos en la que se recoge el identificador del vuelo y el de aeronave como en el caso anterior, además de dos campos relacionados con las horas de partida y llegada de cada vuelo ,respectivamente.

Los datos de estas últimas columnas son desconocidos y es necesario obtenerlos agrupando los mensajes en función del identificador del vuelo y de la aeronave seleccionando el valor mínimo de las marcas temporales en cada grupo para obtener las horas y fechas de salida y el valor máximo para las fechas y horas de llegada correspondientes.

A través de la siguiente consulta pensaba crear una tabla con dos columnas que pudiesen contener los valores deseados (es necesario expresar en formato de fecha y hora las marcas temporales):


1
2
3
4
5
6
insert overwrite table fechashoras PARTITION (aid)
select UNIX_TIMESTAMP(max(mtemp)), UNIX_TIMESTAMP(min(mtemp))
    from
    datos.mensajes
    group by
    aid,id

Después de ejecutar esa consulta pensaba crear una tabla en la que se combinasen las columnas obtenidas con las de la tabla de mensajes (incluyendo las columnas con los nuevos resultados en lugar de las vacías de las que se partía) a través de una consulta que incluyese un join. El problema es que no logro que la consulta para crear la primera tabla me funcione y no consigo encontrar el error.

Gracias de antemano por las respuestas.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro Andrade

Completar columna de datos vacía en Hive a través de los datos de otra tabla

Publicado por Alejandro Andrade (50 intervenciones) el 28/03/2023 23:06:46
Hola María.

La consulta que has proporcionado para crear la tabla 'fechashoras' parece estar bien construida. Estás agrupando los mensajes por 'aid' e 'id' y seleccionando el valor mínimo y máximo de 'mtemp' para obtener las fechas y horas de salida y llegada de cada vuelo.

Una vez que hayas creado la tabla 'fechashoras', puedes combinarla con la tabla de mensajes utilizando una consulta de 'JOIN' para llenar las columnas vacías de la tabla de vuelos. Aquí hay un ejemplo de cómo se puede hacer:

1
2
3
4
5
6
7
8
9
INSERT OVERWRITE TABLE vuelos
SELECT vuelos.id, vuelos.aid, fechashoras.salida, fechashoras.llegada
FROM vuelos
JOIN (
    SELECT aid, UNIX_TIMESTAMP(MIN(mtemp)) AS salida, UNIX_TIMESTAMP(MAX(mtemp)) AS llegada
    FROM mensajes
    GROUP BY aid, id
) fechashoras
ON vuelos.aid = fechashoras.aid

Esta consulta utiliza la tabla 'vuelos' y se une con la tabla 'fechashoras' mediante el campo 'aid'. La consulta de unión incluye los valores mínimos y máximos de la tabla 'fechashoras' para 'aid', que se corresponden con las fechas y horas de salida y llegada de cada vuelo. Estos valores se agregan a la tabla 'vuelos' para llenar las columnas vacías.

Espero que esto te sea útil.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar