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.

Al extraer un valor de Oracle (utilizando Python) se está perdiendo su precisión.

Estoy buscando cargar un valor de alta precisión desde Oracle a Snowflake. Estoy haciendo esto extrayendo primero el valor de Oracle en un archivo CSV a través de un Script de Python y luego cargándolo en Snowflake DB. Lo que estoy encontrando es que el valor no se extrae igual que en Oracle. Veo algunos problemas con la precisión. No estoy seguro si esto tiene algo que ver con el problema en Oracle (Versión 19.12.0.0.0) o el Script de Python (V 3.7). Tenga en cuenta que este comportamiento es para un conjunto grande de valores y el diseño mencionado anteriormente es el que necesito seguir para la carga.

Valor en la base de datos de Oracle: 86525.200000000006. Esto está disponible en una columna de tipo de dato ‘number(28,12)’

Valor en el archivo CSV extraído: 86525.2

Lo que ya he intentado:

  1. Convertí el número a texto de la siguiente manera:

select value1, cast(value1 as varchar2(1000))

from table1

aquí el Valor1 aparece como ‘86525.2’

2.

TO_CHAR(value1, ‘fm9999999999999999.999999999999’),

aquí el Valor aparece como ‘86525.2’

3.

TO_CHAR(value1, ‘fm9999999999999999.000000000000’),

aquí el Valor aparece como ‘86525.200000000000’

4.

(SUBSTR(value1, INSTR(value1, ‘.’,1))) mydecimal,

aquí el Valor aparece como ‘86525.2’

5.

tonumber(regexpreplace(tochar(value1), ‘^[0-9]+.’, ”)) rexp,

aquí el Valor aparece como ‘86525.2’

Cualquier ayuda será muy apreciada. Gracias.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Basándose en la información proporcionada, parece que el problema con la precisión puede estar en el script de Python en lugar de en Oracle.

    Una cosa que puedes intentar es asegurarte de que el tipo de dato del valor extraído de Oracle (number(28,12)) se esté preservando en el script de Python. Si el tipo de dato se está convirtiendo a float o a un tipo de dato diferente que no admite la misma precisión, eso podría explicar la pérdida de precisión en el archivo CSV extraído.

    También puedes intentar usar un método diferente para extraer el valor de Oracle, como Oracle SQL Developer o Oracle Data Integrator, para ver si eso hace alguna diferencia en la precisión del valor extraído.

    Además, al cargar el valor extraído en Snowflake, asegúrate de que el tipo de dato en Snowflake admita el nivel deseado de precisión.

    En general, asegurarse de la consistencia en los tipos de datos entre Oracle, Python y Snowflake, y usar un método que preserve la precisión deseada, debería ayudar a resolver el problema de la pérdida de precisión al extraer valores de Oracle a Snowflake a través de un script de Python.

Comments are closed.