Actualmente cada mes he tenido que cargar un archivo csv de un tamaño de 200 mb a travel de Pentaho Data Integration (PDI). Este se demora algo asi como 3 horas en cargarlo. El proceso es relativamente sencillo. Los pasos genéricos se pueden ver a continuación:
- Leer CSV
- Aplicar “Select values” para definir meta-datos.
- Aplicar un paso de Javascript para agregar una columna con texto basándose en un dato de una columna (puede ser medio lento según he leído pero no era un cuello de botella por lo que pude ver)
- Un campo del CSV viene con fecha-hora por lo que se aplica una calculadora que tenga solo el campo Fecha
- Insertar a una tabla en MySQL (lugar donde se produce la lentitud extrema)
Dado que se pierde muchísimo tiempo solo en cargar esta data, y si hay un error de red, se pierde lo avanzado (es mas engorroso tener un proceso que busque la ultima fecha y cargar desde ahí) busque alguna forma para mejorar esto. Es por eso que encontré el link http://forums.pentaho.com/showthread.php?142217-Table-Output-Performance-MySQL que me funcionó perfecto.
De los cambios que salen mencionados hice 2 modificaciones a mi proceso:
En el proceso de carga de MySQL, hice click derecho en PDI y puse “Change Number of Copies to Start” de 1 a 3 (por que este numero? De prueba inicial que me funcionó de maravilla)Se multiplican los datos. Es mejor multiplicar el paso y poner “Distribute”.- En las opciones de la conexión a la base de datos agregue los siguientes parámetros:
- useServerPrepStmts false (en particular no se que hace, pero el mix hace que funcione)
- rewriteBatchedStatements true
Con estos cambios, la velocidad de procesamiento paso de 3 horas a 5 minutos para un archivo de 200 mb.
Actualizacion: se corrige el como cargar la data ya que se genera una duplicidad si se hace con “Change Number of Copies”.
Leave a Reply