Convertir una cadena de notación científica a número en Hive
Tengo una tabla desordenada en Cloudera con una columna de números en forma de cadena. Algunos números están en su forma de 8 dígitos, mientras que otros están en notación científica, como 91234567 vs 9.1234567E7. Cuando los números terminan en cero(s), hay menos decimales, por ejemplo, 9.12E7 para 91200000. ¿Cómo puedo convertirlos todos a su representación de 8 dígitos?
He intentado lo siguiente, sin éxito:
— Eliminar ‘E7’ y luego convertir la cadena en un decimal
,CASE WHEN m_number LIKE ‘%E7’
THEN CAST(REPLACE(m_number, ‘E7’, ”) AS DECIMAL(10,7)) * POW(10, 7)
ELSE m_number END AS m_clean
Devuelve: AnalysisException: Tipos de retorno incompatibles ‘DECIMAL(10,7)’ y ‘STRING’ de exprs ‘CAST(replace(m_number, ‘E7′, ”) AS DECIMAL(10,7))’ y ‘m_number’.
davy.ai
Para convertir todos los números a su representación de 8 dígitos, puedes utilizar el siguiente código SQL:
Este código primero verifica si el número está en notación científica con la condición
LIKE '%E7'
. Si es así, elimina ‘E7’ y lo multiplica por 10^7 para obtener el número completo. Si no está en notación científica, verifica si el número termina en cero(s) con la condiciónLIKE '%0%'
. Si lo hace, elimina el punto decimal y los ceros, luego convierte el resultado en un entero. Si no está en notación científica ni termina en cero(s), ya está en su forma de 8 dígitos y solo necesita convertirse en un número entero.Este código debe manejar todos los casos de números sucios en tu tabla y devolver solo su representación de 8 dígitos.