Qlik Community

Qlik Brasil

Group community for Brazil users. discussion only in Portuguese.

Highlighted
maiconmello
Contributor III

Autonumber

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 ??

1 Solution

Accepted Solutions

Re: Autonumber

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.

13 Replies
MCampestrini
Valued Contributor

Re: Autonumber

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."

Márcio Rodrigo Campestrini

Re: Autonumber

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.

Not applicable

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.

MCampestrini
Valued Contributor

Re: Autonumber

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

Márcio Rodrigo Campestrini
Not applicable

Re: Autonumber

Na prática o que vai mudar é o desenvolvimento do script pelo que entendi.

Em se tratando de performance em tempo de execução da aplicação será a mesma. Talvez tenha alteração no tempo da carga de dados.

MCampestrini
Valued Contributor

Re: Autonumber

Não percebi diferença substancial entre os dois processos.

Márcio Rodrigo Campestrini
Not applicable

Re: Autonumber

Na prática fiz o teste ontem tirando as chaves da concatenação normal e usando o autonumber e a diferença foi brutal.

Já tinha usado essa prática antes mas não tinha percebido diferença substancial, porém como estou trabalhando com um volume considerável de dados dessa vez o tamanho do QVW diminuiu muito e a navegabilidade melhorou bastante.

Re: Autonumber

A diferença entre as duas é que as funções de hash primeiro fazem a encriptação dos dados para depois fazer um autonumber. Em questão de performance não existe diferenças.

Re: Autonumber

Sim, entre chave concatenada e autonumber (hash ou não) a diferença na performance de navegabilidade é gritante.