10 Replies Latest reply: Feb 1, 2018 5:06 AM by Pedro ivo Barreto RSS

    Extração de dados por Ano e Meses

    Pedro ivo Barreto

      Bom dia comunidade,

       

      estou com dificuldade na extração de dados para o BI, no início quando a base era pequena o tempo de extração estava rápido e tranquilo, mas como o tempo passou o volume de registros aumentou consideravelmente.

       

      No inicio estava extraindo as informações do ano de 2017,  nos primeiro meses desse ano as tabelas ainda estavam com pouco volume o retorno estava bom, mas agora o tempo passou preciso continuar gerando dados desde janeiro 2017 até mês atual e assim para os próximos, ai nesse caso passou ficou muito lento e a todo momento congela ou a conexão Qlik cai.

       

      Gostaria de sugestões quanto ao modo de extração de grande volumes de dados qual o melhor modelo de extração.

        • Re: Extração de dados por Ano e Meses
          Clever Anjos

          Sugiro trabalhar com dados "fatiados" rodando a query somente para os periodos que forem necessarios, segue um exemplo

          set Path = 'D:\QvHome\Data\QVD\';

          For mes = 12 to 0 step - 1 // Extrai os ultimos "n" meses

               LET dt_inicio = timestamp( Monthstart(today() , -mes),'YYYY-MM-DD');

               LET dt_fim = timestamp( MonthEnd(  today(), -me),'YYYY-MM-DD hh:mm:ss.fff');

               Let File=Left(dt_inicio,6);

              T:

              SQL

               SELECT * from Tabela where Data between '$(dt_inicio)' and '$(dt_fim )';

              Store T into [$(Path)\nome_qvd$(File).qvd](qvd);

              Drop table T;

          Next

            • Re: Extração de dados por Ano e Meses
              Pedro ivo Barreto

              Clever

               

              usei a seguinte estrutura, mas não estou muito seguro se esta funcionando, estou errando em algum ponto?

               

              Vou avaliar sua sugestão enviada anteriormente.

               

               

              For Each vAno in '2018','2017'

              For Each vMes in '12','11','10','09','08','07','06','05','04','03','02','01'

               

              [ITEM GUIA SADT]:

              LOAD

               

               

                     BD6_CODPEG              AS [PEG ITEM],

                     BD6_CODPEG & BD6_NUMERO AS [KEY GUIA],

                     BD6_SEQUEN              AS [ITEM DA GUIA],

                     //BD6_CODPAD AS

                     BD6_CODPRO              AS [CODIGO EVENTO],

                     BD6_QTDAPR              AS [QUANTIDADE APRESENTADA],

                     BD6_VLRBPR              AS [VALOR CONTRATADO ITEM],

                     VALOR_APRESENTADO       AS [VALOR APRESENTADO ITEM],

                     BD6_VLRGLO              AS [VALOR GLOSADO ITEM],

                     BD6_VLRPAG              AS [VALOR PAGO ITEM],

                     BD6_CODESP              AS [CODIGO ESPECIALIDAE],

                     BD6_TIPREG              AS [TIPO REGISTRO],

                     //Num(BD6_FASE,'0')       AS [FASE ANALISE],

                     //BD6_NUMLOT              AS [NUMERO LOTE PAGAMENTO],

                     BD6_CODPEG & BD6_NUMERO & BD6_SEQUEN & BD6_CODPAD & BD6_CODPRO AS [KEY EVENTO GLOSADO] ;

               

              SELECT BD6.BD6_CODPEG,

                     BD6.BD6_NUMERO,

                     BD6.BD6_SEQUEN,

                     BD6.BD6_CODPAD,

                     BD6.BD6_CODPRO,

                     BD6.BD6_QTDAPR,

                     BD6.BD6_VLRBPR,

                     (BD6.BD6_VLRAPR)*(BD6.BD6_QTDAPR) AS VALOR_APRESENTADO,

                     BD6.BD6_VLRGLO,

                     BD6.BD6_VLRPAG,

                     BD6.BD6_VLRPAG,

                     BD6.BD6_CODESP,

                     BD6.BD6_MATRIC,

                     BD6.BD6_TIPREG,

                     BD6.BD6_FASE  ,

                     BD6.BD6_SITUAC,

                     BD6.BD6_NUMLOT,

                     BD6.BD6_ANOINT,

                     BD6.BD6_MESINT,

                     BD6.BD6_NUMINT,

                     BD6.BD6_STATUS,

                     BD6.BD6_MATANT,

                     BD6.BD6_ORIMOV,

                     BD6.BD6_BLOPAG

                    

              FROM K1QRD5_PROD.BCI010 BCI,

                   K1QRD5_PROD.BD5010 BD5,

                   K1QRD5_PROD.BD6010 BD6

              WHERE BD6.D_E_L_E_T_ = ' '

                AND BD5.D_E_L_E_T_ = ' '

                AND BCI.D_E_L_E_T_ = ' '

               

                AND BCI.BCI_FILIAL = '01  ' 

                AND BCI.BCI_CODOPE = '0001' 

                AND BCI.BCI_CODLDP >= '0001'

                AND BCI.BCI_CODLDP <= '0002'

                AND BCI.BCI_CODPEG >= '00000000'

                AND BCI.BCI_CODPEG <= '99999999'

                AND BCI.BCI_SITUAC = '1'

                AND BCI.BCI_ANO    =  '$(vAno)'

               

                AND BCI.BCI_FILIAL = BD5.BD5_FILIAL

                AND BCI.BCI_CODOPE = BD5.BD5_CODOPE

                AND BCI.BCI_CODLDP = BD5.BD5_CODLDP

                AND BCI.BCI_CODPEG = BD5.BD5_CODPEG

               

                AND BD5.BD5_FILIAL = BD6.BD6_FILIAL

                AND BD5.BD5_CODOPE = BD6.BD6_CODOPE

                AND BD5.BD5_CODLDP = BD6.BD6_CODLDP

                AND BD5.BD5_CODPEG = BD6.BD6_CODPEG

                AND BD5.BD5_NUMERO = BD6.BD6_NUMERO

               

                AND BD6.BD6_BLOPAG = '0'

                AND BD6.BD6_SITUAC = '1'

                AND BD5.BD5_SITUAC = '1'

               

                AND BCI_MES        = '$(vMes)';

              //  AND BCI_MES        >= '01'

              //  AND BCI_MES        <= '12';

               

              Store [PROTHEUS ITEM GUIA SADT] into '$(PastaDestino)/PROTHEUS ITEM GUIA SADT $(vAno)$(vMes).qvd';     

               

              Next vMes

              Next vAno

            • Re: Extração de dados por Ano e Meses
              Anderson Oberdan

              Bom dia Pedro

               

              A titulo de curiosidade eu tenho um Arquivo em QlikView que carrega semanalmente pouco mais de 300 milhões de registros de uma tabela SQL Server com cerca de 20 colunas e depois salva tudo em QVD. Não tenho encontrado problemas na recarga, a qual leva cerca de 02:30 (duas horas e meia) rodando. Porém o primeiro passo que dei foi conferir se todas as tabelas que uso (join) do SQL estão devidamente indexadas com as colunas que faço referência assim como na restrição (Where) da consulta também conferi se todos os campos referenciados estão indexados.

               

              Com isso o QlikView faz seu trabalho tranquilamente no meu caso.

               

              Vi que sua instrução acessa poucas tabelas porém com uma série de restrições, seria interessante conferir se todas estão indexadas.

                • Re: Extração de dados por Ano e Meses
                  Pedro ivo Barreto

                  Bom dia Anderson,

                   

                  eu acesso um banco Oracle de um fornecedor externo que é a TOTVS, não tenho privilégios para criar índices no banco porque a administração é toda da TOTVS.

                   

                  O script que apresentei é uma parte de um script bem maior que acessa outras tabelas.

                   

                  Percebi que estava fazendo tudo em memória e chegava um ponto que congelava tudo, ai acertei o script e comecei a direcionar para saídas QVDs e co isso a performance melhorou muito.

                   

                  Obrigado.