Autor Tema: Bucle "while" de MySQL en Kettle  (Leído 3695 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado gilanrodas

  • Sv Full Member
  • *
  • Mensajes: 527
  • What Would Jesus Do?
Bucle "while" de MySQL en Kettle
« : septiembre 22, 2015, 11:11:49 pm »
¡Hola!

Verán, necesito incluir en un script MySQL en Pentaho Data Integration, un bucle "while" para llenar una dimensión tiempo. Tengo el siguiente código que me funciona perfectamente en MySQL pero no logro hacer que funcione en el control "Ejecutar script SQL" de PDI. Leí por ahí que no es posible que los bucles en script se ejecuten. ¿Tiene alguien alguna idea o sugerencia de cómo puedo hacer? ¡Muchas gracias desde ya! :)

Código: [Seleccionar]
DROP procedure IF EXISTS `llenarDimTiempo`;

SET lc_time_names = 'es_SV';

/* Obtengo las fechas mínima y máxima para la dimensión tiempo*/
SET @fecMin = (SELECT MIN(LEAST(fecrecib, fecdiag, fecrepar, fecdevol)) FROM tempExcel);
SET @fecMax = (SELECT MAX(GREATEST(fecrecib, fecdiag, fecrepar, fecdevol)) FROM tempExcel);

DELETE from tempExcel where YEAR(fecrecib)<2002 or YEAR(fecdiag)<2002 or YEAR(fecrepar)<2002 or YEAR(fecdevol)<2002;

DELIMITER $$

CREATE PROCEDURE `llenarDimTiempo` ()

/* Lleno la dimensión tiempo con cada fecha comprendida en el rango obtenido de la tabla 'tempExcel' */
BEGIN
WHILE (@fecMin <= @fecMax) DO

    set @diaMes = dayofmonth(@fecMin);
    set @diaAnio = dayofyear(@fecMin);
    set @nombreDiaSemana = dayname(@fecMin);
    set @diaSemana = dayofweek(@fecMin);
    set @esDiaSemana = IF(@diaSemana=1 or @diaSemana=7,'No','Sí');
    set @semanaAnio =  WEEK(@fecMin,0);
    set @nombreMes = monthname(@fecMin);
    set @mesAnio = MONTH(@fecMin);
    set @anioCalendario = YEAR(@fecMin);
    set @trimestreCalendario = CONCAT('Trimestre ',QUARTER(@fecMin));
    set @semestreCalendario = IF(QUARTER(@fecMin)=1 or QUARTER(@fecMin)=2,'Semestre 1','Semestre 2');
    set @anioCalendarioMes = IF(@mesAnio<10, CONCAT(@anioCalendario,'0',@mesAnio), CONCAT(@anioCalendario,@mesAnio));
    set @anioCalendarioTrimestre = CONCAT(@anioCalendario,'0',RIGHT(@trimestreCalendario,1));
    set @anioCalendarioSemestre = CONCAT(@anioCalendario,'0',RIGHT(@semestreCalendario,1));
    set @esUltimoDiaMes = if(@fecMin=LAST_DAY(@fecMin),'Sí','No');
    set @tiempoKey = CONCAT(@anioCalendario,IF(@mesAnio<10,'0',''),@mesAnio,IF(@diaMes<10,'0',''),@diaMes);

    insert into DimTiempo (tiempoKey,fechaCompleta,diaSemana,nombreDiaSemana,diaMes,diaAnio,esDiaSemana,
    semanaAnio,nombreMes,mesAnio,esUltimoDiaMes,trimestreCalendario,semestreCalendario,anioCalendario,
    anioCalendarioMes,anioCalendarioTrimestre,anioCalendarioSemestre) values (@tiempoKey,@fecMin,@diaSemana,@nombreDiaSemana,@diaMes,@diaAnio,@esDiaSemana,
    @semanaAnio,@nombreMes,@mesAnio,@esUltimoDiaMes,@trimestreCalendario,@semestreCalendario,@anioCalendario,
    @anioCalendarioMes,@anioCalendarioTrimestre,@anioCalendarioSemestre);
    delete from dimclientes;
   
/* Incremento la fecha en uno hasta llegar a la fecha máxima obtenida al inicio */
set @fecMin = DATE_ADD(@fecMin, INTERVAL 1 day);

END WHILE;

END $$

DELIMITER ;

call llenarDimTiempo();

Desconectado Balmossther

  • The Communiter-
  • *
  • Mensajes: 1078
  • Una alma Sana, Reside en una mente sana
Re:Bucle "while" de MySQL en Kettle
« Respuesta #1 : septiembre 23, 2015, 07:26:15 am »
Pentaho Data Integration, ni una vez lo he usado, pero me llamo la atencion, segun lei tiene algunas limitantes

Citar
El "Editor SQL simple" no reconoce los dialectos de todas las bases de datos soportadas. Esto significa que crear procedimientos almacenados, disparadores, y otros objetos específicos de base de datos pueden plantear problemas. En estos casos se debe considerar el uso de las herramientas que vienen con la base de datos.

te dejo unos link que estuve leindo

Código: [Seleccionar]
http://wiki.pentaho.com/display/EAIes/Manual+del+Usuario+de+Spoon
https://churriwifi.wordpress.com/2010/05/10/16-3-construccion-procesos-etl-utilizando-kettle-pentaho-data-integration/
http://wiki.pentaho.com/display/EAIes/.04+Editor+SQL

███████████████████████████████████████████████████████████████

Desconectado gilanrodas

  • Sv Full Member
  • *
  • Mensajes: 527
  • What Would Jesus Do?
Re:Bucle "while" de MySQL en Kettle
« Respuesta #2 : septiembre 24, 2015, 11:23:20 pm »
Pentaho Data Integration, ni una vez lo he usado, pero me llamo la atencion, segun lei tiene algunas limitantes

te dejo unos link que estuve leindo

Código: [Seleccionar]
http://wiki.pentaho.com/display/EAIes/Manual+del+Usuario+de+Spoon
https://churriwifi.wordpress.com/2010/05/10/16-3-construccion-procesos-etl-utilizando-kettle-pentaho-data-integration/
http://wiki.pentaho.com/display/EAIes/.04+Editor+SQL



¡Gracias! Estoy tratando de encontrar la forma de hacer este mismo proceso. Leí por ahí que con el uso de diferentes controles de PDI y repetición, se puede hacer, pero ahí voy probando a ver qué sale. Jeje.