11 Replies Latest reply: Apr 23, 2014 2:15 PM by Pablo Labbe RSS

    Recarga Parcial

    Paulo Vanzela

      Prezados Bom dia.

       

      Estou contruindo um aplicacao, em que a soma dos registros armazenados em qvd, separados por mes, ultrapassa 20 milhões de registros... porém na aplicação com atualização diária, for recarregar diariamente o tempo que consome é muito alto.

       

      Tem alguma maneira de fazer a primeira carga de todos os qvds, e posteriormente manter em memoria os ja importados e carregar somente os novos qvds ????

        • Re: Recarga Parcial
          Fernando Tonial

          Olá, existe o prexifo Add.

           

          Segue informação retirada do manual do QlikView.

           

          O prefixo add pode ser incluído em qualquer comando Load, Select (SQL) ou Map ... using do script. Ele só possui significado durante Recarga Parcial. Durante uma recarga parcial, a tabela QlikView, para a qual um nome de tabela é gerado pelo comando add load/add select (desde que essa tabela exista), receberá o resultado do comando add load/add select. Não é feita a verificação de duplicatas. Portanto, um comando que use o prefixo add normalmente incluirá um qualificador distinct ou uma cláusula where que cerca as duplicatas. O comando replace map...using faz com que o mapeamento ocorra também durante a execução parcial do script.

           

          A sintaxe é:

           

          add [only] (loadstatement |selectstatement |mapstatement)

           

          onde:

           

          only é um qualificador opcional que indica que o comando deve ser desconsiderado durante as recargas normais (não-parciais).

           

          Exemplos:

           

          Tab1:

           

          LOAD Name, Number FROM Persons.csv;

           

          add load Nome, Número from novasPessoas.csv;

           

          Durante uma recarga normal, os dados são carregados de Pessoas.csv e armazenados na tabela Tab1 do QlikView. Os dados de NovasPessoas.csv são concatenados com a mesma tabela QlikView. Consulte Concatenação.

           

          Durante uma recarga parcial, os dados são carregados de NovasPessoas.csv e anexados à tabela Tab1 do QlikView. Não é feita a verificação de duplicatas.

           

          Tab1:

           

          SELECT Name, Number FROM Persons.csv;

           

          ADD LOAD Name, Number FROM NewPersons.csv Where not exists(Name);

           

          É feita uma verificação de duplicatas verificando se Nome existe nos dados da tabela anteriormente carregada (consulte a função exists em exists(campo [ , expressão ])).

           

          Durante uma recarga normal, os dados são carregados de Pessoas.csv e armazenados na tabela Tab1 do QlikView. Os dados de NovasPessoas.csv são concatenados com a mesma tabela do QlikView.

           

          Durante uma recarga parcial, os dados são carregados de NovasPessoas.csv e anexados à tabela Tab1 do QlikView. Testa-se a existência de duplicatas com a verificação da existência de Nome nos dados da tabela carregada anteriormente.

           

          Tab1:

           

          LOAD Name, Number FROM Persons.csv;

           

          ADD ONLY LOAD Name, Number FROM NewPersons.csv Where not exists(Name);

           

          Durante uma recarga normal, os dados são carregados de Pessoas.csv e armazenados na tabela Tab1 do QlikView. O comando que carrega NovasPessoas.csv é ignorado.

            • Re: Recarga Parcial
              Paulo Vanzela

              Fernando Olá ... antes de tudo grato novamente pelo seu apoio.

               

              Vamos lá ... minha estrutura de qvd é a seguinte:

               

              saldoDeEmprestimos_201302.qvd

              saldoDeEmprestimos_201303.qvd

              saldoDeEmprestimos_201304.qvd

              saldoDeEmprestimos_201305.qvd

               

              E assim por diante ...

               

              Para a primeira carga o script, onde estaria carregando todos os arquivos, seria..

               

              emprestimos:

              load * from [...qvd/saldoDeEmprestimos_.*]

               

              ok ?

               

              Como aplicaria no meu script a clausula ADD ...

               

              Outra pergunta ... nestes Qvd armazeno a database, por ex: 31/03/2014.

              Seria possivel armazenar este valor em uma variavel... e carregar somente os registros dos qvds aonde a database é maior que a ultima armazenada ??

                • Re: Re: Recarga Parcial
                  Fernando Tonial

                  Paulo, Particularmente eu prefiro ler todos os dados dos arquivos QVDs, sempre evito utilizar o prefixo Add, pois a execução do load só funciona se a recarga for parcial.

                   

                  O seu script deve ficar assim com o prefixo Add.

                   

                  emprestimos:

                  Load * from [...qvd/saldoDeEmprestimos_*.QVD] (qvd);

                  Add Load * from [...qvd/saldoDeEmprestimos_UltimoMes.QVD] (qvd); // Onde o ultimo mês deve ser apenas o incremento de informação entre a ultima carga e esta carga.

                   

                  Sobre a data base, como funciona exatamente em seus dados, no mesmo arquivo QVD pode ter mais de uma data base?

                   

                  Abraços.

                  Tonial.

                    • Re: Recarga Parcial
                      Paulo Vanzela

                      Não a data-base é unica.

                       

                      Como os registros são calculados e armazenados em arquivos mensais, armazendo como database o ultimo dia do mês em questão que foi processado.

                       

                      Por ex, no arquivo: saldoDeEmprestimos_201302.qvd

                       

                      Vai constar:

                       

                      registro           data base

                      1                   '28/02/2013'

                      2                   '28/02/2013'

                      3                   '28/02/2013'

                       

                      O problema que tenho em fazer o Load completo é que hoje levo quase 4 hrs para reimportar todos os arquivos, e isto para mim é um tempo muito longo, considerando que é executado toda noite.

                       

                      Um outro detalhe que observei é que no QMC não tenho uma opção para indicar se a carga é normal ou parcial... vou ter que criar um batch para ser executado exclusivamente para aplicação ...

                        • Re: Recarga Parcial
                          Fernando Tonial

                          A opção de recarga parcial esta disponível apenas para quem possui o publisher.

                          Muito estranho demorar tanto tempo para fazer a recarga dos dados.

                          Você esta fazendo apenas Load ou alguma transformação junto?

                           

                          Sobre a data você pode utilizar variáveis para pegar uma data de referencia.

                           

                          Exemplo

                          Let vDataRef = MonthEnd(AddMonths(Today(),-1));

                           

                          Abraços.

                          Tonial.

                            • Re: Recarga Parcial
                              Paulo Vanzela

                              A unica alteração que faço é concatenar 3 campos e adicionar um AUTONUMBERHASH256 afim de criar a PK da tabela no qlikview.

                                • Re: Recarga Parcial
                                  Fernando Tonial

                                  Esse é o motivo da demora, realmente para grande volumes de dados esse processo faz com a carga de dados demore mais.

                                    • Re: Recarga Parcial
                                      Paulo Vanzela

                                      Fernando .. entendi ..

                                       

                                      Uso o hash no momento de carregar meus qvds no aplicativo visando a performance do mesmo...mas com a tua dica vou mudar a minha estrategia e aplicar o hash na carga dos dados do Qvd ...

                                       

                                      Imagino que ficara mais rápido.

                                        • Re: Recarga Parcial
                                          Fernando Tonial

                                          Já trabalhei com arquivos QVDs com 2 milhões de linhas e fazendo concatenação automática entre eles e demorava menos de 10 segundos entre cada um deles.

                                           

                                          Abraços.

                                          Tonial.

                                          • Re: Recarga Parcial
                                            Aderlan Rodrigues

                                            Olá Paulo,

                                             

                                            Além do que o nosso mestre Tonial já disse, você pode fazer a transformação que precisa na hora de gravar o QVD, que tem poucos dados e gravará rápido, na leitura, quanto mais pronto, melhor.

                                             

                                            Você pode fazer até três camadas:

                                            Extração

                                            Transformação

                                            Load, ops! Carga! Rsrsrsr...

                                             

                                            Ou seja, você pode criar um QVW que será agendado para se conectar com o banco e criar um QVD puro, com os dados iguais ao que está na origem, sem nenhuma transformação, por exemplo, um saldo_20130416.qvd.

                                             

                                            Depois criar um QVW que faz a leitura desses QVDs e todas as tratativas, soma, hash, divisão... por exemplo, saldo_201304.qvd.

                                             

                                            E por fim, o seu QVW final faz a leitura de todos os QVDs prontos, LOAD * From [saldo_*.qvd];

                                             

                                            Assim você consegue controlar bem os dados de cada carga e os melhores horários para cada trabalho.

                                             

                                            Abraço.

                                        • Re: Recarga Parcial
                                          Pablo Labbe

                                          Paulo,

                                           

                                             Se você usa a PK como chave para associação com outra tabela, ok em mantê-la no modelo, caso contrário não a crie. É perda de tempo e de espaço de memória.

                                           

                                          Att,

                                           

                                          Pablo Labbe

                                          Consultor Certificado Qlikview