5 Replies Latest reply: Jun 16, 2011 10:56 AM by mauriciobc RSS

    Criação de Nuvem de Dados

      Boa tarde a todos.

       

      Estou fazendo um desenvolvimento que envolve a área de controladoria da empresa e preciso trabalhar com os balancetes das empresas do grupo.

       

      São 6 empresas e preciso fazer a primeira massa de dados com o periodo Janeiro de 2009 até Abril de 2011 de todas as empresas. E depois disso vou automatizar a carga para Mes Corrente -1 como base. mas isso é algo que ainda vai ser desenvolvido.

       

      Uma das minhas duvidas é se existe a possibilidade de fazer isso com um loop.

       

      A segunda é a parte incremental. Eu nunca fiz algo desse tipo. E pelo que consegui ver nas pesquisas o ideal é que se tenha uma chave primaria na tabela e uma coluna com a data de inserção.  Porém a tabela que eu vou trabalhar nasce a partir da execução de uma procedure. E a cada execução dessa procedure a tabela é renovada.

       

      Se eu conseguir montar a parte incremental acho que ja consegui solucionar o meu problema.

       

      Muito obrigado desde já.

        • Re: Criação de Nuvem de Dados

          Boa Tarde Mauricio,

           

          Seguem suas duvidas:

           

          1ª) Referente a primeira,não entendi o que você deseja rodar em loop;

           

          2ª) Existem diversos conceitos para aplicar a carga incremental, o ideal é que sempre tenha uma data como referência para saber quais são os novos registros.

           

          A idéia é quando for executar a primeira carga, estas informações sejam gravados em um arquivo QVD.

           

          Quando rodar as próximas recargas, você deve utilizar dois LOADS onde o primeiro é feita a leitura dos dados antigos (*.qvd), é utilizado o comando "ADD" e em seguida o segundo LOAD com as novas informações.

           

          Segue um exemplo de uma carga incremental.

           

          Abraços

            • Re: Criação de Nuvem de Dados

              Olá Eduardo

               

              Muito obrigado pela ajuda. Já vou tentar implementar algo desse tipo e testar.

               

              Quanto a primeira questão é o seguinte.

              As informações que vou extrair partem da execução de uma procedure. Essa procedure exige um parametro de "Ano e Mes" (ex: 201104, 200901) e vou precisar fazer a carga desde 2009. E pra cada mes demanda uma execução da procedure.

               

              O que eu tinha em mente era fazer um controle de fluxo para executar a procedure, fazer a select e incrementar no QVD.

               

              Caso não seja dessa forma acredito que será preciso fazer uma execução do script para cada mes.

                • Re: Criação de Nuvem de Dados

                  Para realizar este loop ficaria algo mais ou menos assim:

                   

                  // Data inicial

                  LET vDtIni = DATE('01/08/2009', 'DD/MM/YYYY');    

                  // Data final
                  LET vDtFim = DATE('01/02/2011', 'DD/MM/YYYY');  

                  // Diferença de meses entre as datas
                  LET numMeses = (MONTH(vDtFim) - MONTH(vDtIni)) + ((YEAR(vDtFim) - YEAR(vDtIni)) * 12); 

                   
                  LET pAnoMes = vDtIni;

                   

                  // Variavel utilizada apenas para teste
                  LET j = 0;

                   

                  // Inicio do LOOP Executará a de acordo com o valor gravado na variavel que verificou a diferença de meses

                  FOR i=1 TO $(numMeses)


                  pAnoMes = YEAR(vDtIni) & NUM(MONTH(vDtIni), '00');

                  // Chamada da sua procedure

                  //SQL CALL SP_BALAN ('AGRUPAMENTO',  2, 1,'1', NULL, $(pAnoMes),'    ', 'CONTA', 0, 5, 'N', 'N');
                  ...
                  ...

                  // Incrementa o mês da sua variável

                  pAnoMes = YEAR(ADDMONTHS(vDtIni, i)) & NUM(MONTH(ADDMONTHS(vDtIni, i)), '00');

                   

                  // Final do LOOP

                  NEXT