Buenas, Con tu pregunta lo único que puedes obtener son más preguntas y pocas respuestas.
Extracción ======== Los datos están en formato json, ¿pero dónde? Tienes que consumir un api registro a registro; te descargas el json todos los datos de un s3, ftp o cualquier otro sistema de ficheros/persistencia;... Si es un fichero bulk es un json válido todo el o son un conjunto de jsones válidos linea a linea, pero que en su conjunto no es un json válido. ¿De qué tamaño de json estamos hablando? Porque no es lo mismo cargar/parsear en memoria un json de 20Mb que uno que pesa 20Gb, aunque un fichero en el que cada línea es un json este problema es menor. Suponiendo el caso más simple usa la librería de json que viene con python para parsear el json. En otros casos: depende. Transformación ============ No sabemos cuáles son las transformaciones necesarias para convertir los datos extraídos en datos cargables en tu BBDD. No es lo mismo limitarse a convertir fechas, que te llegan como una cadena a un tipo date o datetime para insertarlos en la base de datos, que tener que hacer otro tipo de transformaciones como por ejemplo: * extraer relaciones de un json altamente jerarquizado * extraer coordenadas del campo address, state y country * extraer el timezone a partir de las coordenadas anteriormente extraídas * normalizar códigos/ids entre el sistema externo y el propio * ... En un caso simple se puede hacer a lo loco sin preocuparse de nada. En un caso más complejo en el que hay que enriquecer los datos accediendo a sistemas externos, que conlleva una latencia, es bueno pensar en modelos concurrentes y tener en cuenta los posibles problemas de backpressure para que no te estalle en las manos. Suponiendo que el caso más simple es trivial, en otros casos... depende. Load/carga ========= La opción más rápida/simple creo que es preparar ficheros csv y usar utilidades de importación de oracle http://www.orafaq.com/wiki/SQL*Loader_FAQ Aunque también puedes usar las librerías de oracle para comunicarte directamente con la base de datos https://oracle.github.io/python-cx_Oracle/ Un ORM es algo que suele resultar cómodo, pero que va a meter capas de abstracción que va a hacer que la cosa no sea tan escalable. Así que mejor no usarlos para esto. Puedes optimizar las cosas haciendo batches y haciendo commit por cada batch, pero vas a tener que lidiar con el tamaño del segmento de rollback para que la cosa funcione bien. También vas a tener que lidiar con el orden en el que cargas los datos para evitar que de fallos insertar un registro con relaciones a otro que todavía no has cargado. ETL todo junto =========== Elige una arquitectura simple que cubra tus necesidades. Si el ETL es simple un script simple es lo mejor. Si por volumen de datos, complejidad de pasos de transformación,... la cosa se complica, analizar herramientas como luigi o airflow te puede simplificar la vida. Entre medias todo un abanico de posibilidades. Hazte varios datasets de pruebas: * Uno con pocos datos, pero representativos, para programar el happy path de forma rápida * Uno con pocos datos, pero con errores, para comprobar que has programado un buen control de errores * Varios con diferentes tamaños para probar el rendimiento y escalabilidad de tu proceso (tanto que vaya rápido, como el que no consuma una cantidad absurda de memoria o rebases algún límite de la BBDD). Espero que esto te aclare algunas dudas aunque solo sea para hacer preguntas más específicas ;-) Un saludo, Javi El mié., 2 sept. 2020 a las 19:43, GEIS AUGUSTO GARCIA ROMERO (< geist...@gmail.com>) escribió: > Muy Buenas comunidad podria dar informacion de como implementar un ETL > consumiendo un json para pasar los datos a unas tablas de Oracle. > > -- > "Es mejor luchar, sabes que esta la esperanza de que ganaras." Geis. > Ingeniero en Sistemas y Especialista en Gerencia de Proyectos. > _______________________________________________ > Python-es mailing list > Python-es@python.org > https://mail.python.org/mailman/listinfo/python-es >
_______________________________________________ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es