PDI – Pentaho Data Integration con MySQL – mejora de rendimiento2 min read

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:

  1. Leer CSV
  2. Aplicar “Select values” para definir meta-datos.
  3. 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)
  4. Un campo del CSV viene con fecha-hora por lo que se aplica una calculadora que tenga solo el campo Fecha
  5. 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:

  1. 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”.
  2. En las opciones de la conexión a la base de datos agregue los siguientes parámetros:

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”.

  • @sowe

    Si realmente necesitas un alto performance con MySQL a la hora de insertar lo mejor es usar un bulk y no un insert

    • Es verdad. Solo que en Windows no funciona el bulk. Entonces uno tiene que encontrar la forma de obtener un rendimiento parecido o mejor que lo normal

    • disculpa la demora. sin embargo el bulk load no funciona en windows, por lo que lo unico que hay disponible es optimizar la conexion con los parametros antes mencionados 😀

      • @sowe

        Ummm no puedes llagar a hacer un workaround y que te funcione llamando a comando desde un paso script, pero si con el cambio de parámetros te vale, perfecto

        • Nunca lo había considerado de esa forma. Sin embargo cuando son muchos los datos, lo que indicas podría beneficiar sumando con la configuración de la confección. Win-win