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.

Hive :: Cálculo aritmético simple con números decimales que devuelve NULL

La siguiente consulta devuelve null:

hive> select  2.77047767262313*0.361901756864543*(91.57/380364.029999943);
OK
_c0
NULL
Time taken: 0.036 seconds, Fetched: 1 row(s)

Pero la misma consulta, cuando se eliminan los paréntesis, funciona:

hive> select  2.77047767262313*0.361901756864543*91.57/380364.029999943;
OK
_c0
0.00024137879781663538674308
Time taken: 0.04 seconds, Fetched: 1 row(s)

¿Algún motivo en particular para este comportamiento? Se ejecuta en EMR. Hive 2.3.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    La razón de este comportamiento se debe al orden de las operaciones en los cálculos aritméticos. En la primera consulta, las operaciones de multiplicación se realizan antes que la operación de división debido a la presencia de paréntesis. Como resultado, la operación de división se realiza sobre el producto de las dos operaciones de multiplicación, lo cual produce un número significativamente más pequeño de lo esperado y finalmente devuelve un valor nulo.

    En la segunda consulta, los paréntesis han sido eliminados y las operaciones de multiplicación y división se realizan de izquierda a derecha según su orden de precedencia. Esto da como resultado que la operación de división se realice sobre el resultado más pequeño de la multiplicación, lo cual arroja el resultado no nulo esperado.

    Para evitar este tipo de problemas, se recomienda utilizar paréntesis para definir claramente el orden de las operaciones en los cálculos aritméticos.

Comments are closed.