Importando miles de registros en Odoo. Usando odoo_csv_import

18 de julio de 2023 por
Gustavo Orrillo
| Sin comentarios aún
 

Un problema enorme durante las migraciones a Odoo (o cuando se necesitan actualizar muchso registros) es la performance. Para importar miles de registros Odoo es lento, y no es un problema de PostgreSQL. No podemos evitar el ORM, ya que necesitamos que cada registro que se procese se almacene garantizando la integridad de la base de datos. El problema es que este proceso enlentece bastante la carga de datos.

Para esto existen varias soluciones. La primera es actualizar los datos usando sentencias SQL y escribir directamente contra la base de datos. Esto es performante pero tiene un par de grandes desventajas. La primera es que en SQL debemos replicar el accionar del ORM (por ejemplo actualizando los campos de la metadata). Esto es peligroso, y hacerlo bien es muy trabajoso y consume mucho tiempo. La segunda opción es utilizar xmlrpc y paginar las acciones de create, pero esto no se aplica para los writes.

Una de las soluciones al problema es una herramienta increible llamada odoo_csv_import. Esta herramienta desarrollada en Belgica y poco publicitada por Odoo, es una herramienta de la linea de comandos que permite mediante el procesamiento paralelo en el server y utilizando el método load, importar archivos CSV en Odoo aplicando el ORM.


Para probarla importé 500,000 registros del padron de ARBA y tardó 10 minutos. Nada mal considerando que tiene en el medio al ORM. Y que crea registros y los actualiza. Todo estos en un server no optimizado sin procesamiento paralelo.

Para usar odoo_import_csv deben primero leer la documentación, la cual es bastante completa. Creo que es la herramienta de Odoo mejor documentada en Github. Por ejemplo tiene una sección dedicada a los problemas de actualizar el modelo account_move. Lean la documentación que vale la pena.

La herramienta se instala mediante pip3 y pueden conocer la misma ejecutando los ejemplos. Que son abundantes y proceden a insertar datos jerarquicos como las categorias, y masivos como son los productos. Una vez que uno se familiarizo con la herrmienta, generaría un archivo CSV (siguiendo los ejemplos de la documentación) y lo cargaría mediante la herramienta. Y así hasta insertar modelos más complejos, por ejemplo mail.message o sale.order.line. Por otra parte uno debe entender como manejar los external IDs (uno necesita generar los external IDs para todos los registros de la base de datos) y aprender a integrarla con el ambiente por el cual cargan los datos en Odoo.

Es una gran herramienta. Es interesante que haya nacido en el ambiente de retailing en Belgica (los retailers nadan en volúmenes de información). Y lo mejor es que esta bien mantenida y tenemos el código fuente. No es una herramientea para instalar y hacer andar, uno debe estudiarla y comprender como funciona. Y si o si se debe complementar con otros scripts para hacer su trabajo. Pero definitivamente es muy util para la carga de grandes volúmenes de datos en Odoo.

Gustavo Orrillo 18 de julio de 2023
Compartir
Archivar
Identificarse dejar un comentario