Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Boa tarde, quero uma sugestão de vocês para a criação e atualização dos arquivos QVDs.
Hoje eu faço select de 14 tabelas onde no projeto de carga eu separo elas por mês e salvo separadamente, exemplo:
select * from tabela1(...) mes='04' salvo como tabela1_04.qvd
select * from tabela1(...) mes='05' salvo como tabela1_05.qvd
e assim com todas elas, entao no projeto eu concateno todos os qvds. até aqui ta funcionando ok.
Porém dessa forma apenas é viável como teste, acredito que a carga esteja muito demorada para eu colocar como homologação,
pensei em criar uma variavel do mes atual exemplo
select * from tabela1 (...) mes= $var_mes e salvar como tabela1_$var_mes.qvd
Minha duvida é que se algum dado anterior for modificado no sistema eu vou perder e no fim do mes, será que dessa forma vou perder o ultimo dia?
Como voces fazem o script de carga?
Vi que o Fernando Tonial em um outro questionamento colocou o seguinte codigo:
Exemplo de Script:
Tabela_QV:
SQL SELECT ChavePrimária, X, Y FROM DB_TABLE
WHERE HoraModificação >= #$(HoraÚltExec)#;
Concatenate LOAD ChavePrimária, X, Y FROM Arquivo.QVD
WHERE NOT Exists(ChavePrimária);
STORE Tabela_QV INTO Arquivo.QVD;
Porém não sei como eu crio esse campo de HoraModificação, e a chave primaria pensei em usar o OID do banco, o que acham?
Hamilton,
Em alguns clientes onde é possível eu utilizo a carga incremental de QVD's... em um cliente aqui, acabei gerando um QVD maior com os dados anteriores ao ano em questão, ou seja, de 2013 para baixo... como sei que as informações não serão mudadas nesse período, gerei o QVD uma única vez e o carrego a cada carga no QVW.
Já o do ano atual, faço incremental (atualização e inserção). Dá uma olhadinha na documentação sobre carga incremental, lembrando que o banco de dados tem que ter estrutura para suportar isto (datas que possam ser utilizadas como filtro para o incremental).
Abraços.
sera que eu consigo criar um campo ID pelo proprio SQL na hora de gerar o qvd? Ficaria confiável?
Você pode criar uma regra para verificar se for o último dia do mês, a carga deve atualizar o mês anterior e o mês atual.
Sobre perder registros, você deve verificar se existe uma coluna preenchida para data de atualização, em caso positivo você consegue fazer carga incremental por atualização com qvds quebrados por mês, mas ficará um pouco mais complicado o código.
Vi que o Fernando Tonial em um outro questionamento colocou o seguinte codigo:
Exemplo de Script:
Tabela_QV:
SQL SELECT ChavePrimária, X, Y FROM DB_TABLE
WHERE HoraModificação >= #$(HoraÚltExec)#;
Concatenate LOAD ChavePrimária, X, Y FROM Arquivo.QVD
WHERE NOT Exists(ChavePrimária);
STORE Tabela_QV INTO Arquivo.QVD;
Porém não sei como eu crio esse campo de HoraModificação, e a chave primaria pensei em usar o OID do banco, o que acham?
Esse exemplo foi retirado do manual e assume que você possua um campo "HoraModificação" em sua tabela.
Qualquer campo que seja garantidamente sequencial serve.
Olá Hamilton, tudo bem?
Então, a data da modificação é como o Clever falou, já existe no banco, em muitos casos é a data de cadastro do registo, ou data de atualização, ultima alteração, são vários os nomes que são usados, quando são.
Há casos onde existe um campo de autoincremento no banco, ID alguma coisa... Esse também pode ser usado, pegando só os registros com número maior que os que já foram carregados antes.
A chave pode ser do banco ou pode ser gerada no QlikView, algo assim:
LOAD AutoNumberHash128(A,B) as Chave, X, Y;
SQL Select A, B, X, Y from Tabela where DataCadastro >= '$(vUltCarga)';
Concatenate LOAD Chave, X, Y From ...
Abraço.
Obrigado pela ajuda pessoal, consegui entender esse codigo hehe,
a principio vou usar o ID do prório banco pois pelos testes que fiz, caso duas ou mais linhas sejam identicas o sistema ignora todas e considera apenas uma, acredito que neste caso o ID do seja o mais confiável. Não testei com a AutoNumberHash128 mas é outra solução.