13 Replies Latest reply: May 17, 2016 9:07 AM by Marcio Rodrigo Campestrini RSS

    Autonumber

    maicon mello

      Boa tarde Pessoal, estou fazendo alguns estudos e gostaria de verificar e sanar algumas dúvidas referente a autonumber.

       

      Até onde conheço o autonumber quando utilizo para uma chave composta, ele gera um sequencial sobre uma chave que mandei criar, com isso reduzindo consumo e memória e deixando mais otimizado.

       

      Dúvida é :

       

      Quando faço um autonumber em um load , em seguinte dou um store e drop a tabela, a próxima tabela que eu criar um autonumber ele mantém o mesmo autonumber da leitura da tabela anterior ??

       

      Ou para que não perca a referencia eu preciso primeiro ler as tabelas e depois no final somente dar o store das mesma e drop consequentemente ??

       

      Não sei se fui claro mas vou tentar simular um exemplo :

       

      nf:

      Load autonumber(NumNF &'-'&  Serie ) as PK_NOTA,

              NumNF from tabela;

       

      Store nf into c:\qlik\qvd\nf.qvd(qvd);

      drop table nf;

       

      =====================================================

       

      ItemNF:

      Load autonumber(NumNF &'-'&  Serie ) as PK_NOTA,

              itemNF from tabela 2;

       

      Store ItemNF into c:\qlik\qvd\ItemNF.qvd(qvd);

      drop table ItemNF;

       

      //Quando fazer a leitura dos dois QVD a PK_NOTA estarão com a referencia correta ??

        • Re: Autonumber
          Marcio Rodrigo Campestrini

          Maicon,

           

          Segundo o manual do Qlikview, "Para criar várias instâncias de contador, se a função autonumber for usada em chaves diferentes no script, um parâmetro opcional IDAuto poderá ser usado para nomear cada contador. Ex: autonumber( Região&Ano&Mês, 'Ctr1' )"

           

          Apesar disso, sugiro a utilização de AutoNumberHash128, "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."

            • Re: Autonumber

              Márcio,

               

              Poderia me explicar melhor a função "AutoNumberHash128"? Estou em um projeto no momento que preciso melhorar o uso de memória e o tempo de resposta do Qlik visto que estou trabalhando na casa dos milhões de registros.

               

              Qual o ganho entre AutoNumber e ou AutoNumberHash128? O ganho de performance frente a concatenação das strings é sensível?

               

              Desde já agradeço.

                • Re: Autonumber
                  Marcio Rodrigo Campestrini

                  Gustavo,

                   

                  A diferença principal entre as duas funções é que a função Autonumber recebe dois parâmetros (valor e identificador da chave), enquanto que a função AutonumberHash128 recebe mais parâmetros (valor1, valor2, valor3, ...).

                  Caso a sua chave contenha mais de um campo, a função Autonumber deverá receber os campos da chave concatenados, e é necessário o uso do parâmetro <identificador da chave) para que o Qlikview crie chaves distintas no modelo de acordo com a necessidade.

                   

                  Posto isso, entendo que o AutonumberHash128 irá lhe atender melhor, mas é muito importante observar o que o Yuri pontou.

                   

                  Márcio

              • Re: Autonumber
                Yuri Nicolett

                Maicon, autonumber ou autonumberhash (128, 256, etc) depende da ordem em que os campos foram inseridos em sua tabela, ou seja, se você criar uma carga incremental e nesta carga já armazenar um campo de autonumber ou autonumberhash, você PROVAVELMENTE terá problemas, pois os valores irão se perder.

                 

                Seguindo o conceito de melhores práticas, autonumber ou autonumberhash, devem ser criados no momento em que todos os registros foram carregados, ou seja, não gere esse campo em seus qvds incrementais, deixe para gerar no momento final de leitura em sua aplicação.

                  • Re: Autonumber
                    Marcio Rodrigo Campestrini

                    Yuri,

                     

                    Nessa linha, no momento da leitura dos dados para a aplicação, eu forço a leitura otimizada e depois faço uma nova leitura da tabela criando as chaves via Autonumber (hash ou não)?

                      • Re: Autonumber
                        Yuri Nicolett

                        Márcio, depende do volume de registros e colunas que a sua tabela possui. É bom fazer os testes entre os dois cenários: criar a chave na leitura da sua tabela ou fazer uma leitura otimizada e depois fazer o join com a chave.

                         

                         

                        Cenário 1)

                         

                        Tabela:

                        LOAD *, AutoNumberHash128(CAMPO1, CAMPO2, CAMPO3) as CHAVE FROM tabela.qvd (qvd);

                         

                         

                         

                        Cenário 2)

                         

                        Tabela:

                        LOAD * tabela.qvd (qvd); //Leitura otimizada

                         

                        Chave_Tmp

                        LOAD DISTINCT AutoNumberHash128(CAMPO1, CAMPO2, CAMPO3) as CHAVE, CAMPO1, CAMPO2, CAMPO3 RESIDENT Tabela; //Leitura não otimizada, mas somente das linhas da chave.

                         

                        LEFT JOIN (Tabela)

                        LOAD

                            *

                        RESIDENT Chave_Tmp;

                         

                        DROP TABLE Chave_Tmp;

                    • Re: Autonumber
                      Clever Anjos

                      Achou a solução? Se sim, marque as corretas e úteis, por favor

                      • Re: Autonumber
                        Marcio Rodrigo Campestrini

                        Bom dia Maicon

                         

                        O seu problema foi resolvido? Se sim, marque as respostas úteis/corretas para fechar o tópico.

                         

                        Obrigado