18 Replies Latest reply: Nov 14, 2014 12:31 PM by Antonio Mercadante RSS

    Gerar QVD com foto diária

    Antonio Mercadante

      Sr.(as) Boa tarde!

       

      Alguém pode me ajudar com a seguinte necessidade.

       

      Tenho uma consulta que retorna faturamento e arrecadação, preciso armazenar uma foto diária  desta carga em um QVD.

      Porem só quero gravar as linhas que tiveram alteração, pois duplicar o arquivo não é viável

       

      Pensei algo do tipo, diariamente faço a carga e comparo os registros da consulta com os registros já gravados no QVD. Se teve alguma alteração em algum campo eu gravo o registro com a data da alteração. Caso contrário descarto o registro e mantenho o que está no QVD. Não vou substituir o registro do qvd, se tiver alteração adiciono a linha se não mantenho.

       

       

      Alguém pode me mostrar o caminho das pedras por gentileza?

       

       

      Obrigado!

        • Re: Gerar QVD com foto diária
          Yuri Nicolett

          Antonio, você deseja comparar quais campos para saber se houve alteração?

          • Re: Gerar QVD com foto diária
            Luciano Vasconcelos

            Antônio, o que pode alterar no banco? Você poderia criar um campo na tabela para gravar um autonumberrash feito com todos os campos que podem alterar?

            O ideal seria você ter um identificador de linha e comparar só o autonumberrash das linhas entre o qvd e o banco.

              • Re: Gerar QVD com foto diária
                Antonio Mercadante

                Luciano,

                 

                Vou criar uma chave com os 51 campos da minha tabela.

                 

                Agora minha duvida é, preciso criar utilizando o autonumber, ou posso simplesmente concatenar os campos e depois compara-los com QVD com SQL?

                  • Re: Gerar QVD com foto diária
                    Luciano Vasconcelos

                    Bom dia.

                    É um pouco custoso para o processamento do QV, mas o autonumberhash parece uma solução melhor que comparar todos os campos.

                     

                    autonumberhash128(expressão {, expressão})

                    Calcula um hash de 128 bits dos valores combinados de entrada de expressão e retorna um valor inteiro exclusivo para cada valor de hash distinto encontrado durante a execução do script. Esta função pode ser usada, por exemplo, para criar uma representação de memória compacta de uma chave composta.

                    Exemplo:

                    autonumberhash128 ( Região, Ano, Mês )

                     

                    Apesar disso, você precisará de duas chaves:

                     

                    Chave 1 - Garantir a compararação das mesmas linhas

                    Chave 2 - Comparar todo conteúdo da linha.

                     

                    Caso não ocorram exclusões ou inclusões de linha, talvez você consiga fazer sem a Chave 1, mas o processo ficaria mais fácil de entender com as duas chaves.

                    • Re: Gerar QVD com foto diária
                      Yuri Nicolett

                      Antonio, neste caso você deve utilizar a concatenação de campos, pois o AutoNumberHash é um número gerado em tempo de execução da recarga, a cada recarga esse número pode mudar e não é confiável para a ação que esta tentando utilizar, que é justamente procurar alteração de registro.

                        • Re: Gerar QVD com foto diária
                          Luciano Vasconcelos

                          Boa mestre.

                          Eu achava que o mesmo conjunto de dados geraria o mesmo valor.

                          Não deveria ser assim?

                          Aprendi mais uma. Vlw.

                          • Re: Gerar QVD com foto diária
                            Antonio Mercadante

                            Bom dia!

                             

                            Estou fazendo desta forma.

                             

                            [Carga Arrecadação QVD]:

                            load

                              CHAVE,

                              [Data/Hora Carga]

                            From

                              [$(vPathQvd)\BASE_DIARIA_ARRECADACAO.QVD]

                              (qvd);

                             

                            NoConcatenate

                            [Carga Arrecadação SQL]:

                            LOAD

                              CHAVE,

                              now(0) AS [Data/Hora Carga]

                            ;

                            sql

                            SELECT

                              CAMPO01||'|'|| CAMPO02 ||'|'|| CAMPO03 ||'|'|| CAMPO04 ||'|'|| CAMPO05||'|'|| CAMPO06||'|'|| CAMPO07||'|'|| CAMPO08||'|'|| CAMPO09||'|'|| CAMPO09

                              ||'|'|| CAMPO10||'|'|| CAMPO11||'|'|| CAMPO12||'|'|| CAMPO13||'|'|| CAMPO14||'|'|| CAMPO15||'|'|| CAMPO16||'|'|| CAMPO17||'|'|| CAMPO18 ||'|'|| CAMPO19||'|'|| CAMPO20

                              ||'|'|| CAMPO21 ||'|'|| CAMPO22||'|'|| CAMPO23||'|'|| CAMPO24||'|'|| CAMPO25||'|'|| CAMPO26||'|'|| CAMPO27||'|'|| CAMPO28||'|'|| CAMPO29||'|'|| CAMPO30||'|'|| CAMPO31

                              ||'|'|| CAMPO32||'|'|| CAMPO33||'|'|| CAMPO34||'|'|| CAMPO35||'|'|| CAMPO36||'|'|| CAMPO37||'|'|| CAMPO38||'|'|| CAMPO39||'|'|| CAMPO40||'|'|| CAMPO41||'|'|| CAMPO42

                              ||'|'|| CAMPO43 ||'|'|| CAMPO44||'|'|| CAMPO45||'|'|| CAMPO46||'|'|| CAMPO47||'|'|| CAMPO48||'|'|| CAMPO49||'|'|| CAMPO50 AS CHAVE

                            from

                                  arrecadacao_analitico;

                             

                            Concatenate ([Carga Arrecadação QVD])

                            load

                              CHAVE,

                              [Data/Hora Carga]

                            Resident

                              [Carga Arrecadação SQL]

                            where

                              not Exists('CHAVE',[CHAVE]);

                             

                            Minha intenção é que quando tenha inclusão de informação no QVD, ele grave a data e hora que esta informação foi alterada.

                             

                            Mas esta substituindo tudo

                            • Re: Gerar QVD com foto diária
                              Antonio Mercadante

                              Srs. Aparentemente consegui resolver com esse código.

                               

                              Muito obrigado pela ajuda de vocês, foi fundamental para o meu entendimento.

                               

                              [QVD]:

                              load

                                CHAVE,

                                [Data/Hora Carga]

                              From

                                [$(vPathQvd)\ARRECADACAO.QVD]

                                (qvd);

                               

                               

                              Concatenate([QVD])

                              LOAD

                                now(0) AS [Data/Hora Carga],

                                campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo

                                &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo

                                &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo

                                &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo

                                &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo

                                &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo as CHAVE

                              where

                                not Exists('CHAVE',campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo

                                  &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo

                                  &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo

                                  &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo

                                  &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo

                                  &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo &'|'& campo)

                              ;

                              sql

                              SELECT

                                campo ||'|'|| campo ||'|'|| campo ||'|'|| campo ||'|'|| campo ||'|'|| campo ||'|'|| campo ||'|'|| campo ||'|'|| campo ||'|'|| campo

                                ||'|'|| campo ||'|'|| campo ||'|'|| campo ||'|'|| campo ||'|'|| campo ||'|'|| campo ||'|'|| campo ||'|'|| campo ||'|'|| campo

                                ||'|'|| campo ||'|'|| campo ||'|'|| campo ||'|'|| campo ||'|'|| campo ||'|'|| campo ||'|'|| campo ||'|'|| campo ||'|'|| campo

                                ||'|'|| campo ||'|'|| campo ||'|'|| campo ||'|'|| campo ||'|'|| campo ||'|'|| campo ||'|'|| campo ||'|'|| campo

                                ||'|'|| campo ||'|'|| campo ||'|'|| campo ||'|'|| campo ||'|'|| campo ||'|'|| campo ||'|'|| campo ||'|'|| campo

                                ||'|'|| campo ||'|'|| campo ||'|'|| campo ||'|'|| campo ||'|'|| campo ||'|'|| campo ||'|'|| campo AS CHAVE,

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                                campo

                              from

                                arrecadacao_analitico;