Pentaho Data Integration - guardar registro con espacio incluido

Zuljin

Fundador
Miembro del Equipo
Fundador
ADMIN
Se incorporó
15 Enero 2004
Mensajes
11.872
En un confuso incidente un pequeño requerimiento de cambio en un proceso de carga masiva de datos terminó en mis manos.

Nosotros periódicamente insertamos sobre nuestra base de datos registros leídos desde un archivo de texto plano grandote. Ese archivo de texto plano se lee con Pentaho Data Integration.

Antes de que me digan "oye, cambia Pentaho por xxx porque es mil veces mejor y blablabla", les cuento que Pentaho hace mil hueas más de lógica de negocio antes de insertar el registro y portarlo todo no está en mis planes, para efectos prácticos sólo necesito cambiar la forma de parsear un registro nada más.

Pues bien, la cosa es que el proveedor que nos entrega el texto planos con los datos actualmente nos envía estos registros

Código:
1999-01-01 00:00 "ruta/thebeatles/yellow sumarine.mp3"

y nosotros lo guardamos en una tabla en los campos FECHA y RUTA del audio. Como pueden darse cuenta, la ruta de la canción está entre comillas dobles e incluye un espacio y se guarda bien con esta configuración.

NkLjhpt.jpg



El proveedor dijo que la fecha que estaba enviando no servía de nada y para aligerar el proceso removió la fecha/hora y me va a mandar únicamente un registro con la RUTA del audio. Algo así

Código:
ruta/thebeatles/yellow sumarine.mp3

sin comillas ni nada.

Yo hice todos los cambios estructurales en la base de datos y en pentaho para que ahora leyera solamente UN VALOR del archivo de entrada. La cosa es que cuando comienza a insertar en la base de datos me guarda esto

Código:
ruta/thebeatles/yellow

o sea, el hueon se detiene en el espacio y ahí corta. Evidentemente tiene por defecto la instrucción de cortar el registro en el primer espacio que vea, pero yo necesito decirle que me GUARDE TODA LA PUTA LINEA DE PRINCIPIO A FIN.

Y5BYm5l.jpg



ahí donde dice Delimiter no hay nada. Bueh, igual me corta el texto de la ruta en el primer espacio que lee y me guarda eso nomás. No hay mucha info así que voy a ir a meterme al submundo de la comunidad de pentaho, pero si alguien tiene un dato que me de se lo agradezco.
 

t3b4n

Ocioso
Se incorporó
27 Febrero 2006
Mensajes
1.659
Primero necesitas generar las fechas a consultar, una fecha por fila. Puede ser con un Table Input a una tabla de calendario por ejemplo.

Después conectas esa caja a un Execute SQL Script, y activas la opción "Execute for each row" y en parameters pones el campo fecha que generates anteriormente


Ver adjunto 21039

En la query vas a tener por ejemplo un where con tu campo de fecha que quieres parametrizar, lo tienes que dejar con signo de interrogación:

SQL:
WHERE fecha = '?' AND ...

Si corres la transformación en modo debug puedes ver como va llamando a cada query con la variable reemplazada
Esta respuesta es in correcta, lamentablemente. El motivo es que las transformaciones procesan datos en paralelo, no en secuencia. Así es que tan pronto un registro está listo para ser consumido, se procesa y se entrega al siguiente step, lo que finalmente hará que termine con el mismo problema que antes.

@Lordnet Para poder ayuda a optimizar la transformación tengo las siguientes consultas:
- Cuántos registros son los que quieres procesar (miles, millones, etc)?
- Has aumentado la memoria ram disponible para PDI?
- Podrías dejar una copia de la transformación que estás utilizando? Eso permitiría encontrar posibles problemas que atacar para optimizar el proceso.
 
Upvote 0
Se incorporó
4 Octubre 2007
Mensajes
338
Esta respuesta es in correcta, lamentablemente. El motivo es que las transformaciones procesan datos en paralelo, no en secuencia. Así es que tan pronto un registro está listo para ser consumido, se procesa y se entrega al siguiente step, lo que finalmente hará que termine con el mismo problema que antes.

@Lordnet Para poder ayuda a optimizar la transformación tengo las siguientes consultas:
- Cuántos registros son los que quieres procesar (miles, millones, etc)?
- Has aumentado la memoria ram disponible para PDI?
- Podrías dejar una copia de la transformación que estás utilizando? Eso permitiría encontrar posibles problemas que atacar para optimizar el proceso.
De hecho el Step de Execute SQL solo ejecuta una query a la vez, cuando termina procesar una fila, recién ejecuta la siguiente. Me ha pasado que he necesitado paralelizar las consultas y ahí efectivamente he tenido que tener varias copias de Execute SQL corriendo para acelerar el proceso
 
Upvote 0

t3b4n

Ocioso
Se incorporó
27 Febrero 2006
Mensajes
1.659
De hecho el Step de Execute SQL solo ejecuta una query a la vez, cuando termina procesar una fila, recién ejecuta la siguiente. Me ha pasado que he necesitado paralelizar las consultas y ahí efectivamente he tenido que tener varias copias de Execute SQL corriendo para acelerar el proceso
Pucha, te dejo una respuesta de Matt Casters, el creador de Pentaho, a ver si ahora me crees: https://forums.pentaho.com/threads/...-when-using-the-Dimension-lookup-update-step/
 
Upvote 0
Se incorporó
4 Octubre 2007
Mensajes
338
Pucha, te dejo una respuesta de Matt Casters, el creador de Pentaho, a ver si ahora me crees: https://forums.pentaho.com/threads/...-when-using-the-Dimension-lookup-update-step/

Creo que te confundes porque no es lo que estoy diciendo. Aquí no hay problemas de concurrencia porque hay solo un Table Input -> Execute SQL Script

Algo parecido a lo que está en la documentación, en el problema que preguntó Lordnet no está pasando las filas de la BD por Pentaho, solo quiere ejecutar una query parametrizada X veces

1643218663682.png
 
Upvote 0

t3b4n

Ocioso
Se incorporó
27 Febrero 2006
Mensajes
1.659
Creo que te confundes porque no es lo que estoy diciendo. Aquí no hay problemas de concurrencia porque hay solo un Table Input -> Execute SQL Script

Algo parecido a lo que está en la documentación, en el problema que preguntó Lordnet no está pasando las filas de la BD por Pentaho, solo quiere ejecutar una query parametrizada X veces

Ver adjunto 21089
Sigue siendo ejecutado en paralelo. El primer step genera 5 registros, el segundo genera las secuencias y el tercero ejecuta tantas consultas como sea capaz de recibir, instantáneamente. No espera a que algún otro step o registro termine de procesarse, procesa tantos datos como pueda en paralelo.

En un job, los entries se ejecutan en secuencia, pues la idea del job es asegurar la ejecución de un flujo de tareas ordenadas. En una transformación, en cambio, todos los steps están listos para ejecutarse desde el inicio del proceso. Apenas reciben un registro, lo procesan y procesan tantos como la memoria y CPU aguante.
 
Upvote 0
Subir